@macrulez/vue-form-schema 0.1.7 → 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 (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +461 -180
  3. package/dist/MaskEngine-BEXwX4BK.js +144 -0
  4. package/dist/MaskEngine-CPr-fSPy.cjs +1 -0
  5. package/dist/ValidationEngine-BC4U1ef1.js +135 -0
  6. package/dist/ValidationEngine-Diz-qTFs.cjs +1 -0
  7. package/dist/_plugin-vue_export-helper-BHFhmbuH.cjs +1 -0
  8. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
  9. package/dist/core/ConditionEvaluator.d.ts.map +1 -1
  10. package/dist/core/MaskEngine.d.ts.map +1 -1
  11. package/dist/core/ValidationEngine.d.ts +13 -0
  12. package/dist/core/ValidationEngine.d.ts.map +1 -1
  13. package/dist/core/formRegistry.d.ts +33 -0
  14. package/dist/core/formRegistry.d.ts.map +1 -0
  15. package/dist/core/inferTypes.d.ts.map +1 -1
  16. package/dist/core/schemaUtils.d.ts +38 -0
  17. package/dist/core/schemaUtils.d.ts.map +1 -1
  18. package/dist/core/serverErrors.d.ts +69 -0
  19. package/dist/core/serverErrors.d.ts.map +1 -0
  20. package/dist/core/types.d.ts +22 -2
  21. package/dist/core/types.d.ts.map +1 -1
  22. package/dist/core/useForm.d.ts +4 -1
  23. package/dist/core/useForm.d.ts.map +1 -1
  24. package/dist/core/useMultiStepForm.d.ts.map +1 -1
  25. package/dist/devtools/index.d.ts +26 -0
  26. package/dist/devtools/index.d.ts.map +1 -0
  27. package/dist/devtools.cjs +1 -0
  28. package/dist/devtools.d.ts +6 -0
  29. package/dist/devtools.js +93 -0
  30. package/dist/formRegistry-Bv1eaWQ-.js +31 -0
  31. package/dist/formRegistry-DaDmXyYY.cjs +1 -0
  32. package/dist/index.cjs +1 -1
  33. package/dist/index.d.ts +5 -3
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +392 -359
  36. package/dist/openapi.cjs +1 -0
  37. package/dist/openapi.d.ts +202 -0
  38. package/dist/openapi.js +118 -0
  39. package/dist/parsers/json.d.ts.map +1 -1
  40. package/dist/parsers/openapi.d.ts +139 -0
  41. package/dist/parsers/openapi.d.ts.map +1 -0
  42. package/dist/parsers/valibot.d.ts +13 -4
  43. package/dist/parsers/valibot.d.ts.map +1 -1
  44. package/dist/parsers/yup.d.ts +10 -4
  45. package/dist/parsers/yup.d.ts.map +1 -1
  46. package/dist/parsers/zod.d.ts +18 -4
  47. package/dist/parsers/zod.d.ts.map +1 -1
  48. package/dist/schemaUtils-Cc7CwGXB.cjs +1 -0
  49. package/dist/schemaUtils-Cvlsk24U.js +337 -0
  50. package/dist/style.css +1 -0
  51. package/dist/ui/index.d.ts +1 -0
  52. package/dist/ui/index.d.ts.map +1 -1
  53. package/dist/ui/naive/index.d.ts +11 -0
  54. package/dist/ui/naive/index.d.ts.map +1 -0
  55. package/dist/ui/primevue/index.d.ts +11 -0
  56. package/dist/ui/primevue/index.d.ts.map +1 -0
  57. package/dist/ui/shadcn/index.d.ts +11 -0
  58. package/dist/ui/shadcn/index.d.ts.map +1 -0
  59. package/dist/ui/tailwind/index.d.ts +11 -0
  60. package/dist/ui/tailwind/index.d.ts.map +1 -0
  61. package/dist/ui-naive.cjs +1 -0
  62. package/dist/ui-naive.d.ts +411 -0
  63. package/dist/ui-naive.js +667 -0
  64. package/dist/ui-primevue.cjs +1 -0
  65. package/dist/ui-primevue.d.ts +411 -0
  66. package/dist/ui-primevue.js +651 -0
  67. package/dist/ui-shadcn.cjs +1 -0
  68. package/dist/ui-shadcn.d.ts +411 -0
  69. package/dist/ui-shadcn.js +650 -0
  70. package/dist/ui-tailwind.cjs +1 -0
  71. package/dist/ui-tailwind.d.ts +411 -0
  72. package/dist/ui-tailwind.js +669 -0
  73. package/dist/ui.cjs +1 -1
  74. package/dist/ui.d.ts +61 -10
  75. package/dist/ui.js +434 -299
  76. package/dist/valibot.cjs +1 -1
  77. package/dist/valibot.d.ts +35 -4
  78. package/dist/valibot.js +47 -20
  79. package/dist/yup.cjs +1 -1
  80. package/dist/yup.d.ts +33 -5
  81. package/dist/yup.js +16 -15
  82. package/dist/zod.cjs +1 -1
  83. package/dist/zod.d.ts +41 -5
  84. package/dist/zod.js +58 -28
  85. package/package.json +99 -25
  86. package/dist/MaskEngine-BqJQYybS.js +0 -233
  87. package/dist/MaskEngine-BwAs2Zb0.cjs +0 -1
  88. package/dist/__tests__/ConditionEvaluator.test.d.ts +0 -2
  89. package/dist/__tests__/ConditionEvaluator.test.d.ts.map +0 -1
  90. package/dist/__tests__/MaskEngine.test.d.ts +0 -2
  91. package/dist/__tests__/MaskEngine.test.d.ts.map +0 -1
  92. package/dist/__tests__/ValidationEngine.test.d.ts +0 -2
  93. package/dist/__tests__/ValidationEngine.test.d.ts.map +0 -1
  94. package/dist/__tests__/parsers.test.d.ts +0 -2
  95. package/dist/__tests__/parsers.test.d.ts.map +0 -1
  96. package/dist/__tests__/phase3.test.d.ts +0 -2
  97. package/dist/__tests__/phase3.test.d.ts.map +0 -1
  98. package/dist/__tests__/phase4.test.d.ts +0 -2
  99. package/dist/__tests__/phase4.test.d.ts.map +0 -1
  100. package/dist/__tests__/useFieldArray.test.d.ts +0 -2
  101. package/dist/__tests__/useFieldArray.test.d.ts.map +0 -1
  102. package/dist/__tests__/useForm.test.d.ts +0 -2
  103. package/dist/__tests__/useForm.test.d.ts.map +0 -1
  104. package/dist/__tests__/useMultiStepForm.test.d.ts +0 -2
  105. package/dist/__tests__/useMultiStepForm.test.d.ts.map +0 -1
@@ -0,0 +1,651 @@
1
+ import { defineComponent as F, computed as k, openBlock as o, createElementBlock as f, createTextVNode as T, toDisplayString as $, createCommentVNode as V, renderSlot as I, normalizeProps as O, guardReactiveProps as Q, Fragment as C, renderList as S, createBlock as x, unref as y, withCtx as P, ref as N, onMounted as W, onUnmounted as X, createVNode as B, mergeProps as q, createElementVNode as g, withModifiers as Z, normalizeClass as _, resolveDynamicComponent as E, resolveComponent as ee } from "vue";
2
+ import w from "primevue/button";
3
+ import { b as le, d as M, u as te } from "./MaskEngine-BEXwX4BK.js";
4
+ import { g as L } from "./ValidationEngine-BC4U1ef1.js";
5
+ import oe from "primevue/inputtext";
6
+ import re from "primevue/message";
7
+ import ae from "primevue/inputnumber";
8
+ import ne from "primevue/textarea";
9
+ import de from "primevue/select";
10
+ import ie from "primevue/checkbox";
11
+ import ue from "primevue/radiobutton";
12
+ import se from "primevue/datepicker";
13
+ import { _ as me } from "./_plugin-vue_export-helper-CHgC5LLL.js";
14
+ const fe = { class: "mb-4 flex flex-col gap-1.5" }, ce = ["for"], ve = {
15
+ key: 0,
16
+ class: "ml-0.5 text-red-500",
17
+ "aria-hidden": "true"
18
+ }, be = ["id"], R = /* @__PURE__ */ F({
19
+ __name: "BaseField",
20
+ props: {
21
+ field: {},
22
+ error: {},
23
+ touched: { type: Boolean }
24
+ },
25
+ setup(e) {
26
+ const i = e, t = k(() => {
27
+ var s;
28
+ return !!(i.touched && ((s = i.error) != null && s.length));
29
+ }), c = k(() => `${i.field.name}-error`), r = k(() => ({
30
+ invalid: t.value,
31
+ "aria-required": i.field.required ? "true" : void 0,
32
+ "aria-invalid": t.value ? "true" : "false",
33
+ "aria-describedby": t.value ? c.value : void 0
34
+ }));
35
+ return (s, u) => (o(), f("div", fe, [
36
+ e.field.label ? (o(), f("label", {
37
+ key: 0,
38
+ for: e.field.name,
39
+ class: "text-sm font-medium"
40
+ }, [
41
+ T($(e.field.label) + " ", 1),
42
+ e.field.required ? (o(), f("span", ve, "*")) : V("", !0)
43
+ ], 8, ce)) : V("", !0),
44
+ I(s.$slots, "default", O(Q(r.value))),
45
+ t.value ? (o(), f("div", {
46
+ key: 1,
47
+ id: c.value,
48
+ role: "alert",
49
+ "aria-live": "polite",
50
+ class: "flex flex-col gap-1"
51
+ }, [
52
+ (o(!0), f(C, null, S(e.error, (d, m) => (o(), x(y(re), {
53
+ key: m,
54
+ severity: "error",
55
+ size: "small",
56
+ variant: "simple"
57
+ }, {
58
+ default: P(() => [
59
+ T($(d), 1)
60
+ ]),
61
+ _: 2
62
+ }, 1024))), 128))
63
+ ], 8, be)) : V("", !0)
64
+ ]));
65
+ }
66
+ }), U = /* @__PURE__ */ F({
67
+ __name: "TextField",
68
+ props: {
69
+ field: {},
70
+ modelValue: {},
71
+ error: {},
72
+ touched: { type: Boolean }
73
+ },
74
+ emits: ["update:modelValue", "blur"],
75
+ setup(e, { emit: i }) {
76
+ const t = e, c = i, r = N(null);
77
+ let s = null;
78
+ return W(() => {
79
+ var d;
80
+ const u = (d = r.value) == null ? void 0 : d.$el;
81
+ u && t.field.mask && (s = le(u, t.field.mask));
82
+ }), X(() => s == null ? void 0 : s()), (u, d) => (o(), x(R, {
83
+ field: e.field,
84
+ error: e.error,
85
+ touched: e.touched
86
+ }, {
87
+ default: P((m) => [
88
+ B(y(oe), q({
89
+ id: e.field.name,
90
+ ref_key: "inputRef",
91
+ ref: r,
92
+ type: e.field.type === "email" ? "email" : "text",
93
+ name: e.field.name,
94
+ "model-value": e.modelValue ?? "",
95
+ placeholder: e.field.placeholder,
96
+ disabled: e.field.disabled === !0,
97
+ required: e.field.required,
98
+ fluid: ""
99
+ }, m, {
100
+ "onUpdate:modelValue": d[0] || (d[0] = (v) => c("update:modelValue", v ?? "")),
101
+ onBlur: d[1] || (d[1] = (v) => c("blur"))
102
+ }), null, 16, ["id", "type", "name", "model-value", "placeholder", "disabled", "required"])
103
+ ]),
104
+ _: 1
105
+ }, 8, ["field", "error", "touched"]));
106
+ }
107
+ }), K = /* @__PURE__ */ F({
108
+ __name: "NumberField",
109
+ props: {
110
+ field: {},
111
+ modelValue: {},
112
+ error: {},
113
+ touched: { type: Boolean }
114
+ },
115
+ emits: ["update:modelValue", "blur"],
116
+ setup(e, { emit: i }) {
117
+ const t = i;
118
+ return (c, r) => (o(), x(R, {
119
+ field: e.field,
120
+ error: e.error,
121
+ touched: e.touched
122
+ }, {
123
+ default: P((s) => [
124
+ B(y(ae), q({
125
+ "input-id": e.field.name,
126
+ name: e.field.name,
127
+ "model-value": e.modelValue,
128
+ placeholder: e.field.placeholder,
129
+ disabled: e.field.disabled === !0,
130
+ fluid: ""
131
+ }, s, {
132
+ "onUpdate:modelValue": r[0] || (r[0] = (u) => t("update:modelValue", u)),
133
+ onBlur: r[1] || (r[1] = (u) => t("blur"))
134
+ }), null, 16, ["input-id", "name", "model-value", "placeholder", "disabled"])
135
+ ]),
136
+ _: 1
137
+ }, 8, ["field", "error", "touched"]));
138
+ }
139
+ }), Y = /* @__PURE__ */ F({
140
+ __name: "TextareaField",
141
+ props: {
142
+ field: {},
143
+ modelValue: {},
144
+ error: {},
145
+ touched: { type: Boolean }
146
+ },
147
+ emits: ["update:modelValue", "blur"],
148
+ setup(e, { emit: i }) {
149
+ const t = i;
150
+ return (c, r) => (o(), x(R, {
151
+ field: e.field,
152
+ error: e.error,
153
+ touched: e.touched
154
+ }, {
155
+ default: P((s) => [
156
+ B(y(ne), q({
157
+ id: e.field.name,
158
+ name: e.field.name,
159
+ "model-value": e.modelValue ?? "",
160
+ placeholder: e.field.placeholder,
161
+ disabled: e.field.disabled === !0,
162
+ required: e.field.required,
163
+ rows: "3",
164
+ fluid: ""
165
+ }, s, {
166
+ "onUpdate:modelValue": r[0] || (r[0] = (u) => t("update:modelValue", u)),
167
+ onBlur: r[1] || (r[1] = (u) => t("blur"))
168
+ }), null, 16, ["id", "name", "model-value", "placeholder", "disabled", "required"])
169
+ ]),
170
+ _: 1
171
+ }, 8, ["field", "error", "touched"]));
172
+ }
173
+ }), j = /* @__PURE__ */ F({
174
+ __name: "SelectField",
175
+ props: {
176
+ field: {},
177
+ modelValue: {},
178
+ error: {},
179
+ touched: { type: Boolean }
180
+ },
181
+ emits: ["update:modelValue", "blur"],
182
+ setup(e, { emit: i }) {
183
+ const t = e, c = i, r = k(() => Array.isArray(t.field.options) ? t.field.options : []);
184
+ return (s, u) => (o(), x(R, {
185
+ field: e.field,
186
+ error: e.error,
187
+ touched: e.touched
188
+ }, {
189
+ default: P((d) => [
190
+ B(y(de), q({
191
+ "input-id": e.field.name,
192
+ name: e.field.name,
193
+ "model-value": e.modelValue,
194
+ options: r.value,
195
+ "option-label": "label",
196
+ "option-value": "value",
197
+ placeholder: e.field.placeholder ?? "Select an option",
198
+ disabled: e.field.disabled === !0 || e.field.optionsLoading,
199
+ loading: e.field.optionsLoading,
200
+ fluid: ""
201
+ }, d, {
202
+ "onUpdate:modelValue": u[0] || (u[0] = (m) => c("update:modelValue", m)),
203
+ onBlur: u[1] || (u[1] = (m) => c("blur"))
204
+ }), null, 16, ["input-id", "name", "model-value", "options", "placeholder", "disabled", "loading"])
205
+ ]),
206
+ _: 1
207
+ }, 8, ["field", "error", "touched"]));
208
+ }
209
+ }), pe = { class: "flex cursor-pointer items-center gap-2.5" }, he = {
210
+ key: 0,
211
+ class: "text-sm"
212
+ }, G = /* @__PURE__ */ F({
213
+ __name: "CheckboxField",
214
+ props: {
215
+ field: {},
216
+ modelValue: { type: [Boolean, null] },
217
+ error: {},
218
+ touched: { type: Boolean }
219
+ },
220
+ emits: ["update:modelValue", "blur"],
221
+ setup(e, { emit: i }) {
222
+ const t = i;
223
+ return (c, r) => (o(), x(R, {
224
+ field: { ...e.field, label: void 0 },
225
+ error: e.error,
226
+ touched: e.touched
227
+ }, {
228
+ default: P((s) => [
229
+ g("label", pe, [
230
+ B(y(ie), q({
231
+ "input-id": e.field.name,
232
+ name: e.field.name,
233
+ "model-value": !!e.modelValue,
234
+ binary: "",
235
+ disabled: e.field.disabled === !0
236
+ }, s, {
237
+ "onUpdate:modelValue": r[0] || (r[0] = (u) => t("update:modelValue", u)),
238
+ onBlur: r[1] || (r[1] = (u) => t("blur"))
239
+ }), null, 16, ["input-id", "name", "model-value", "disabled"]),
240
+ e.field.label ? (o(), f("span", he, $(e.field.label), 1)) : V("", !0)
241
+ ])
242
+ ]),
243
+ _: 1
244
+ }, 8, ["field", "error", "touched"]));
245
+ }
246
+ }), ye = ["aria-required", "aria-invalid", "aria-describedby"], Ve = {
247
+ key: 0,
248
+ class: "text-sm font-medium"
249
+ }, $e = {
250
+ key: 0,
251
+ class: "ml-0.5 text-red-500",
252
+ "aria-hidden": "true"
253
+ }, xe = { class: "flex flex-col gap-2" }, ge = { class: "text-sm" }, ke = ["id"], H = /* @__PURE__ */ F({
254
+ __name: "RadioField",
255
+ props: {
256
+ field: {},
257
+ modelValue: {},
258
+ error: {},
259
+ touched: { type: Boolean }
260
+ },
261
+ emits: ["update:modelValue", "blur"],
262
+ setup(e, { emit: i }) {
263
+ const t = e, c = i, r = k(() => {
264
+ var d;
265
+ return !!(t.touched && ((d = t.error) != null && d.length));
266
+ }), s = k(() => `${t.field.name}-error`), u = k(() => Array.isArray(t.field.options) ? t.field.options : []);
267
+ return (d, m) => (o(), f("fieldset", {
268
+ class: "mb-4 flex flex-col gap-2",
269
+ "aria-required": e.field.required ? "true" : void 0,
270
+ "aria-invalid": r.value ? "true" : "false",
271
+ "aria-describedby": r.value ? s.value : void 0
272
+ }, [
273
+ e.field.label ? (o(), f("legend", Ve, [
274
+ T($(e.field.label) + " ", 1),
275
+ e.field.required ? (o(), f("span", $e, "*")) : V("", !0)
276
+ ])) : V("", !0),
277
+ g("div", xe, [
278
+ (o(!0), f(C, null, S(u.value, (v) => (o(), f("label", {
279
+ key: String(v.value),
280
+ class: "flex cursor-pointer items-center gap-2.5"
281
+ }, [
282
+ B(y(ue), {
283
+ name: e.field.name,
284
+ value: v.value,
285
+ "model-value": e.modelValue,
286
+ disabled: e.field.disabled === !0,
287
+ "onUpdate:modelValue": m[0] || (m[0] = (h) => c("update:modelValue", h)),
288
+ onBlur: m[1] || (m[1] = (h) => c("blur"))
289
+ }, null, 8, ["name", "value", "model-value", "disabled"]),
290
+ g("span", ge, $(v.label), 1)
291
+ ]))), 128))
292
+ ]),
293
+ r.value ? (o(), f("div", {
294
+ key: 1,
295
+ id: s.value,
296
+ role: "alert",
297
+ "aria-live": "polite"
298
+ }, [
299
+ (o(!0), f(C, null, S(e.error, (v, h) => (o(), f("p", {
300
+ key: h,
301
+ class: "text-sm font-medium text-red-500"
302
+ }, $(v), 1))), 128))
303
+ ], 8, ke)) : V("", !0)
304
+ ], 8, ye));
305
+ }
306
+ }), J = /* @__PURE__ */ F({
307
+ __name: "DateField",
308
+ props: {
309
+ field: {},
310
+ modelValue: {},
311
+ error: {},
312
+ touched: { type: Boolean }
313
+ },
314
+ emits: ["update:modelValue", "blur"],
315
+ setup(e, { emit: i }) {
316
+ const t = e, c = i;
317
+ function r(d) {
318
+ if (!d) return null;
319
+ const [m, v, h] = d.split("-").map(Number);
320
+ return !m || !v || !h ? null : new Date(m, v - 1, h);
321
+ }
322
+ function s(d) {
323
+ if (!(d instanceof Date)) return "";
324
+ const m = d.getFullYear(), v = String(d.getMonth() + 1).padStart(2, "0"), h = String(d.getDate()).padStart(2, "0");
325
+ return `${m}-${v}-${h}`;
326
+ }
327
+ const u = k(() => r(t.modelValue));
328
+ return (d, m) => (o(), x(R, {
329
+ field: e.field,
330
+ error: e.error,
331
+ touched: e.touched
332
+ }, {
333
+ default: P((v) => [
334
+ B(y(se), q({
335
+ "input-id": e.field.name,
336
+ name: e.field.name,
337
+ "model-value": u.value,
338
+ "date-format": "yy-mm-dd",
339
+ "show-icon": "",
340
+ "icon-display": "input",
341
+ disabled: e.field.disabled === !0,
342
+ fluid: ""
343
+ }, v, {
344
+ "onUpdate:modelValue": m[0] || (m[0] = (h) => c("update:modelValue", s(h))),
345
+ onBlur: m[1] || (m[1] = (h) => c("blur"))
346
+ }), null, 16, ["input-id", "name", "model-value", "disabled"])
347
+ ]),
348
+ _: 1
349
+ }, 8, ["field", "error", "touched"]));
350
+ }
351
+ }), Fe = ["id", "name", "accept", "multiple", "disabled", "required"], Be = { class: "vfs-pv-dropzone__hint" }, Ce = {
352
+ key: 0,
353
+ class: "vfs-pv-dropzone__accept"
354
+ }, Pe = {
355
+ key: 0,
356
+ class: "vfs-pv-filelist"
357
+ }, De = { class: "vfs-pv-filelist__name" }, Se = { class: "vfs-pv-filelist__size" }, qe = ["aria-label", "onClick"], Re = /* @__PURE__ */ F({
358
+ __name: "FileField",
359
+ props: {
360
+ field: {},
361
+ modelValue: {},
362
+ error: {},
363
+ touched: { type: Boolean }
364
+ },
365
+ emits: ["update:modelValue", "blur"],
366
+ setup(e, { emit: i }) {
367
+ const t = e, c = i, r = N(!1), s = N(null), u = k(() => t.modelValue ? Array.isArray(t.modelValue) ? t.modelValue : [t.modelValue] : []), d = k(() => t.field.multiple ?? !1);
368
+ function m(a) {
369
+ if (!a || a.length === 0) {
370
+ c("update:modelValue", null);
371
+ return;
372
+ }
373
+ c("update:modelValue", d.value ? Array.from(a) : a[0]);
374
+ }
375
+ function v(a) {
376
+ m(a.target.files), c("blur");
377
+ }
378
+ function h(a) {
379
+ var l;
380
+ r.value = !1, a.preventDefault(), m(((l = a.dataTransfer) == null ? void 0 : l.files) ?? null), c("blur");
381
+ }
382
+ function z(a) {
383
+ const l = u.value.filter((b, p) => p !== a);
384
+ l.length === 0 ? (c("update:modelValue", null), s.value && (s.value.value = "")) : c("update:modelValue", d.value ? l : l[0]);
385
+ }
386
+ function A(a) {
387
+ return a < 1024 ? `${a} B` : a < 1024 * 1024 ? `${(a / 1024).toFixed(1)} KB` : `${(a / (1024 * 1024)).toFixed(1)} MB`;
388
+ }
389
+ return (a, l) => (o(), x(R, {
390
+ field: e.field,
391
+ error: e.error,
392
+ touched: e.touched
393
+ }, {
394
+ default: P((b) => {
395
+ var p;
396
+ return [
397
+ g("div", {
398
+ class: _(["vfs-pv-dropzone", {
399
+ "vfs-pv-dropzone--dragging": r.value,
400
+ "vfs-pv-dropzone--error": e.touched && ((p = e.error) == null ? void 0 : p.length)
401
+ }]),
402
+ onDragover: l[0] || (l[0] = Z((n) => r.value = !0, ["prevent"])),
403
+ onDragleave: l[1] || (l[1] = (n) => r.value = !1),
404
+ onDrop: h
405
+ }, [
406
+ g("input", q({
407
+ id: e.field.name,
408
+ ref_key: "inputRef",
409
+ ref: s,
410
+ type: "file",
411
+ name: e.field.name,
412
+ accept: e.field.accept,
413
+ multiple: d.value,
414
+ disabled: e.field.disabled === !0,
415
+ required: e.field.required
416
+ }, b, {
417
+ class: "vfs-pv-dropzone__input",
418
+ onChange: v
419
+ }), null, 16, Fe),
420
+ g("div", Be, [
421
+ g("p", null, $(r.value ? "Drop files here" : "Click to upload or drag & drop"), 1),
422
+ e.field.accept ? (o(), f("p", Ce, $(e.field.accept), 1)) : V("", !0)
423
+ ])
424
+ ], 34),
425
+ u.value.length ? (o(), f("ul", Pe, [
426
+ (o(!0), f(C, null, S(u.value, (n, D) => (o(), f("li", {
427
+ key: `${n.name}-${D}`,
428
+ class: "vfs-pv-filelist__item"
429
+ }, [
430
+ g("span", De, $(n.name), 1),
431
+ g("span", Se, $(A(n.size)), 1),
432
+ g("button", {
433
+ type: "button",
434
+ "aria-label": `Remove ${n.name}`,
435
+ class: "vfs-pv-filelist__remove",
436
+ onClick: (Ee) => z(D)
437
+ }, " × ", 8, qe)
438
+ ]))), 128))
439
+ ])) : V("", !0)
440
+ ];
441
+ }),
442
+ _: 1
443
+ }, 8, ["field", "error", "touched"]));
444
+ }
445
+ }), ze = /* @__PURE__ */ me(Re, [["__scopeId", "data-v-1fed53d8"]]), Ae = { class: "mb-4" }, Ue = {
446
+ key: 0,
447
+ class: "mb-2 text-sm font-medium"
448
+ }, Te = { class: "flex-1" }, Ie = /* @__PURE__ */ F({
449
+ __name: "ArrayField",
450
+ props: {
451
+ field: {},
452
+ form: {},
453
+ components: {}
454
+ },
455
+ setup(e) {
456
+ const i = e, t = M(), c = {
457
+ text: U,
458
+ email: U,
459
+ number: K,
460
+ textarea: Y,
461
+ select: j,
462
+ checkbox: G,
463
+ radio: H,
464
+ date: J
465
+ };
466
+ function r(a) {
467
+ var l;
468
+ return a.component ? a.component : ((l = i.components) == null ? void 0 : l[a.type]) ?? t[a.type] ?? c[a.type] ?? null;
469
+ }
470
+ const { rows: s, append: u, remove: d } = te(i.form, i.field.name);
471
+ function m(a) {
472
+ return L(i.form.values.value, a.name);
473
+ }
474
+ function v(a, l) {
475
+ i.form.setField(a.name, l);
476
+ }
477
+ function h(a) {
478
+ var b;
479
+ const l = i.form;
480
+ (b = l.touchField) == null || b.call(l, a.name);
481
+ }
482
+ function z(a) {
483
+ return i.form.errors.value[a.name] ?? [];
484
+ }
485
+ function A(a) {
486
+ return i.form.touched.value[a.name] ?? !1;
487
+ }
488
+ return (a, l) => (o(), f("div", Ae, [
489
+ e.field.label ? (o(), f("div", Ue, $(e.field.label), 1)) : V("", !0),
490
+ (o(!0), f(C, null, S(y(s), (b) => (o(), f("div", {
491
+ key: b.key,
492
+ style: { border: "1px solid var(--p-surface-200, #e2e8f0)" },
493
+ class: "mb-2 flex items-start gap-2 rounded-md p-3"
494
+ }, [
495
+ g("div", Te, [
496
+ (o(!0), f(C, null, S(b.fields, (p) => (o(), f(C, {
497
+ key: p.name
498
+ }, [
499
+ r(p) ? (o(), x(E(r(p)), {
500
+ key: 0,
501
+ field: p,
502
+ "model-value": m(p),
503
+ error: z(p),
504
+ touched: A(p),
505
+ "onUpdate:modelValue": (n) => v(p, n),
506
+ onBlur: (n) => h(p)
507
+ }, null, 40, ["field", "model-value", "error", "touched", "onUpdate:modelValue", "onBlur"])) : V("", !0)
508
+ ], 64))), 128))
509
+ ]),
510
+ B(y(w), {
511
+ type: "button",
512
+ label: "Remove",
513
+ severity: "danger",
514
+ text: "",
515
+ size: "small",
516
+ class: "mt-6",
517
+ onClick: (p) => y(d)(b.index)
518
+ }, null, 8, ["onClick"])
519
+ ]))), 128)),
520
+ B(y(w), {
521
+ type: "button",
522
+ label: "+ Add row",
523
+ severity: "secondary",
524
+ text: "",
525
+ size: "small",
526
+ onClick: l[0] || (l[0] = (b) => y(u)())
527
+ })
528
+ ]));
529
+ }
530
+ }), Ne = {
531
+ key: 1,
532
+ style: { border: "1px solid var(--p-surface-200, #e2e8f0)" },
533
+ class: "mb-4 rounded-md p-4"
534
+ }, we = {
535
+ key: 0,
536
+ class: "px-1 text-sm font-medium"
537
+ }, _e = /* @__PURE__ */ F({
538
+ __name: "PrimeVueFormRenderer",
539
+ props: {
540
+ form: {},
541
+ components: {},
542
+ submitLabel: {},
543
+ fields: {}
544
+ },
545
+ emits: ["submit"],
546
+ setup(e, { emit: i }) {
547
+ const t = e, c = M(), r = i, s = {
548
+ text: U,
549
+ email: U,
550
+ number: K,
551
+ textarea: Y,
552
+ select: j,
553
+ checkbox: G,
554
+ radio: H,
555
+ date: J,
556
+ file: ze
557
+ };
558
+ function u(l) {
559
+ var b;
560
+ return l.component ? l.component : ((b = t.components) == null ? void 0 : b[l.type]) ?? c[l.type] ?? s[l.type] ?? null;
561
+ }
562
+ function d(l) {
563
+ return L(t.form.values.value, l.name);
564
+ }
565
+ function m(l, b) {
566
+ t.form.setField(l.name, b);
567
+ }
568
+ function v(l) {
569
+ var p;
570
+ const b = t.form;
571
+ (p = b.touchField) == null || p.call(b, l.name);
572
+ }
573
+ function h(l) {
574
+ return t.form.errors.value[l.name] ?? [];
575
+ }
576
+ function z(l) {
577
+ return t.form.touched.value[l.name] ?? !1;
578
+ }
579
+ const A = k(
580
+ () => (t.fields ?? t.form.fields.value).filter((l) => l.visible !== !1)
581
+ );
582
+ async function a(l) {
583
+ l.preventDefault(), await t.form.submit(), r("submit");
584
+ }
585
+ return (l, b) => {
586
+ const p = ee("PrimeVueFormRenderer", !0);
587
+ return o(), f("form", {
588
+ novalidate: "",
589
+ onSubmit: a
590
+ }, [
591
+ (o(!0), f(C, null, S(A.value, (n) => (o(), f(C, {
592
+ key: n.name
593
+ }, [
594
+ l.$slots[`field-${n.name}`] ? I(l.$slots, `field-${n.name}`, {
595
+ key: 0,
596
+ field: n,
597
+ value: d(n),
598
+ error: h(n),
599
+ touched: z(n),
600
+ setValue: (D) => m(n, D),
601
+ touch: () => v(n)
602
+ }) : n.type === "group" ? (o(), f("fieldset", Ne, [
603
+ n.label ? (o(), f("legend", we, $(n.label), 1)) : V("", !0),
604
+ n.fields ? (o(), x(p, {
605
+ key: 1,
606
+ form: e.form,
607
+ fields: n.fields,
608
+ components: e.components
609
+ }, null, 8, ["form", "fields", "components"])) : V("", !0)
610
+ ])) : n.type === "array" ? (o(), x(Ie, {
611
+ key: 2,
612
+ field: n,
613
+ form: e.form,
614
+ components: e.components
615
+ }, null, 8, ["field", "form", "components"])) : u(n) ? (o(), x(E(u(n)), {
616
+ key: 3,
617
+ field: n,
618
+ "model-value": d(n),
619
+ error: h(n),
620
+ touched: z(n),
621
+ "onUpdate:modelValue": (D) => m(n, D),
622
+ onBlur: (D) => v(n)
623
+ }, null, 40, ["field", "model-value", "error", "touched", "onUpdate:modelValue", "onBlur"])) : V("", !0)
624
+ ], 64))), 128)),
625
+ I(l.$slots, "submit", {
626
+ isSubmitting: e.form.isSubmitting.value,
627
+ isValid: e.form.isValid.value
628
+ }, () => [
629
+ B(y(w), {
630
+ type: "submit",
631
+ label: e.submitLabel ?? "Submit",
632
+ disabled: e.form.isSubmitting.value,
633
+ class: "mt-2"
634
+ }, null, 8, ["label", "disabled"])
635
+ ])
636
+ ], 32);
637
+ };
638
+ }
639
+ });
640
+ export {
641
+ _e as PrimeVueFormRenderer,
642
+ Ie as PvArrayField,
643
+ G as PvCheckboxField,
644
+ J as PvDateField,
645
+ ze as PvFileField,
646
+ K as PvNumberField,
647
+ H as PvRadioField,
648
+ j as PvSelectField,
649
+ U as PvTextField,
650
+ Y as PvTextareaField
651
+ };