@volverjs/form-vue 1.1.2 → 1.1.3

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.
package/dist/index.es.js CHANGED
@@ -8,76 +8,155 @@ var O = /* @__PURE__ */ function(e) {
8
8
  return e.text = "text", e.number = "number", e.email = "email", e.password = "password", e.tel = "tel", e.url = "url", e.search = "search", e.date = "date", e.time = "time", e.datetimeLocal = "datetime-local", e.month = "month", e.week = "week", e.color = "color", e.select = "select", e.checkbox = "checkbox", e.radio = "radio", e.textarea = "textarea", e.radioGroup = "radioGroup", e.checkboxGroup = "checkboxGroup", e.combobox = "combobox", e.custom = "custom", e;
9
9
  }({}), k = /* @__PURE__ */ function(e) {
10
10
  return e.invalid = "invalid", e.valid = "valid", e.submitting = "submitting", e.reset = "reset", e.updated = "updated", e.unknown = "unknown", e;
11
- }({}), A = (e) => e._def.typeName === "ZodObject", j = (e) => e._zod.def.type === "object", M = (e) => e._def.typeName === "ZodDefault", N = (e) => e._zod.def.type === "default", P = (e) => e._def.typeName === "ZodNullable", F = (e) => e._zod.def.type === "nullable", I = (e) => e._def.typeName === "ZodRecord", L = (e) => e._zod.def.type === "record", R = (e) => e._def.typeName === "ZodArray", z = (e) => e._zod.def.type === "array", B = (e) => e._def.typeName === "ZodEffects", V = (e) => e._def.typeName === "ZodOptional", H = (e) => e._zod.def.type === "optional", U = (e) => e._zod.def.type === "pipe", W = (e) => e._zod.def.type === "transform";
12
- function G(e) {
11
+ }({});
12
+ //#endregion
13
+ //#region src/utils.ts
14
+ function A(e) {
15
+ return Array.isArray(e) ? "array" : e === null ? "null" : typeof e;
16
+ }
17
+ function j(e, t) {
18
+ let n = A(e);
19
+ return t.type ? Array.isArray(t.type) ? t.type.some((t) => t === n || t === "integer" && n === "number" && Number.isInteger(e)) : t.type === n || t.type === "integer" && n === "number" && Number.isInteger(e) : !0;
20
+ }
21
+ var M = (e) => e._def.typeName === "ZodObject", N = (e) => e._zod.def.type === "object", P = (e) => e._def.typeName === "ZodDefault", F = (e) => e._zod.def.type === "default", I = (e) => e._def.typeName === "ZodNullable", L = (e) => e._zod.def.type === "nullable", R = (e) => e._def.typeName === "ZodRecord", z = (e) => e._zod.def.type === "record", B = (e) => e._def.typeName === "ZodArray", ee = (e) => e._zod.def.type === "array", te = (e) => e._def.typeName === "ZodEffects", V = (e) => e._def.typeName === "ZodOptional", H = (e) => e._zod.def.type === "optional", ne = (e) => e._zod.def.type === "pipe", U = (e) => e._zod.def.type === "transform";
22
+ function W(e) {
13
23
  let t = e;
14
- for (; B(t);) t = t.innerType();
24
+ for (; te(t);) t = t.innerType();
15
25
  return t;
16
26
  }
17
- function K(e) {
27
+ function G(e) {
18
28
  let t = e;
19
- for (; U(t);) t = W(t._zod.def.out) ? t._zod.def.in : t._zod.def.out;
29
+ for (; ne(t);) t = U(t._zod.def.out) ? t._zod.def.in : t._zod.def.out;
20
30
  return t;
21
31
  }
22
- var q = (e) => {
23
- let t = G(e);
32
+ var re = (e) => {
33
+ let t = W(e);
24
34
  return V(t) && (t = t._def.innerType), t;
25
- }, J = (e) => {
26
- let t = K(e);
35
+ }, ie = (e) => {
36
+ let t = G(e);
27
37
  return H(t) && (t = t._zod.def.innerType), t;
28
- }, ee = (e) => !!V(G(e)), te = (e) => !!H(K(e)), Y = (e) => "_zod" in e;
29
- function X(e, t = {}) {
30
- if (Y(e)) {
31
- let n = J(e);
32
- return j(n) ? {
33
- ...n._zod.def.catchall && n._zod.def.catchall._zod.def.type !== "never" ? t : {},
34
- ...Object.fromEntries(("shape" in n._zod.def ? Object.entries(n._zod.def.shape) : []).map(([e, n]) => {
35
- let r = t[e], i = te(n), a = J(n), o;
36
- if (N(a) && (o = a._zod.def.defaultValue, a = a._zod.def.innerType), r === null && F(a)) return [e, r];
37
- if (r == null && i) return [e, o];
38
- if (a && r !== void 0) {
39
- let t = w(n, r);
40
- if (t.success) return [e, t.data ?? o];
41
- }
42
- if (z(a) && Array.isArray(r)) {
43
- let t = J(a._zod.def.element);
44
- return j(t) ? [e, r.map((e) => X(t, e && typeof e == "object" ? e : void 0))] : [e, r];
45
- }
46
- if (L(a) && r) {
47
- let t = J(a._zod.def.valueType);
48
- return j(t) ? [e, Object.keys(r).reduce((e, n) => (e[n] = X(t, r[n]), e), {})] : [e, r];
49
- }
50
- return j(a) ? [e, X(a, r && typeof r == "object" ? r : o)] : [e, o];
51
- }))
52
- } : t;
38
+ }, ae = (e) => !!V(W(e)), oe = (e) => !!H(G(e));
39
+ function K(e, t) {
40
+ if (e.length === 0) return t ?? void 0;
41
+ if (t !== void 0) {
42
+ for (let n of e) if (j(t, n)) return q(n, t);
43
+ for (let n of e) {
44
+ let e = n;
45
+ if (!e.type || e.type === "object") return q(e, t);
46
+ }
53
47
  }
54
- let n = q(e);
55
- return A(n) ? {
56
- ...n._def.unknownKeys === "passthrough" ? t : {},
57
- ...Object.fromEntries(("shape" in n ? Object.entries(n.shape) : []).map(([e, n]) => {
58
- let r = t[e], i = ee(n), a = q(n), o;
59
- if (M(a) && (o = a._def.defaultValue(), a = a._def.innerType), r === null && P(a)) return [e, r];
60
- if (r == null && i) return [e, o];
61
- if (a && r !== void 0) {
62
- let t = n.safeParse(r);
63
- if (t.success) return [e, t.data ?? o];
64
- }
65
- if (R(a) && Array.isArray(r)) {
66
- let t = q(a._def.type);
67
- return A(t) ? [e, r.map((e) => X(t, e && typeof e == "object" ? e : void 0))] : [e, r];
68
- }
69
- if (I(a) && r) {
70
- let t = q(a._def.valueType);
71
- return A(t) ? [e, Object.keys(r).reduce((e, n) => (e[n] = X(t, r[n]), e), {})] : [e, r];
72
- }
73
- return A(a) ? [e, X(a, r && typeof r == "object" ? r : o)] : [e, o];
74
- }))
75
- } : t;
48
+ return q(e[0], t);
49
+ }
50
+ function q(e, t) {
51
+ if ("const" in e) return e.const;
52
+ if (e.anyOf && Array.isArray(e.anyOf)) return K(e.anyOf, t);
53
+ if (e.oneOf && Array.isArray(e.oneOf)) return K(e.oneOf, t);
54
+ if (e.allOf && Array.isArray(e.allOf)) {
55
+ let n = {
56
+ ...e,
57
+ allOf: void 0
58
+ };
59
+ for (let t of e.allOf) {
60
+ let e = t;
61
+ e.properties && (n.properties = {
62
+ ...n.properties,
63
+ ...e.properties
64
+ }), e.type && !n.type && (n.type = e.type);
65
+ }
66
+ return q(n, t);
67
+ }
68
+ if (Array.isArray(e.type)) {
69
+ if (t === null && e.type.includes("null")) return null;
70
+ let n = e.type.find((e) => e !== "null");
71
+ return n ? q({
72
+ ...e,
73
+ type: n
74
+ }, t) : e.default ?? null;
75
+ }
76
+ if (e.type !== "object" || !e.properties) switch (e.type) {
77
+ case "string": return typeof t == "string" ? t : e.default;
78
+ case "number":
79
+ case "integer": return typeof t == "number" ? t : e.default;
80
+ case "boolean": return typeof t == "boolean" ? t : e.default;
81
+ case "null": return t === null ? t : e.default;
82
+ case "array": return Array.isArray(t) ? e.items ? t.map((t) => q(e.items, t)) : t : e.default;
83
+ default: return e.default;
84
+ }
85
+ let n = e.properties, r = t && typeof t == "object" && !Array.isArray(t) ? t : void 0, i = {};
86
+ for (let e in n) {
87
+ let t = r?.[e];
88
+ i[e] = q(n[e], t);
89
+ }
90
+ if (r && e.additionalProperties !== !1) {
91
+ let e = new Set(Object.keys(n));
92
+ for (let [t, n] of Object.entries(r)) e.has(t) || (i[t] = n);
93
+ }
94
+ return i;
95
+ }
96
+ var J = (e) => "_zod" in e, se = {
97
+ getInnerType: re,
98
+ isObject: M,
99
+ hasUnknownKeys: (e) => e._def.unknownKeys === "passthrough",
100
+ getShapeEntries: (e) => "shape" in e ? Object.entries(e.shape) : [],
101
+ isOptional: ae,
102
+ isDefault: P,
103
+ getDefaultValue: (e) => e._def.defaultValue(),
104
+ getDefaultInnerType: (e) => e._def.innerType,
105
+ isNullable: I,
106
+ safeParse: (e, t) => e.safeParse(t),
107
+ isArray: B,
108
+ getArrayElement: (e) => e._def.type,
109
+ isRecord: R,
110
+ getRecordValue: (e) => e._def.valueType
111
+ }, ce = {
112
+ getInnerType: ie,
113
+ isObject: N,
114
+ hasUnknownKeys: (e) => !!(e._zod.def.catchall && e._zod.def.catchall._zod.def.type !== "never"),
115
+ getShapeEntries: (e) => "shape" in e._zod.def ? Object.entries(e._zod.def.shape) : [],
116
+ isOptional: oe,
117
+ isDefault: F,
118
+ getDefaultValue: (e) => e._zod.def.defaultValue,
119
+ getDefaultInnerType: (e) => e._zod.def.innerType,
120
+ isNullable: L,
121
+ safeParse: (e, t) => w(e, t),
122
+ isArray: ee,
123
+ getArrayElement: (e) => e._zod.def.element,
124
+ isRecord: z,
125
+ getRecordValue: (e) => e._zod.def.valueType
126
+ };
127
+ function le(e, t, n) {
128
+ let r = e.getInnerType(e.getArrayElement(t));
129
+ return e.isObject(r) ? n.map((t) => Y(e, r, t)) : n;
130
+ }
131
+ function ue(e, t, n) {
132
+ let r = e.getInnerType(e.getRecordValue(t));
133
+ return e.isObject(r) ? Object.keys(n).reduce((t, i) => (t[i] = Y(e, r, n[i]), t), {}) : n;
134
+ }
135
+ function de(e, t, n, r) {
136
+ let i = e.isOptional(n), a = e.getInnerType(n), o;
137
+ if (e.isDefault(a) && (o = e.getDefaultValue(a), a = e.getDefaultInnerType(a)), r === null && e.isNullable(a)) return [t, r];
138
+ if (r == null && i) return [t, o];
139
+ if (a && r !== void 0) {
140
+ let i = e.safeParse(n, r);
141
+ if (i.success) return [t, i.data ?? o];
142
+ }
143
+ return e.isArray(a) && Array.isArray(r) ? [t, le(e, a, r)] : e.isRecord(a) && r ? [t, ue(e, a, r)] : e.isObject(a) ? [t, Y(e, a, r && typeof r == "object" ? r : o)] : [t, o];
144
+ }
145
+ function Y(e, t, n) {
146
+ let r = n && typeof n == "object" && !Array.isArray(n) ? n : {};
147
+ return {
148
+ ...e.hasUnknownKeys(t) ? r : {},
149
+ ...Object.fromEntries(e.getShapeEntries(t).map(([t, n]) => de(e, t, n, r[t])))
150
+ };
151
+ }
152
+ function X(e, t = {}) {
153
+ let n = J(e) ? ce : se, r = n.getInnerType(e);
154
+ return n.isObject(r) ? Y(n, r, t) : t;
76
155
  }
77
- var ne = (e, t) => Y(e) ? T(e, t) : e.safeParseAsync(t), re = (e, t) => Y(e) ? C(t) : t.format(), ie = (e, t) => Y(e) ? C(new S(t)) : new x(t).format();
156
+ var fe = (e, t) => J(e) ? T(e, t) : e.safeParseAsync(t), pe = (e, t) => J(e) ? C(t) : t.format(), me = (e, t) => J(e) ? C(new S(t)) : new x(t).format();
78
157
  //#endregion
79
158
  //#region src/VvForm.ts
80
- function ae(t, r, a, s, f) {
159
+ function he(t, r, a, s, f) {
81
160
  let m = d(), h = d(), g = e(() => h.value === k.invalid), x = d(), S = d(!1), C, w = (e) => {
82
161
  let n = X(t, e);
83
162
  if (a?.class) {
@@ -87,11 +166,11 @@ function ae(t, r, a, s, f) {
87
166
  return n;
88
167
  }, T = async (e = x.value, n) => {
89
168
  if (C = n?.fields, S.value) return !0;
90
- let r = await ne(t, e);
169
+ let r = await fe(t, e);
91
170
  if (!r.success) {
92
- if (h.value = k.invalid, !C?.size) return m.value = re(t, r.error), !1;
171
+ if (h.value = k.invalid, !C?.size) return m.value = pe(t, r.error), !1;
93
172
  let e = r.error.issues.filter((e) => C?.has(e.path.join(".")));
94
- return e.length ? (m.value = ie(t, e), !1) : (m.value = void 0, !0);
173
+ return e.length ? (m.value = me(t, e), !1) : (m.value = void 0, !0);
95
174
  }
96
175
  return m.value = void 0, h.value = k.valid, x.value = w(r.data), !0;
97
176
  }, E = () => {
@@ -176,7 +255,7 @@ function ae(t, r, a, s, f) {
176
255
  if (e) {
177
256
  let t = o(e) ? p(e) : e;
178
257
  if (JSON.stringify(t) === JSON.stringify(p(x.value))) return;
179
- x.value = typeof t?.clone == "function" ? t.clone() : JSON.parse(JSON.stringify(t));
258
+ x.value = w(t);
180
259
  }
181
260
  }, { deep: !0 }), _(h, async (n) => {
182
261
  if (n === k.invalid) {
@@ -271,7 +350,7 @@ function ae(t, r, a, s, f) {
271
350
  }
272
351
  //#endregion
273
352
  //#region src/VvFormField.ts
274
- function oe(r, o, d, p) {
353
+ function ge(r, o, d, p) {
275
354
  return n({
276
355
  name: "VvFormField",
277
356
  props: {
@@ -473,7 +552,7 @@ function oe(r, o, d, p) {
473
552
  }
474
553
  //#endregion
475
554
  //#region src/VvFormFieldsGroup.ts
476
- function se(t, r, o) {
555
+ function _e(t, r, o) {
477
556
  return n({
478
557
  name: "VvFormFieldsGroup",
479
558
  props: {
@@ -634,7 +713,7 @@ function se(t, r, o) {
634
713
  }
635
714
  //#endregion
636
715
  //#region src/VvFormWrapper.ts
637
- function ce(t, r) {
716
+ function ve(t, r) {
638
717
  return n({
639
718
  name: "VvFormWrapper",
640
719
  props: {
@@ -741,7 +820,7 @@ function ce(t, r) {
741
820
  }
742
821
  //#endregion
743
822
  //#region src/VvFormTemplate.ts
744
- function le(e, t) {
823
+ function ye(e, t) {
745
824
  let r = n({
746
825
  name: "VvFormTemplate",
747
826
  props: {
@@ -796,7 +875,7 @@ function le(e, t) {
796
875
  //#endregion
797
876
  //#region src/index.ts
798
877
  function Z(e, t = {}) {
799
- let n = Symbol("formInjectionKey"), r = Symbol("formWrapperInjectionKey"), i = Symbol("formFieldInjectionKey"), a = Symbol("formFieldsGroupInjectionKey"), o = ce(n, r), s = oe(n, r, i, t), c = se(n, r, a), l = le(n, s), u = /* @__PURE__ */ new Map(), { clear: d, errors: f, formData: p, ignoreUpdates: m, invalid: h, readonly: g, reset: _, status: v, stopUpdatesWatch: y, submit: b, validate: x, VvForm: S } = ae(e, n, t, l, u);
878
+ let n = Symbol("formInjectionKey"), r = Symbol("formWrapperInjectionKey"), i = Symbol("formFieldInjectionKey"), a = Symbol("formFieldsGroupInjectionKey"), o = ve(n, r), s = ge(n, r, i, t), c = _e(n, r, a), l = ye(n, s), u = /* @__PURE__ */ new Map(), { clear: d, errors: f, formData: p, ignoreUpdates: m, invalid: h, readonly: g, reset: _, status: v, stopUpdatesWatch: y, submit: b, validate: x, VvForm: S } = he(e, n, t, l, u);
800
879
  return {
801
880
  clear: d,
802
881
  errors: f,
@@ -821,7 +900,7 @@ function Z(e, t = {}) {
821
900
  };
822
901
  }
823
902
  var Q = Symbol("pluginInjectionKey");
824
- function ue(e) {
903
+ function be(e) {
825
904
  let t = {};
826
905
  return e.schema && (t = Z(e.schema, e)), {
827
906
  ...t,
@@ -831,7 +910,7 @@ function ue(e) {
831
910
  };
832
911
  }
833
912
  var $ = /* @__PURE__ */ new Map();
834
- function de(e, t = {}) {
913
+ function xe(e, t = {}) {
835
914
  if (t.scope && $.has(t.scope)) return $.get(t.scope);
836
915
  if (!r()) {
837
916
  let n = Z(e, t);
@@ -843,8 +922,8 @@ function de(e, t = {}) {
843
922
  });
844
923
  return t.scope && $.set(t.scope, n), n;
845
924
  }
846
- function fe(e, t = {}) {
925
+ function Se(e, t = {}) {
847
926
  return Z(e, t);
848
927
  }
849
928
  //#endregion
850
- export { O as FormFieldType, ue as createForm, X as defaultObjectBySchema, fe as formType, Q as pluginInjectionKey, de as useForm };
929
+ export { O as FormFieldType, be as createForm, q as defaultObjectByJSONSchema, X as defaultObjectBySchema, Se as formType, Q as pluginInjectionKey, xe as useForm };
package/dist/index.umd.js CHANGED
@@ -1 +1 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`vue`),require(`@vueuse/core`),require(`zod/v3`),require(`zod/v4/core`),require(`dot-prop`)):typeof define==`function`&&define.amd?define([`exports`,`vue`,`@vueuse/core`,`zod/v3`,`zod/v4/core`,`dot-prop`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e[`@volverjs/form-vue`]={},e.Vue,e.VueUseCore,e.zodV3,e.zodV4Core,e.dotProp))})(this,function(e,t,n,r,i,a){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var o=function(e){return e.text=`text`,e.number=`number`,e.email=`email`,e.password=`password`,e.tel=`tel`,e.url=`url`,e.search=`search`,e.date=`date`,e.time=`time`,e.datetimeLocal=`datetime-local`,e.month=`month`,e.week=`week`,e.color=`color`,e.select=`select`,e.checkbox=`checkbox`,e.radio=`radio`,e.textarea=`textarea`,e.radioGroup=`radioGroup`,e.checkboxGroup=`checkboxGroup`,e.combobox=`combobox`,e.custom=`custom`,e}({}),s=function(e){return e.invalid=`invalid`,e.valid=`valid`,e.submitting=`submitting`,e.reset=`reset`,e.updated=`updated`,e.unknown=`unknown`,e}({}),c=e=>e._def.typeName===`ZodObject`,l=e=>e._zod.def.type===`object`,u=e=>e._def.typeName===`ZodDefault`,d=e=>e._zod.def.type===`default`,f=e=>e._def.typeName===`ZodNullable`,p=e=>e._zod.def.type===`nullable`,m=e=>e._def.typeName===`ZodRecord`,h=e=>e._zod.def.type===`record`,g=e=>e._def.typeName===`ZodArray`,_=e=>e._zod.def.type===`array`,v=e=>e._def.typeName===`ZodEffects`,y=e=>e._def.typeName===`ZodOptional`,b=e=>e._zod.def.type===`optional`,x=e=>e._zod.def.type===`pipe`,S=e=>e._zod.def.type===`transform`;function C(e){let t=e;for(;v(t);)t=t.innerType();return t}function w(e){let t=e;for(;x(t);)t=S(t._zod.def.out)?t._zod.def.in:t._zod.def.out;return t}var T=e=>{let t=C(e);return y(t)&&(t=t._def.innerType),t},E=e=>{let t=w(e);return b(t)&&(t=t._zod.def.innerType),t},D=e=>!!y(C(e)),O=e=>!!b(w(e)),k=e=>`_zod`in e;function A(e,t={}){if(k(e)){let n=E(e);return l(n)?{...n._zod.def.catchall&&n._zod.def.catchall._zod.def.type!==`never`?t:{},...Object.fromEntries((`shape`in n._zod.def?Object.entries(n._zod.def.shape):[]).map(([e,n])=>{let r=t[e],a=O(n),o=E(n),s;if(d(o)&&(s=o._zod.def.defaultValue,o=o._zod.def.innerType),r===null&&p(o))return[e,r];if(r==null&&a)return[e,s];if(o&&r!==void 0){let t=(0,i.safeParse)(n,r);if(t.success)return[e,t.data??s]}if(_(o)&&Array.isArray(r)){let t=E(o._zod.def.element);return l(t)?[e,r.map(e=>A(t,e&&typeof e==`object`?e:void 0))]:[e,r]}if(h(o)&&r){let t=E(o._zod.def.valueType);return l(t)?[e,Object.keys(r).reduce((e,n)=>(e[n]=A(t,r[n]),e),{})]:[e,r]}return l(o)?[e,A(o,r&&typeof r==`object`?r:s)]:[e,s]}))}:t}let n=T(e);return c(n)?{...n._def.unknownKeys===`passthrough`?t:{},...Object.fromEntries((`shape`in n?Object.entries(n.shape):[]).map(([e,n])=>{let r=t[e],i=D(n),a=T(n),o;if(u(a)&&(o=a._def.defaultValue(),a=a._def.innerType),r===null&&f(a))return[e,r];if(r==null&&i)return[e,o];if(a&&r!==void 0){let t=n.safeParse(r);if(t.success)return[e,t.data??o]}if(g(a)&&Array.isArray(r)){let t=T(a._def.type);return c(t)?[e,r.map(e=>A(t,e&&typeof e==`object`?e:void 0))]:[e,r]}if(m(a)&&r){let t=T(a._def.valueType);return c(t)?[e,Object.keys(r).reduce((e,n)=>(e[n]=A(t,r[n]),e),{})]:[e,r]}return c(a)?[e,A(a,r&&typeof r==`object`?r:o)]:[e,o]}))}:t}var j=(e,t)=>k(e)?(0,i.safeParseAsync)(e,t):e.safeParseAsync(t),M=(e,t)=>k(e)?(0,i.formatError)(t):t.format(),N=(e,t)=>k(e)?(0,i.formatError)(new i.$ZodError(t)):new r.ZodError(t).format();function P(e,r,i,a,o){let c=(0,t.ref)(),l=(0,t.ref)(),u=(0,t.computed)(()=>l.value===s.invalid),d=(0,t.ref)(),f=(0,t.ref)(!1),p,m=t=>{let n=A(e,t);if(i?.class){let e=i.class;return new e(n)}return n},h=async(t=d.value,n)=>{if(p=n?.fields,f.value)return!0;let r=await j(e,t);if(!r.success){if(l.value=s.invalid,!p?.size)return c.value=M(e,r.error),!1;let t=r.error.issues.filter(e=>p?.has(e.path.join(`.`)));return t.length?(c.value=N(e,t),!1):(c.value=void 0,!0)}return c.value=void 0,l.value=s.valid,d.value=m(r.data),!0},g=()=>{c.value=void 0,l.value=void 0,p=void 0},_=()=>{d.value=m(),g(),l.value=s.reset},v=async e=>f.value||!await h(void 0,e)?!1:(l.value=s.submitting,!0),{ignoreUpdates:y,stop:b}=(0,n.watchIgnorable)(d,()=>{l.value=s.updated},{deep:!0,eventFilter:(0,n.throttleFilter)(i?.updateThrottle??500)}),x=(0,t.readonly)(c),S=(0,t.readonly)(l);return{clear:g,errors:c,formData:d,ignoreUpdates:y,invalid:u,readonly:f,reset:_,status:l,wrappers:o,stopUpdatesWatch:b,submit:v,validate:h,VvForm:(0,t.defineComponent)({name:`VvForm`,props:{continuousValidation:{type:Boolean,default:!1},modelValue:{type:Object,default:()=>({})},readonly:{type:Boolean,default:i?.readonly},tag:{type:String,default:`form`},template:{type:[Array,Function],default:void 0},superRefine:{type:Function,default:void 0},validateFields:{type:Array,default:void 0}},emits:[`invalid`,`submit`,`update:modelValue`,`update:readonly`,`valid`,`reset`],expose:[`errors`,`invalid`,`readonly`,`status`,`submit`,`tag`,`template`,`valid`,`validate`,`clear`,`reset`],slots:Object,setup(e,{emit:n}){return d.value=m((0,t.toRaw)(e.modelValue)),(0,t.watch)(()=>e.modelValue,e=>{if(e){let n=(0,t.isProxy)(e)?(0,t.toRaw)(e):e;if(JSON.stringify(n)===JSON.stringify((0,t.toRaw)(d.value)))return;d.value=typeof n?.clone==`function`?n.clone():JSON.parse(JSON.stringify(n))}},{deep:!0}),(0,t.watch)(l,async r=>{if(r===s.invalid){let e=(0,t.toRaw)(c.value);n(`invalid`,e),i?.onInvalid?.(e);return}if(r===s.valid){let e=(0,t.toRaw)(d.value);n(`valid`,e),i?.onValid?.(e),n(`update:modelValue`,e),i?.onUpdate?.(e);return}if(r===s.submitting){let e=(0,t.toRaw)(d.value);n(`submit`,e),i?.onSubmit?.(e);return}if(r===s.reset){let e=(0,t.toRaw)(d.value);n(`reset`,e),i?.onReset?.(e);return}if(r===s.updated){if((c.value||i?.continuousValidation||e.continuousValidation)&&await h(void 0,{superRefine:e.superRefine,fields:p??new Set(e.validateFields)}),!d.value||!e.modelValue||JSON.stringify(d.value)!==JSON.stringify(e.modelValue)){let e=(0,t.toRaw)(d.value);n(`update:modelValue`,e),i?.onUpdate?.(e)}l.value===s.updated&&(l.value=s.unknown)}}),(0,t.onMounted)(()=>{e.readonly!==void 0&&(f.value=e.readonly)}),(0,t.watch)(()=>e.readonly,e=>{f.value=e}),(0,t.watch)(f,t=>{t!==e.readonly&&n(`update:readonly`,f.value)}),(0,t.provide)(r,{clear:g,errors:x,formData:d,ignoreUpdates:y,invalid:u,readonly:f,reset:_,status:S,stopUpdatesWatch:b,submit:v,validate:h,wrappers:o}),{clear:g,errors:x,formData:d,ignoreUpdates:y,invalid:u,isReadonly:f,reset:_,status:S,stopUpdatesWatch:b,submit:()=>v({superRefine:e.superRefine,fields:new Set(e.validateFields)}),validate:h,wrappers:o}},render(){let e=()=>this.$slots?.default?.({errors:x.value,formData:d.value,invalid:u.value,readonly:f.value,status:S.value,wrappers:o,clear:g,ignoreUpdates:y,reset:_,stopUpdatesWatch:b,submit:v,validate:h})??this.$slots.default;return(0,t.h)(this.tag,{onSubmit:(0,t.withModifiers)(this.submit,[`prevent`]),onReset:(0,t.withModifiers)(this.reset,[`prevent`])},(this.template??i?.template)&&a?[(0,t.h)(a,{schema:this.template??i?.template},{default:e})]:{default:e})}})}}function F(e,n,r,i){return(0,t.defineComponent)({name:`VvFormField`,props:{type:{type:String,validator:e=>Object.values(o).includes(e),default:o.custom},is:{type:[Object,String],default:void 0},name:{type:[String,Number,Boolean,Symbol],required:!0},props:{type:[Object,Function],default:()=>({})},showValid:{type:Boolean,default:!1},defaultValue:{type:[String,Number,Boolean,Array,Object],default:void 0},lazyLoad:{type:Boolean,default:!1},readonly:{type:Boolean,default:void 0}},emits:[`invalid`,`update:formData`,`update:modelValue`,`valid`],expose:[`component`,`errors`,`hasProps`,`invalid`,`invalidLabel`,`is`,`type`],slots:Object,setup(s,{slots:c,emit:l}){let{props:u,name:d}=(0,t.toRefs)(s),f=(0,t.useId)(),p=(0,t.inject)(n,void 0);p&&p.fields.value.set(f,s.name);let m=(0,t.inject)(e),h=(0,t.computed)({get(){if(m?.formData)return(0,a.getProperty)(new Object(m.formData.value),String(s.name))},set(e){m?.formData&&((0,a.setProperty)(new Object(m.formData.value),String(s.name),e),l(`update:modelValue`,{newValue:h.value,formData:m?.formData}))}});(0,t.onMounted)(()=>{h.value===void 0&&s.defaultValue!==void 0&&(h.value=s.defaultValue)}),(0,t.onBeforeUnmount)(()=>{p&&p.fields.value.delete(f)});let g=(0,t.computed)(()=>{if(m?.errors.value)return(0,a.getProperty)(m.errors.value,String(s.name))}),_=(0,t.computed)(()=>g.value?._errors),v=(0,t.computed)(()=>g.value!==void 0),y=(0,t.watch)(v,e=>{if(e){l(`invalid`,g.value),p&&p.errors.value.set(String(s.name),g.value);return}l(`valid`,h.value),p&&p.errors.value.delete(s.name)}),b=(0,t.watch)(()=>m?.formData,()=>{l(`update:formData`,m?.formData)},{deep:!0});(0,t.onBeforeUnmount)(()=>{y(),b()});let x=e=>{e instanceof InputEvent&&(e=e.target.value),h.value=e},S=(0,t.computed)(()=>{let e=u.value;return typeof e==`function`&&(e=e(m?.formData)),Object.keys(e).reduce((n,r)=>(n[r]=(0,t.unref)(e[r]),n),{})}),C=(0,t.computed)(()=>m?.readonly.value||p?.readonly.value?!0:S.value.readonly??s.readonly),w=(0,t.computed)(()=>({...S.value,name:S.value.name??s.name,invalid:v.value,valid:s.showValid?!!(!v.value&&h.value):void 0,type:(e=>{if([o.color,o.date,o.datetimeLocal,o.email,o.month,o.number,o.password,o.search,o.tel,o.text,o.time,o.url,o.week].includes(e))return e})(s.type),invalidLabel:_.value,modelValue:h.value,readonly:C.value,"onUpdate:modelValue":x}));return(0,t.provide)(r,{name:(0,t.readonly)(d),errors:(0,t.readonly)(g)}),{component:(0,t.computed)(()=>{if(s.type===o.custom)return{render(){return c.default?.({errors:(0,t.readonly)(g).value,formData:m?.formData.value,formErrors:m?.errors.value,invalid:v.value,invalidLabel:_.value,modelValue:h.value,readonly:C.value,onUpdate:x,submit:m?.submit,validate:m?.validate})??c.default}};if(!(i?.lazyLoad??s.lazyLoad)){let e;switch(s.type){case o.select:e=(0,t.resolveComponent)(`VvSelect`);break;case o.checkbox:e=(0,t.resolveComponent)(`VvCheckbox`);break;case o.radio:e=(0,t.resolveComponent)(`VvRadio`);break;case o.textarea:e=(0,t.resolveComponent)(`VvTextarea`);break;case o.radioGroup:e=(0,t.resolveComponent)(`VvRadioGroup`);break;case o.checkboxGroup:e=(0,t.resolveComponent)(`VvCheckboxGroup`);break;case o.combobox:e=(0,t.resolveComponent)(`VvCombobox`);break;default:e=(0,t.resolveComponent)(`VvInputText`)}if(typeof e!=`string`)return e;console.warn(`[@volverjs/form-vue]: ${e} not found, the component will be loaded asynchronously. To avoid this warning, please set "lazyLoad" option.`)}return(0,t.defineAsyncComponent)(async()=>{switch(i?.sideEffects&&await Promise.resolve(i.sideEffects(s.type)),s.type){case o.textarea:return import(`@volverjs/ui-vue/vv-textarea`);case o.radio:return import(`@volverjs/ui-vue/vv-radio`);case o.radioGroup:return import(`@volverjs/ui-vue/vv-radio-group`);case o.checkbox:return import(`@volverjs/ui-vue/vv-checkbox`);case o.checkboxGroup:return import(`@volverjs/ui-vue/vv-checkbox-group`);case o.select:return import(`@volverjs/ui-vue/vv-select`);case o.combobox:return import(`@volverjs/ui-vue/vv-combobox`)}return import(`@volverjs/ui-vue/vv-input-text`)})}),hasProps:w,invalid:v}},render(){return this.is?(0,t.h)(this.is,this.hasProps,this.$slots):this.type===o.custom?(0,t.h)(this.component,null,this.$slots):(0,t.h)(this.component,this.hasProps,this.$slots)}})}function I(e,n,r){return(0,t.defineComponent)({name:`VvFormFieldsGroup`,props:{is:{type:[Object,String],default:void 0},names:{type:[Array,Object],required:!0},props:{type:[Object,Function],default:()=>({})},showValid:{type:Boolean,default:!1},defaultValues:{type:[Object],default:void 0},readonly:{type:Boolean,default:void 0}},emits:[`invalid`,`update:formData`,`update:modelValue`,`valid`],expose:[`component`,`errors`,`hasProps`,`invalid`,`invalidLabels`,`is`],slots:Object,setup(i,{slots:o,emit:s}){let{props:c,names:l,defaultValues:u}=(0,t.toRefs)(i),d=(0,t.useId)(),f=(0,t.computed)(()=>Array.isArray(l.value)?l.value:Object.values(l.value)),p=(0,t.computed)(()=>Array.isArray(l.value)?l.value:Object.keys(l.value)),m=(0,t.computed)(()=>Array.isArray(l.value)?l.value.reduce((e,t)=>(e[String(t)]=t,e),{}):l.value),h=(0,t.computed)(()=>Object.keys(m.value).reduce((e,t)=>(e[String(m.value[t])]=t,e),{})),g=(0,t.inject)(n,void 0);g&&f.value.forEach(e=>{g.fields.value.set(`${d}-${e}`,e)});let _=(0,t.inject)(e),v=(0,t.computed)({get(){return _?.formData?p.value.reduce((e,t)=>(e[t]=(0,a.getProperty)(new Object(_.formData.value),m.value[t]),e),{}):{}},set(e){_?.formData&&(p.value.forEach(t=>{(0,a.setProperty)(new Object(_.formData.value),m.value[t],e?.[t])}),s(`update:modelValue`,{newValue:v.value,formData:_?.formData}))}});(0,t.onMounted)(()=>{u.value&&f.value.forEach(e=>{u.value?.[e]!==void 0&&v.value[e]===void 0&&(v.value={...v.value,[e]:u.value?.[e]})})}),(0,t.onBeforeUnmount)(()=>{g&&f.value.forEach(e=>{g.fields.value.delete(`${d}-${e}`)})});let y=(0,t.computed)(()=>{if(!_?.errors.value)return;let e=f.value.reduce((e,t)=>{if(!_.errors.value)return e;let n=(0,a.getProperty)(_.errors.value,String(t));return n===void 0||(e[String(t)]=n),e},{});if(Object.keys(e).length!==0)return e}),b=(0,t.computed)(()=>{if(!y.value)return;let e=Object.keys(y.value).reduce((e,t)=>(y.value?.[t]&&(e[h.value[t]]=y.value[t]._errors),e),{});if(Object.keys(e).length!==0)return e}),x=(0,t.computed)(()=>y.value!==void 0),S=(0,t.computed)(()=>p.value.reduce((e,t)=>(e[t]=!!y.value?.[m.value[t]],e),{})),C=(0,t.watch)(x,()=>{if(x.value){s(`invalid`,y.value),g&&f.value.forEach(e=>{if(!y.value?.[e]){g.errors.value.delete(e);return}g.errors.value.set(e,y.value?.[e])});return}s(`valid`,v.value),g&&f.value.forEach(e=>{g.errors.value.delete(e)})}),w=(0,t.watch)(()=>_?.formData,()=>{s(`update:formData`,_?.formData)},{deep:!0});(0,t.onBeforeUnmount)(()=>{C(),w()});let T=e=>{v.value=e},E=(e,t)=>{t instanceof InputEvent&&(t=t.target.value),p.value.includes(e)&&(v.value={...v.value,[e]:t})},D=(0,t.computed)(()=>{let e=c.value;return typeof e==`function`&&(e=e(_?.formData)),Object.keys(e).reduce((n,r)=>(n[r]=(0,t.unref)(e[r]),n),{})}),O=(0,t.computed)(()=>_?.readonly.value?!0:D.value.readonly??i.readonly),k=(0,t.computed)(()=>p.value.reduce((e,t)=>(e[`onUpdate:${t}`]=e=>{E(t,e)},e),{"onUpdate:modelValue":T})),A=(0,t.computed)(()=>({...k.value,...D.value,...v.value,modelValue:v.value,names:D.value.name??f.value,invalid:x.value,invalids:S.value,valid:i.showValid?!!(!x.value&&v.value):void 0,invalidLabels:b.value,readonly:O.value}));return(0,t.provide)(r,{names:(0,t.readonly)(l),errors:(0,t.readonly)(y)}),{component:(0,t.computed)(()=>({render(){return o.default?.({errors:y.value,formData:_?.formData.value,formErrors:_?.errors.value,invalid:x.value,invalids:S.value,invalidLabels:b.value,modelValue:v.value,onUpdate:T,onUpdateField:E,readonly:O.value,submit:_?.submit,validate:_?.validate})??o.default}})),hasProps:A,invalid:x}},render(){return this.is?(0,t.h)(this.is,this.hasProps,this.$slots):(0,t.h)(this.component,null,this.$slots)}})}function L(e,n){return(0,t.defineComponent)({name:`VvFormWrapper`,props:{name:{type:String,required:!0},tag:{type:String,default:void 0},readonly:{type:Boolean,default:!1}},emits:[`invalid`,`valid`],expose:[`clear`,`errors`,`fields`,`fieldsErrors`,`formData`,`invalid`,`readonly`,`reset`,`submit`,`tag`,`validate`,`validateWrapper`],slots:Object,setup(r,{emit:i}){let a=(0,t.inject)(e),o=(0,t.inject)(n,void 0),s=(0,t.ref)(new Map),c=(0,t.ref)(new Map),{name:l}=(0,t.toRefs)(r),u=(0,t.computed)(()=>a?.invalid.value?c.value.size>0:!1);(0,t.watch)(u,e=>{if(e){i(`invalid`);return}i(`valid`)});let d=(0,t.computed)(()=>a?.readonly.value||r.readonly),f={name:(0,t.readonly)(l),errors:c,invalid:(0,t.readonly)(u),readonly:(0,t.readonly)(d),fields:s};return(0,t.provide)(n,f),(0,t.watch)((0,t.computed)(()=>new Map(s.value)),(e,t)=>{o?.fields&&(t.forEach((t,n)=>{e.has(n)||o?.fields.value.delete(n)}),e.forEach((e,t)=>{o?.fields.value.has(t)||o?.fields.value.set(t,e)}))},{deep:!0}),(0,t.watch)(c,e=>{o?.errors&&s.value.forEach(t=>{if(e.has(t)||o.errors.value.delete(t),e.has(t)){let n=e.get(t);n&&o.errors.value.set(t,n)}})},{deep:!0}),(0,t.onMounted)(()=>{if(!a?.wrappers||!l.value){console.warn(`[@volverjs/form-vue]: Invalid wrapper registration state`);return}if(a.wrappers.has(l.value)){console.warn(`[@volverjs/form-vue]: wrapper name "${l.value}" is already used`);return}a.wrappers.set(l.value,f)}),(0,t.onBeforeUnmount)(()=>{a?.wrappers&&l.value&&a.wrappers.delete(l.value)}),{errors:a?.errors,fields:s,fieldsErrors:c,formData:a?.formData,invalid:u,readonly:d,clear:a?.clear,reset:a?.reset,submit:a?.submit,validate:a?.validate,validateWrapper:()=>a?.validate(void 0,{fields:new Set(s.value.values())})??Promise.resolve(!0)}},render(){let e=()=>this.$slots.default?.({errors:this.errors,fieldsErrors:this.fieldsErrors,formData:this.formData,invalid:this.invalid,readonly:this.readonly,clear:this.clear,reset:this.reset,submit:this.submit,validate:this.validate,validateWrapper:this.validateWrapper});return this.tag?(0,t.h)(this.tag,null,{default:e}):e()}})}function R(e,n){let r=(0,t.defineComponent)({name:`VvFormTemplate`,props:{schema:{type:[Array,Function],required:!0},scope:{type:Object,default:()=>({})}},slots:Object,setup(i,{slots:o}){let s=(0,t.inject)(e);if(s?.formData)return()=>{let e=typeof i.schema==`function`?i.schema(s,i.scope):i.schema,c,l=e.reduce((e,o)=>{let{vvIs:l,vvName:u,vvSlots:d,vvChildren:f,vvIf:p,vvElseIf:m,vvType:h,vvDefaultValue:g,vvShowValid:_,vvContent:v,...y}=typeof o==`function`?o(s,i.scope):o;if(p!==void 0){if(c=typeof p==`string`?!!(0,a.getProperty)(new Object(s.formData.value),p):typeof p==`function`?(0,t.unref)(p(s)):(0,t.unref)(p),!c)return e}else if(m!==void 0&&c!==void 0){if(c||(c=typeof m==`string`?!!(0,a.getProperty)(new Object(s.formData.value),m):typeof m==`function`?(0,t.unref)(m(s)):(0,t.unref)(m),!c))return e}else c=void 0;let b;return f&&(b=typeof l==`string`?(0,t.h)(r,{schema:f}):{default:e=>(0,t.h)(r,{schema:f,scope:e})}),u?(e.push((0,t.h)(n,{name:u,is:l,type:h,defaultValue:g,showValid:_,props:y},d??b??v)),e):l?(e.push((0,t.h)(l,y,d??b??v)),e):(b&&(`default`in b?e.push(b.default(i.scope)):e.push(b)),e)},[]);return l.push(o?.default?.({errors:s?.errors.value,formData:s?.formData.value,invalid:s?.invalid.value,status:s?.status.value,submit:s?.submit,validate:s?.validate,clear:s?.clear,reset:s?.reset})),l}}});return r}function z(e,t={}){let n=Symbol(`formInjectionKey`),r=Symbol(`formWrapperInjectionKey`),i=Symbol(`formFieldInjectionKey`),a=Symbol(`formFieldsGroupInjectionKey`),o=L(n,r),s=F(n,r,i,t),c=I(n,r,a),l=R(n,s),u=new Map,{clear:d,errors:f,formData:p,ignoreUpdates:m,invalid:h,readonly:g,reset:_,status:v,stopUpdatesWatch:y,submit:b,validate:x,VvForm:S}=P(e,n,t,l,u);return{clear:d,errors:f,formData:p,formFieldInjectionKey:i,formInjectionKey:n,formWrapperInjectionKey:r,ignoreUpdates:m,invalid:h,readonly:g,reset:_,status:v,stopUpdatesWatch:y,submit:b,validate:x,wrappers:u,VvForm:S,VvFormField:s,VvFormFieldsGroup:c,VvFormTemplate:l,VvFormWrapper:o}}var B=Symbol(`pluginInjectionKey`);function V(e){let t={};return e.schema&&(t=z(e.schema,e)),{...t,install(n,{global:r=!1}={}){n.provide(B,e),r&&(n.config.globalProperties.$vvForm=e,t?.VvForm&&n.component(`VvForm`,t.VvForm),t?.VvFormWrapper&&n.component(`VvFormWrapper`,t.VvFormWrapper),t?.VvFormField&&n.component(`VvFormField`,t.VvFormField),t?.VvFormFieldsGroup&&n.component(`VvFormFieldsGroup`,t.VvFormFieldsGroup),t?.VvFormTemplate&&n.component(`VvFormTemplate`,t.VvFormTemplate))}}}var H=new Map;function U(e,n={}){if(n.scope&&H.has(n.scope))return H.get(n.scope);if(!(0,t.getCurrentInstance)()){let t=z(e,n);return n.scope&&H.set(n.scope,t),t}let r=z(e,{...(0,t.inject)(B,{}),...n});return n.scope&&H.set(n.scope,r),r}function W(e,t={}){return z(e,t)}e.FormFieldType=o,e.createForm=V,e.defaultObjectBySchema=A,e.formType=W,e.pluginInjectionKey=B,e.useForm=U});
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require("vue"),require("@vueuse/core"),require("zod/v3"),require("zod/v4/core"),require("dot-prop")):typeof define==`function`&&define.amd?define([`exports`,`vue`,`@vueuse/core`,`zod/v3`,`zod/v4/core`,`dot-prop`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e[`@volverjs/form-vue`]={},e.Vue,e.VueUseCore,e.zodV3,e.zodV4Core,e.dotProp))})(this,function(e,t,n,r,i,a){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var o=function(e){return e.text=`text`,e.number=`number`,e.email=`email`,e.password=`password`,e.tel=`tel`,e.url=`url`,e.search=`search`,e.date=`date`,e.time=`time`,e.datetimeLocal=`datetime-local`,e.month=`month`,e.week=`week`,e.color=`color`,e.select=`select`,e.checkbox=`checkbox`,e.radio=`radio`,e.textarea=`textarea`,e.radioGroup=`radioGroup`,e.checkboxGroup=`checkboxGroup`,e.combobox=`combobox`,e.custom=`custom`,e}({}),s=function(e){return e.invalid=`invalid`,e.valid=`valid`,e.submitting=`submitting`,e.reset=`reset`,e.updated=`updated`,e.unknown=`unknown`,e}({});function c(e){return Array.isArray(e)?`array`:e===null?`null`:typeof e}function l(e,t){let n=c(e);return t.type?Array.isArray(t.type)?t.type.some(t=>t===n||t===`integer`&&n===`number`&&Number.isInteger(e)):t.type===n||t.type===`integer`&&n===`number`&&Number.isInteger(e):!0}var u=e=>e._def.typeName===`ZodObject`,d=e=>e._zod.def.type===`object`,f=e=>e._def.typeName===`ZodDefault`,p=e=>e._zod.def.type==="default",m=e=>e._def.typeName===`ZodNullable`,h=e=>e._zod.def.type===`nullable`,g=e=>e._def.typeName===`ZodRecord`,_=e=>e._zod.def.type===`record`,v=e=>e._def.typeName===`ZodArray`,y=e=>e._zod.def.type===`array`,b=e=>e._def.typeName===`ZodEffects`,x=e=>e._def.typeName===`ZodOptional`,S=e=>e._zod.def.type===`optional`,C=e=>e._zod.def.type===`pipe`,w=e=>e._zod.def.type===`transform`;function T(e){let t=e;for(;b(t);)t=t.innerType();return t}function E(e){let t=e;for(;C(t);)t=w(t._zod.def.out)?t._zod.def.in:t._zod.def.out;return t}var D=e=>{let t=T(e);return x(t)&&(t=t._def.innerType),t},O=e=>{let t=E(e);return S(t)&&(t=t._zod.def.innerType),t},k=e=>!!x(T(e)),A=e=>!!S(E(e));function j(e,t){if(e.length===0)return t??void 0;if(t!==void 0){for(let n of e)if(l(t,n))return M(n,t);for(let n of e){let e=n;if(!e.type||e.type===`object`)return M(e,t)}}return M(e[0],t)}function M(e,t){if(`const`in e)return e.const;if(e.anyOf&&Array.isArray(e.anyOf))return j(e.anyOf,t);if(e.oneOf&&Array.isArray(e.oneOf))return j(e.oneOf,t);if(e.allOf&&Array.isArray(e.allOf)){let n={...e,allOf:void 0};for(let t of e.allOf){let e=t;e.properties&&(n.properties={...n.properties,...e.properties}),e.type&&!n.type&&(n.type=e.type)}return M(n,t)}if(Array.isArray(e.type)){if(t===null&&e.type.includes(`null`))return null;let n=e.type.find(e=>e!==`null`);return n?M({...e,type:n},t):e.default??null}if(e.type!==`object`||!e.properties)switch(e.type){case`string`:return typeof t==`string`?t:e.default;case`number`:case`integer`:return typeof t==`number`?t:e.default;case`boolean`:return typeof t==`boolean`?t:e.default;case`null`:return t===null?t:e.default;case`array`:return Array.isArray(t)?e.items?t.map(t=>M(e.items,t)):t:e.default;default:return e.default}let n=e.properties,r=t&&typeof t==`object`&&!Array.isArray(t)?t:void 0,i={};for(let e in n){let t=r?.[e];i[e]=M(n[e],t)}if(r&&e.additionalProperties!==!1){let e=new Set(Object.keys(n));for(let[t,n]of Object.entries(r))e.has(t)||(i[t]=n)}return i}var N=e=>`_zod`in e,P={getInnerType:D,isObject:u,hasUnknownKeys:e=>e._def.unknownKeys===`passthrough`,getShapeEntries:e=>`shape`in e?Object.entries(e.shape):[],isOptional:k,isDefault:f,getDefaultValue:e=>e._def.defaultValue(),getDefaultInnerType:e=>e._def.innerType,isNullable:m,safeParse:(e,t)=>e.safeParse(t),isArray:v,getArrayElement:e=>e._def.type,isRecord:g,getRecordValue:e=>e._def.valueType},F={getInnerType:O,isObject:d,hasUnknownKeys:e=>!!(e._zod.def.catchall&&e._zod.def.catchall._zod.def.type!==`never`),getShapeEntries:e=>`shape`in e._zod.def?Object.entries(e._zod.def.shape):[],isOptional:A,isDefault:p,getDefaultValue:e=>e._zod.def.defaultValue,getDefaultInnerType:e=>e._zod.def.innerType,isNullable:h,safeParse:(e,t)=>(0,i.safeParse)(e,t),isArray:y,getArrayElement:e=>e._zod.def.element,isRecord:_,getRecordValue:e=>e._zod.def.valueType};function I(e,t,n){let r=e.getInnerType(e.getArrayElement(t));return e.isObject(r)?n.map(t=>z(e,r,t)):n}function L(e,t,n){let r=e.getInnerType(e.getRecordValue(t));return e.isObject(r)?Object.keys(n).reduce((t,i)=>(t[i]=z(e,r,n[i]),t),{}):n}function R(e,t,n,r){let i=e.isOptional(n),a=e.getInnerType(n),o;if(e.isDefault(a)&&(o=e.getDefaultValue(a),a=e.getDefaultInnerType(a)),r===null&&e.isNullable(a))return[t,r];if(r==null&&i)return[t,o];if(a&&r!==void 0){let i=e.safeParse(n,r);if(i.success)return[t,i.data??o]}return e.isArray(a)&&Array.isArray(r)?[t,I(e,a,r)]:e.isRecord(a)&&r?[t,L(e,a,r)]:e.isObject(a)?[t,z(e,a,r&&typeof r==`object`?r:o)]:[t,o]}function z(e,t,n){let r=n&&typeof n==`object`&&!Array.isArray(n)?n:{};return{...e.hasUnknownKeys(t)?r:{},...Object.fromEntries(e.getShapeEntries(t).map(([t,n])=>R(e,t,n,r[t])))}}function B(e,t={}){let n=N(e)?F:P,r=n.getInnerType(e);return n.isObject(r)?z(n,r,t):t}var V=(e,t)=>N(e)?(0,i.safeParseAsync)(e,t):e.safeParseAsync(t),H=(e,t)=>N(e)?(0,i.formatError)(t):t.format(),U=(e,t)=>N(e)?(0,i.formatError)(new i.$ZodError(t)):new r.ZodError(t).format();function W(e,r,i,a,o){let c=(0,t.ref)(),l=(0,t.ref)(),u=(0,t.computed)(()=>l.value===s.invalid),d=(0,t.ref)(),f=(0,t.ref)(!1),p,m=t=>{let n=B(e,t);if(i?.class){let e=i.class;return new e(n)}return n},h=async(t=d.value,n)=>{if(p=n?.fields,f.value)return!0;let r=await V(e,t);if(!r.success){if(l.value=s.invalid,!p?.size)return c.value=H(e,r.error),!1;let t=r.error.issues.filter(e=>p?.has(e.path.join(`.`)));return t.length?(c.value=U(e,t),!1):(c.value=void 0,!0)}return c.value=void 0,l.value=s.valid,d.value=m(r.data),!0},g=()=>{c.value=void 0,l.value=void 0,p=void 0},_=()=>{d.value=m(),g(),l.value=s.reset},v=async e=>f.value||!await h(void 0,e)?!1:(l.value=s.submitting,!0),{ignoreUpdates:y,stop:b}=(0,n.watchIgnorable)(d,()=>{l.value=s.updated},{deep:!0,eventFilter:(0,n.throttleFilter)(i?.updateThrottle??500)}),x=(0,t.readonly)(c),S=(0,t.readonly)(l);return{clear:g,errors:c,formData:d,ignoreUpdates:y,invalid:u,readonly:f,reset:_,status:l,wrappers:o,stopUpdatesWatch:b,submit:v,validate:h,VvForm:(0,t.defineComponent)({name:`VvForm`,props:{continuousValidation:{type:Boolean,default:!1},modelValue:{type:Object,default:()=>({})},readonly:{type:Boolean,default:i?.readonly},tag:{type:String,default:`form`},template:{type:[Array,Function],default:void 0},superRefine:{type:Function,default:void 0},validateFields:{type:Array,default:void 0}},emits:[`invalid`,`submit`,`update:modelValue`,`update:readonly`,`valid`,`reset`],expose:[`errors`,`invalid`,`readonly`,`status`,`submit`,`tag`,`template`,`valid`,`validate`,`clear`,`reset`],slots:Object,setup(e,{emit:n}){return d.value=m((0,t.toRaw)(e.modelValue)),(0,t.watch)(()=>e.modelValue,e=>{if(e){let n=(0,t.isProxy)(e)?(0,t.toRaw)(e):e;if(JSON.stringify(n)===JSON.stringify((0,t.toRaw)(d.value)))return;d.value=m(n)}},{deep:!0}),(0,t.watch)(l,async r=>{if(r===s.invalid){let e=(0,t.toRaw)(c.value);n(`invalid`,e),i?.onInvalid?.(e);return}if(r===s.valid){let e=(0,t.toRaw)(d.value);n(`valid`,e),i?.onValid?.(e),n(`update:modelValue`,e),i?.onUpdate?.(e);return}if(r===s.submitting){let e=(0,t.toRaw)(d.value);n(`submit`,e),i?.onSubmit?.(e);return}if(r===s.reset){let e=(0,t.toRaw)(d.value);n(`reset`,e),i?.onReset?.(e);return}if(r===s.updated){if((c.value||i?.continuousValidation||e.continuousValidation)&&await h(void 0,{superRefine:e.superRefine,fields:p??new Set(e.validateFields)}),!d.value||!e.modelValue||JSON.stringify(d.value)!==JSON.stringify(e.modelValue)){let e=(0,t.toRaw)(d.value);n(`update:modelValue`,e),i?.onUpdate?.(e)}l.value===s.updated&&(l.value=s.unknown)}}),(0,t.onMounted)(()=>{e.readonly!==void 0&&(f.value=e.readonly)}),(0,t.watch)(()=>e.readonly,e=>{f.value=e}),(0,t.watch)(f,t=>{t!==e.readonly&&n(`update:readonly`,f.value)}),(0,t.provide)(r,{clear:g,errors:x,formData:d,ignoreUpdates:y,invalid:u,readonly:f,reset:_,status:S,stopUpdatesWatch:b,submit:v,validate:h,wrappers:o}),{clear:g,errors:x,formData:d,ignoreUpdates:y,invalid:u,isReadonly:f,reset:_,status:S,stopUpdatesWatch:b,submit:()=>v({superRefine:e.superRefine,fields:new Set(e.validateFields)}),validate:h,wrappers:o}},render(){let e=()=>this.$slots?.default?.({errors:x.value,formData:d.value,invalid:u.value,readonly:f.value,status:S.value,wrappers:o,clear:g,ignoreUpdates:y,reset:_,stopUpdatesWatch:b,submit:v,validate:h})??this.$slots.default;return(0,t.h)(this.tag,{onSubmit:(0,t.withModifiers)(this.submit,[`prevent`]),onReset:(0,t.withModifiers)(this.reset,[`prevent`])},(this.template??i?.template)&&a?[(0,t.h)(a,{schema:this.template??i?.template},{default:e})]:{default:e})}})}}function G(e,n,r,i){return(0,t.defineComponent)({name:`VvFormField`,props:{type:{type:String,validator:e=>Object.values(o).includes(e),default:o.custom},is:{type:[Object,String],default:void 0},name:{type:[String,Number,Boolean,Symbol],required:!0},props:{type:[Object,Function],default:()=>({})},showValid:{type:Boolean,default:!1},defaultValue:{type:[String,Number,Boolean,Array,Object],default:void 0},lazyLoad:{type:Boolean,default:!1},readonly:{type:Boolean,default:void 0}},emits:[`invalid`,`update:formData`,`update:modelValue`,`valid`],expose:[`component`,`errors`,`hasProps`,`invalid`,`invalidLabel`,`is`,`type`],slots:Object,setup(s,{slots:c,emit:l}){let{props:u,name:d}=(0,t.toRefs)(s),f=(0,t.useId)(),p=(0,t.inject)(n,void 0);p&&p.fields.value.set(f,s.name);let m=(0,t.inject)(e),h=(0,t.computed)({get(){if(m?.formData)return(0,a.getProperty)(new Object(m.formData.value),String(s.name))},set(e){m?.formData&&((0,a.setProperty)(new Object(m.formData.value),String(s.name),e),l(`update:modelValue`,{newValue:h.value,formData:m?.formData}))}});(0,t.onMounted)(()=>{h.value===void 0&&s.defaultValue!==void 0&&(h.value=s.defaultValue)}),(0,t.onBeforeUnmount)(()=>{p&&p.fields.value.delete(f)});let g=(0,t.computed)(()=>{if(m?.errors.value)return(0,a.getProperty)(m.errors.value,String(s.name))}),_=(0,t.computed)(()=>g.value?._errors),v=(0,t.computed)(()=>g.value!==void 0),y=(0,t.watch)(v,e=>{if(e){l(`invalid`,g.value),p&&p.errors.value.set(String(s.name),g.value);return}l(`valid`,h.value),p&&p.errors.value.delete(s.name)}),b=(0,t.watch)(()=>m?.formData,()=>{l(`update:formData`,m?.formData)},{deep:!0});(0,t.onBeforeUnmount)(()=>{y(),b()});let x=e=>{e instanceof InputEvent&&(e=e.target.value),h.value=e},S=(0,t.computed)(()=>{let e=u.value;return typeof e==`function`&&(e=e(m?.formData)),Object.keys(e).reduce((n,r)=>(n[r]=(0,t.unref)(e[r]),n),{})}),C=(0,t.computed)(()=>m?.readonly.value||p?.readonly.value?!0:S.value.readonly??s.readonly),w=(0,t.computed)(()=>({...S.value,name:S.value.name??s.name,invalid:v.value,valid:s.showValid?!!(!v.value&&h.value):void 0,type:(e=>{if([o.color,o.date,o.datetimeLocal,o.email,o.month,o.number,o.password,o.search,o.tel,o.text,o.time,o.url,o.week].includes(e))return e})(s.type),invalidLabel:_.value,modelValue:h.value,readonly:C.value,"onUpdate:modelValue":x}));return(0,t.provide)(r,{name:(0,t.readonly)(d),errors:(0,t.readonly)(g)}),{component:(0,t.computed)(()=>{if(s.type===o.custom)return{render(){return c.default?.({errors:(0,t.readonly)(g).value,formData:m?.formData.value,formErrors:m?.errors.value,invalid:v.value,invalidLabel:_.value,modelValue:h.value,readonly:C.value,onUpdate:x,submit:m?.submit,validate:m?.validate})??c.default}};if(!(i?.lazyLoad??s.lazyLoad)){let e;switch(s.type){case o.select:e=(0,t.resolveComponent)(`VvSelect`);break;case o.checkbox:e=(0,t.resolveComponent)(`VvCheckbox`);break;case o.radio:e=(0,t.resolveComponent)(`VvRadio`);break;case o.textarea:e=(0,t.resolveComponent)(`VvTextarea`);break;case o.radioGroup:e=(0,t.resolveComponent)(`VvRadioGroup`);break;case o.checkboxGroup:e=(0,t.resolveComponent)(`VvCheckboxGroup`);break;case o.combobox:e=(0,t.resolveComponent)(`VvCombobox`);break;default:e=(0,t.resolveComponent)(`VvInputText`)}if(typeof e!=`string`)return e;console.warn(`[@volverjs/form-vue]: ${e} not found, the component will be loaded asynchronously. To avoid this warning, please set "lazyLoad" option.`)}return(0,t.defineAsyncComponent)(async()=>{switch(i?.sideEffects&&await Promise.resolve(i.sideEffects(s.type)),s.type){case o.textarea:return import(`@volverjs/ui-vue/vv-textarea`);case o.radio:return import(`@volverjs/ui-vue/vv-radio`);case o.radioGroup:return import(`@volverjs/ui-vue/vv-radio-group`);case o.checkbox:return import(`@volverjs/ui-vue/vv-checkbox`);case o.checkboxGroup:return import(`@volverjs/ui-vue/vv-checkbox-group`);case o.select:return import(`@volverjs/ui-vue/vv-select`);case o.combobox:return import(`@volverjs/ui-vue/vv-combobox`)}return import(`@volverjs/ui-vue/vv-input-text`)})}),hasProps:w,invalid:v}},render(){return this.is?(0,t.h)(this.is,this.hasProps,this.$slots):this.type===o.custom?(0,t.h)(this.component,null,this.$slots):(0,t.h)(this.component,this.hasProps,this.$slots)}})}function K(e,n,r){return(0,t.defineComponent)({name:`VvFormFieldsGroup`,props:{is:{type:[Object,String],default:void 0},names:{type:[Array,Object],required:!0},props:{type:[Object,Function],default:()=>({})},showValid:{type:Boolean,default:!1},defaultValues:{type:[Object],default:void 0},readonly:{type:Boolean,default:void 0}},emits:[`invalid`,`update:formData`,`update:modelValue`,`valid`],expose:[`component`,`errors`,`hasProps`,`invalid`,`invalidLabels`,`is`],slots:Object,setup(i,{slots:o,emit:s}){let{props:c,names:l,defaultValues:u}=(0,t.toRefs)(i),d=(0,t.useId)(),f=(0,t.computed)(()=>Array.isArray(l.value)?l.value:Object.values(l.value)),p=(0,t.computed)(()=>Array.isArray(l.value)?l.value:Object.keys(l.value)),m=(0,t.computed)(()=>Array.isArray(l.value)?l.value.reduce((e,t)=>(e[String(t)]=t,e),{}):l.value),h=(0,t.computed)(()=>Object.keys(m.value).reduce((e,t)=>(e[String(m.value[t])]=t,e),{})),g=(0,t.inject)(n,void 0);g&&f.value.forEach(e=>{g.fields.value.set(`${d}-${e}`,e)});let _=(0,t.inject)(e),v=(0,t.computed)({get(){return _?.formData?p.value.reduce((e,t)=>(e[t]=(0,a.getProperty)(new Object(_.formData.value),m.value[t]),e),{}):{}},set(e){_?.formData&&(p.value.forEach(t=>{(0,a.setProperty)(new Object(_.formData.value),m.value[t],e?.[t])}),s(`update:modelValue`,{newValue:v.value,formData:_?.formData}))}});(0,t.onMounted)(()=>{u.value&&f.value.forEach(e=>{u.value?.[e]!==void 0&&v.value[e]===void 0&&(v.value={...v.value,[e]:u.value?.[e]})})}),(0,t.onBeforeUnmount)(()=>{g&&f.value.forEach(e=>{g.fields.value.delete(`${d}-${e}`)})});let y=(0,t.computed)(()=>{if(!_?.errors.value)return;let e=f.value.reduce((e,t)=>{if(!_.errors.value)return e;let n=(0,a.getProperty)(_.errors.value,String(t));return n===void 0||(e[String(t)]=n),e},{});if(Object.keys(e).length!==0)return e}),b=(0,t.computed)(()=>{if(!y.value)return;let e=Object.keys(y.value).reduce((e,t)=>(y.value?.[t]&&(e[h.value[t]]=y.value[t]._errors),e),{});if(Object.keys(e).length!==0)return e}),x=(0,t.computed)(()=>y.value!==void 0),S=(0,t.computed)(()=>p.value.reduce((e,t)=>(e[t]=!!y.value?.[m.value[t]],e),{})),C=(0,t.watch)(x,()=>{if(x.value){s(`invalid`,y.value),g&&f.value.forEach(e=>{if(!y.value?.[e]){g.errors.value.delete(e);return}g.errors.value.set(e,y.value?.[e])});return}s(`valid`,v.value),g&&f.value.forEach(e=>{g.errors.value.delete(e)})}),w=(0,t.watch)(()=>_?.formData,()=>{s(`update:formData`,_?.formData)},{deep:!0});(0,t.onBeforeUnmount)(()=>{C(),w()});let T=e=>{v.value=e},E=(e,t)=>{t instanceof InputEvent&&(t=t.target.value),p.value.includes(e)&&(v.value={...v.value,[e]:t})},D=(0,t.computed)(()=>{let e=c.value;return typeof e==`function`&&(e=e(_?.formData)),Object.keys(e).reduce((n,r)=>(n[r]=(0,t.unref)(e[r]),n),{})}),O=(0,t.computed)(()=>_?.readonly.value?!0:D.value.readonly??i.readonly),k=(0,t.computed)(()=>p.value.reduce((e,t)=>(e[`onUpdate:${t}`]=e=>{E(t,e)},e),{"onUpdate:modelValue":T})),A=(0,t.computed)(()=>({...k.value,...D.value,...v.value,modelValue:v.value,names:D.value.name??f.value,invalid:x.value,invalids:S.value,valid:i.showValid?!!(!x.value&&v.value):void 0,invalidLabels:b.value,readonly:O.value}));return(0,t.provide)(r,{names:(0,t.readonly)(l),errors:(0,t.readonly)(y)}),{component:(0,t.computed)(()=>({render(){return o.default?.({errors:y.value,formData:_?.formData.value,formErrors:_?.errors.value,invalid:x.value,invalids:S.value,invalidLabels:b.value,modelValue:v.value,onUpdate:T,onUpdateField:E,readonly:O.value,submit:_?.submit,validate:_?.validate})??o.default}})),hasProps:A,invalid:x}},render(){return this.is?(0,t.h)(this.is,this.hasProps,this.$slots):(0,t.h)(this.component,null,this.$slots)}})}function q(e,n){return(0,t.defineComponent)({name:`VvFormWrapper`,props:{name:{type:String,required:!0},tag:{type:String,default:void 0},readonly:{type:Boolean,default:!1}},emits:[`invalid`,`valid`],expose:[`clear`,`errors`,`fields`,`fieldsErrors`,`formData`,`invalid`,`readonly`,`reset`,`submit`,`tag`,`validate`,`validateWrapper`],slots:Object,setup(r,{emit:i}){let a=(0,t.inject)(e),o=(0,t.inject)(n,void 0),s=(0,t.ref)(new Map),c=(0,t.ref)(new Map),{name:l}=(0,t.toRefs)(r),u=(0,t.computed)(()=>a?.invalid.value?c.value.size>0:!1);(0,t.watch)(u,e=>{if(e){i(`invalid`);return}i(`valid`)});let d=(0,t.computed)(()=>a?.readonly.value||r.readonly),f={name:(0,t.readonly)(l),errors:c,invalid:(0,t.readonly)(u),readonly:(0,t.readonly)(d),fields:s};return(0,t.provide)(n,f),(0,t.watch)((0,t.computed)(()=>new Map(s.value)),(e,t)=>{o?.fields&&(t.forEach((t,n)=>{e.has(n)||o?.fields.value.delete(n)}),e.forEach((e,t)=>{o?.fields.value.has(t)||o?.fields.value.set(t,e)}))},{deep:!0}),(0,t.watch)(c,e=>{o?.errors&&s.value.forEach(t=>{if(e.has(t)||o.errors.value.delete(t),e.has(t)){let n=e.get(t);n&&o.errors.value.set(t,n)}})},{deep:!0}),(0,t.onMounted)(()=>{if(!a?.wrappers||!l.value){console.warn(`[@volverjs/form-vue]: Invalid wrapper registration state`);return}if(a.wrappers.has(l.value)){console.warn(`[@volverjs/form-vue]: wrapper name "${l.value}" is already used`);return}a.wrappers.set(l.value,f)}),(0,t.onBeforeUnmount)(()=>{a?.wrappers&&l.value&&a.wrappers.delete(l.value)}),{errors:a?.errors,fields:s,fieldsErrors:c,formData:a?.formData,invalid:u,readonly:d,clear:a?.clear,reset:a?.reset,submit:a?.submit,validate:a?.validate,validateWrapper:()=>a?.validate(void 0,{fields:new Set(s.value.values())})??Promise.resolve(!0)}},render(){let e=()=>this.$slots.default?.({errors:this.errors,fieldsErrors:this.fieldsErrors,formData:this.formData,invalid:this.invalid,readonly:this.readonly,clear:this.clear,reset:this.reset,submit:this.submit,validate:this.validate,validateWrapper:this.validateWrapper});return this.tag?(0,t.h)(this.tag,null,{default:e}):e()}})}function J(e,n){let r=(0,t.defineComponent)({name:`VvFormTemplate`,props:{schema:{type:[Array,Function],required:!0},scope:{type:Object,default:()=>({})}},slots:Object,setup(i,{slots:o}){let s=(0,t.inject)(e);if(s?.formData)return()=>{let e=typeof i.schema==`function`?i.schema(s,i.scope):i.schema,c,l=e.reduce((e,o)=>{let{vvIs:l,vvName:u,vvSlots:d,vvChildren:f,vvIf:p,vvElseIf:m,vvType:h,vvDefaultValue:g,vvShowValid:_,vvContent:v,...y}=typeof o==`function`?o(s,i.scope):o;if(p!==void 0){if(c=typeof p==`string`?!!(0,a.getProperty)(new Object(s.formData.value),p):typeof p==`function`?(0,t.unref)(p(s)):(0,t.unref)(p),!c)return e}else if(m!==void 0&&c!==void 0){if(c||(c=typeof m==`string`?!!(0,a.getProperty)(new Object(s.formData.value),m):typeof m==`function`?(0,t.unref)(m(s)):(0,t.unref)(m),!c))return e}else c=void 0;let b;return f&&(b=typeof l==`string`?(0,t.h)(r,{schema:f}):{default:e=>(0,t.h)(r,{schema:f,scope:e})}),u?(e.push((0,t.h)(n,{name:u,is:l,type:h,defaultValue:g,showValid:_,props:y},d??b??v)),e):l?(e.push((0,t.h)(l,y,d??b??v)),e):(b&&(`default`in b?e.push(b.default(i.scope)):e.push(b)),e)},[]);return l.push(o?.default?.({errors:s?.errors.value,formData:s?.formData.value,invalid:s?.invalid.value,status:s?.status.value,submit:s?.submit,validate:s?.validate,clear:s?.clear,reset:s?.reset})),l}}});return r}function Y(e,t={}){let n=Symbol(`formInjectionKey`),r=Symbol(`formWrapperInjectionKey`),i=Symbol(`formFieldInjectionKey`),a=Symbol(`formFieldsGroupInjectionKey`),o=q(n,r),s=G(n,r,i,t),c=K(n,r,a),l=J(n,s),u=new Map,{clear:d,errors:f,formData:p,ignoreUpdates:m,invalid:h,readonly:g,reset:_,status:v,stopUpdatesWatch:y,submit:b,validate:x,VvForm:S}=W(e,n,t,l,u);return{clear:d,errors:f,formData:p,formFieldInjectionKey:i,formInjectionKey:n,formWrapperInjectionKey:r,ignoreUpdates:m,invalid:h,readonly:g,reset:_,status:v,stopUpdatesWatch:y,submit:b,validate:x,wrappers:u,VvForm:S,VvFormField:s,VvFormFieldsGroup:c,VvFormTemplate:l,VvFormWrapper:o}}var X=Symbol(`pluginInjectionKey`);function Z(e){let t={};return e.schema&&(t=Y(e.schema,e)),{...t,install(n,{global:r=!1}={}){n.provide(X,e),r&&(n.config.globalProperties.$vvForm=e,t?.VvForm&&n.component(`VvForm`,t.VvForm),t?.VvFormWrapper&&n.component(`VvFormWrapper`,t.VvFormWrapper),t?.VvFormField&&n.component(`VvFormField`,t.VvFormField),t?.VvFormFieldsGroup&&n.component(`VvFormFieldsGroup`,t.VvFormFieldsGroup),t?.VvFormTemplate&&n.component(`VvFormTemplate`,t.VvFormTemplate))}}}var Q=new Map;function $(e,n={}){if(n.scope&&Q.has(n.scope))return Q.get(n.scope);if(!(0,t.getCurrentInstance)()){let t=Y(e,n);return n.scope&&Q.set(n.scope,t),t}let r=Y(e,{...(0,t.inject)(X,{}),...n});return n.scope&&Q.set(n.scope,r),r}function ee(e,t={}){return Y(e,t)}e.FormFieldType=o,e.createForm=Z,e.defaultObjectByJSONSchema=M,e.defaultObjectBySchema=B,e.formType=ee,e.pluginInjectionKey=X,e.useForm=$});
@@ -46,7 +46,7 @@ export declare function defineFormField<Schema extends FormSchema, Type = undefi
46
46
  name: {} | ([{
47
47
  type: PropType<Path<InferSchema<Schema>>>;
48
48
  required: true;
49
- }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
49
+ }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
50
50
  type: PropType<Path<InferSchema<Schema>>>;
51
51
  required: true;
52
52
  });
@@ -104,7 +104,7 @@ export declare function defineFormField<Schema extends FormSchema, Type = undefi
104
104
  props: [{
105
105
  type: PropType<Partial<InferSchema<Schema> | undefined | ((formData?: Ref<ObjectConstructor>) => Partial<InferSchema<Schema>> | undefined)>>;
106
106
  default: () => {};
107
- }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
107
+ }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
108
108
  type: PropType<Partial<InferSchema<Schema> | undefined | ((formData?: Ref<ObjectConstructor>) => Partial<InferSchema<Schema>> | undefined)>>;
109
109
  default: () => {};
110
110
  };
@@ -76,7 +76,7 @@ export declare function defineFormFieldsGroup<Schema extends FormSchema, Type =
76
76
  props: [{
77
77
  type: PropType<Partial<InferSchema<Schema> | undefined | ((formData?: Ref<ObjectConstructor>) => Partial<InferSchema<Schema>> | undefined)>>;
78
78
  default: () => {};
79
- }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
79
+ }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
80
80
  type: PropType<Partial<InferSchema<Schema> | undefined | ((formData?: Ref<ObjectConstructor>) => Partial<InferSchema<Schema>> | undefined)>>;
81
81
  default: () => {};
82
82
  };
@@ -85,7 +85,7 @@ export declare function defineFormFieldsGroup<Schema extends FormSchema, Type =
85
85
  defaultValues: [{
86
86
  type: PropType<Record<Path<InferSchema<Schema>>, any>>;
87
87
  default: undefined;
88
- }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
88
+ }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
89
89
  type: PropType<Record<Path<InferSchema<Schema>>, any>>;
90
90
  default: undefined;
91
91
  };
@@ -3,6 +3,7 @@ import { defineForm } from './VvForm';
3
3
  import { defineFormField } from './VvFormField';
4
4
  import { defineFormFieldsGroup } from './VvFormFieldsGroup';
5
5
  import { defineFormWrapper } from './VvFormWrapper';
6
+ import { defineFormTemplate } from './VvFormTemplate';
6
7
  import { InjectedFormData, InjectedFormWrapperData, InjectedFormFieldData, FormComposableOptions, FormPluginOptions, FormTemplateItem, Path, PathValue, FormSchema, FormTemplate } from './types';
7
8
  declare function _formType<Schema extends FormSchema, Type>(schema: Schema, options?: FormComposableOptions<Schema, Type>): {
8
9
  clear: () => void;
@@ -182,7 +183,7 @@ declare function _formType<Schema extends FormSchema, Type>(schema: Schema, opti
182
183
  name: {} | ([{
183
184
  type: import('vue').PropType<Path<import('./types').InferSchema<Schema>>>;
184
185
  required: true;
185
- }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
186
+ }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
186
187
  type: import('vue').PropType<Path<import('./types').InferSchema<Schema>>>;
187
188
  required: true;
188
189
  });
@@ -240,7 +241,7 @@ declare function _formType<Schema extends FormSchema, Type>(schema: Schema, opti
240
241
  props: [{
241
242
  type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
242
243
  default: () => {};
243
- }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
244
+ }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
244
245
  type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
245
246
  default: () => {};
246
247
  };
@@ -342,7 +343,7 @@ declare function _formType<Schema extends FormSchema, Type>(schema: Schema, opti
342
343
  props: [{
343
344
  type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
344
345
  default: () => {};
345
- }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
346
+ }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
346
347
  type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
347
348
  default: () => {};
348
349
  };
@@ -351,7 +352,7 @@ declare function _formType<Schema extends FormSchema, Type>(schema: Schema, opti
351
352
  defaultValues: [{
352
353
  type: import('vue').PropType<Record<Path<import('./types').InferSchema<Schema>>, any>>;
353
354
  default: undefined;
354
- }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
355
+ }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
355
356
  type: import('vue').PropType<Record<Path<import('./types').InferSchema<Schema>>, any>>;
356
357
  default: undefined;
357
358
  };
@@ -484,12 +485,12 @@ export declare const pluginInjectionKey: InjectionKey<FormPluginOptions>;
484
485
  export declare function createForm(options: FormPluginOptions): Plugin & Partial<ReturnType<typeof useForm>>;
485
486
  export declare function useForm<Schema extends FormSchema, Type>(schema: Schema, options?: FormComposableOptions<Schema, Type>): ReturnType<typeof _formType<Schema, Type>>;
486
487
  export { FormFieldType } from './enums';
487
- export { defaultObjectBySchema } from './utils';
488
+ export { defaultObjectByJSONSchema, defaultObjectBySchema } from './utils';
488
489
  type FormComponent = ReturnType<typeof defineForm>;
489
490
  type FormWrapperComponent = ReturnType<typeof defineFormWrapper>;
490
491
  type FormFieldComponent = ReturnType<typeof defineFormField>;
491
492
  type FormFieldsGroupComponent = ReturnType<typeof defineFormFieldsGroup>;
492
- type FormTemplateComponent = ReturnType<typeof defineFormFieldsGroup>;
493
+ type FormTemplateComponent = ReturnType<typeof defineFormTemplate>;
493
494
  export type { FormComponent, FormComposableOptions, FormFieldComponent, FormFieldsGroupComponent, FormPluginOptions, FormSchema, FormTemplate, FormTemplateComponent, FormTemplateItem, FormWrapperComponent, InjectedFormData, InjectedFormFieldData, InjectedFormWrapperData, Path, PathValue, };
494
495
  /**
495
496
  * @deprecated Use `useForm()` instead
@@ -672,7 +673,7 @@ export declare function formType<Schema extends FormSchema, Type>(schema: Schema
672
673
  name: {} | ([{
673
674
  type: import('vue').PropType<Path<import('./types').InferSchema<Schema>>>;
674
675
  required: true;
675
- }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
676
+ }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
676
677
  type: import('vue').PropType<Path<import('./types').InferSchema<Schema>>>;
677
678
  required: true;
678
679
  });
@@ -730,7 +731,7 @@ export declare function formType<Schema extends FormSchema, Type>(schema: Schema
730
731
  props: [{
731
732
  type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
732
733
  default: () => {};
733
- }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
734
+ }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
734
735
  type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
735
736
  default: () => {};
736
737
  };
@@ -832,7 +833,7 @@ export declare function formType<Schema extends FormSchema, Type>(schema: Schema
832
833
  props: [{
833
834
  type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
834
835
  default: () => {};
835
- }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
836
+ }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
836
837
  type: import('vue').PropType<Partial<import('./types').InferSchema<Schema> | ((formData?: import('vue').Ref<ObjectConstructor>) => Partial<import('./types').InferSchema<Schema>> | undefined) | undefined>>;
837
838
  default: () => {};
838
839
  };
@@ -841,7 +842,7 @@ export declare function formType<Schema extends FormSchema, Type>(schema: Schema
841
842
  defaultValues: [{
842
843
  type: import('vue').PropType<Record<Path<import('./types').InferSchema<Schema>>, any>>;
843
844
  default: undefined;
844
- }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
845
+ }] extends [import('vue').Prop<infer V, infer D>] ? unknown extends V ? keyof V extends never ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : V : {
845
846
  type: import('vue').PropType<Record<Path<import('./types').InferSchema<Schema>>, any>>;
846
847
  default: undefined;
847
848
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@volverjs/form-vue",
3
3
  "type": "module",
4
- "version": "1.1.2",
4
+ "version": "1.1.3",
5
5
  "description": "Vue 3 Forms with @volverjs/ui-vue",
6
6
  "author": "8 Wave S.r.l.",
7
7
  "license": "MIT",
@@ -47,7 +47,7 @@
47
47
  "src"
48
48
  ],
49
49
  "engines": {
50
- "node": ">= 16.x"
50
+ "node": "^20.19.0 || >=22.12.0"
51
51
  },
52
52
  "peerDependencies": {
53
53
  "@volverjs/ui-vue": "^0.0.12",
@@ -60,29 +60,29 @@
60
60
  "@antfu/eslint-config": "^9.0.0",
61
61
  "@nabla/vite-plugin-eslint": "^3.0.1",
62
62
  "@testing-library/vue": "^8.1.0",
63
- "@vitejs/plugin-vue": "^6.0.6",
64
- "@vitest/browser-playwright": "^4.1.6",
65
- "@volverjs/style": "^0.1.23",
63
+ "@vitejs/plugin-vue": "^6.0.7",
64
+ "@vitest/browser-playwright": "^4.1.9",
65
+ "@volverjs/style": "^0.1.24",
66
66
  "@volverjs/ui-vue": "^0.0.12",
67
- "@vue/compiler-dom": "^3.5.34",
68
- "@vue/compiler-sfc": "^3.5.34",
69
- "@vue/language-core": "^3.2.8",
70
- "@vue/runtime-core": "^3.5.34",
71
- "@vue/shared": "^3.5.34",
72
- "@vue/test-utils": "^2.4.10",
67
+ "@vue/compiler-dom": "^3.5.38",
68
+ "@vue/compiler-sfc": "^3.5.38",
69
+ "@vue/language-core": "^3.3.5",
70
+ "@vue/runtime-core": "^3.5.38",
71
+ "@vue/shared": "^3.5.38",
72
+ "@vue/test-utils": "^2.4.11",
73
73
  "@vueuse/core": "^14.3.0",
74
74
  "copy": "^0.3.2",
75
75
  "dot-prop": "^10.1.0",
76
- "eslint": "^10.3.0",
77
- "happy-dom": "^20.9.0",
78
- "playwright": "^1.59.1",
76
+ "eslint": "^10.5.0",
77
+ "happy-dom": "^20.10.3",
78
+ "playwright": "^1.61.0",
79
79
  "typescript": "^6.0.3",
80
- "vite": "^8.0.12",
81
- "vite-plugin-dts": "^5.0.0",
80
+ "vite": "^8.0.16",
81
+ "vite-plugin-dts": "^5.0.2",
82
82
  "vite-plugin-externalize-deps": "^0.10.0",
83
- "vitest": "^4.1.6",
83
+ "vitest": "^4.1.9",
84
84
  "vitest-browser-vue": "^2.1.0",
85
- "vue": "^3.5.34",
85
+ "vue": "^3.5.38",
86
86
  "zod": "^4.4.3"
87
87
  },
88
88
  "scripts": {
package/src/VvForm.ts CHANGED
@@ -207,9 +207,7 @@ export function defineForm<Schema extends FormSchema, Type, FormTemplateComponen
207
207
  return
208
208
  }
209
209
 
210
- formData.value = typeof original?.clone === 'function'
211
- ? original.clone()
212
- : JSON.parse(JSON.stringify(original))
210
+ formData.value = formDataAdapter(original as InferSchema<Schema>)
213
211
  }
214
212
  },
215
213
  { deep: true },
package/src/index.ts CHANGED
@@ -128,7 +128,7 @@ export function createForm(options: FormPluginOptions): Plugin & Partial<ReturnT
128
128
  const formInstances: Map<string, ReturnType<typeof _formType>> = new Map()
129
129
  export function useForm<Schema extends FormSchema, Type>(schema: Schema, options: FormComposableOptions<Schema, Type> = {}): ReturnType <typeof _formType<Schema, Type>> {
130
130
  if (options.scope && formInstances.has(options.scope)) {
131
- return formInstances.get(options.scope)
131
+ return formInstances.get(options.scope)!
132
132
  }
133
133
  if (!getCurrentInstance()) {
134
134
  const toReturn = _formType(schema, options)
@@ -151,13 +151,13 @@ export function useForm<Schema extends FormSchema, Type>(schema: Schema, options
151
151
  }
152
152
 
153
153
  export { FormFieldType } from './enums'
154
- export { defaultObjectBySchema } from './utils'
154
+ export { defaultObjectByJSONSchema, defaultObjectBySchema } from './utils'
155
155
 
156
156
  type FormComponent = ReturnType<typeof defineForm>
157
157
  type FormWrapperComponent = ReturnType<typeof defineFormWrapper>
158
158
  type FormFieldComponent = ReturnType<typeof defineFormField>
159
159
  type FormFieldsGroupComponent = ReturnType<typeof defineFormFieldsGroup>
160
- type FormTemplateComponent = ReturnType<typeof defineFormFieldsGroup>
160
+ type FormTemplateComponent = ReturnType<typeof defineFormTemplate>
161
161
 
162
162
  export type {
163
163
  FormComponent,
package/src/shims.d.ts CHANGED
@@ -1 +1,9 @@
1
+ declare module '@volverjs/style'
1
2
  declare module '@volverjs/style/*'
3
+
4
+ declare module '*.vue' {
5
+ import type { DefineComponent } from 'vue'
6
+
7
+ const component: DefineComponent<Record<string, unknown>, Record<string, unknown>, any>
8
+ export default component
9
+ }
package/src/utils.ts CHANGED
@@ -319,178 +319,141 @@ export const isZod4Schema = (schema: z3.ZodTypeAny | z4.$ZodType): schema is z4.
319
319
  return false
320
320
  }
321
321
 
322
- export function defaultObjectBySchema<Schema extends FormSchema>(schema: Schema, original: Partial<InferSchema<Schema>> & Record<string, unknown> = {}): Partial<InferSchema<Schema>> {
323
- // zod v4
324
- if (isZod4Schema(schema)) {
325
- const innerType = getZod4SchemaInnerType(schema)
326
- if (!isZod4Object(innerType)) {
327
- return original
328
- }
329
- const unknownKeys = innerType._zod.def.catchall && innerType._zod.def.catchall._zod.def.type !== 'never'
330
-
331
- return {
332
- ...(unknownKeys ? original : {}),
333
- ...Object.fromEntries(
334
- ('shape' in innerType._zod.def ? Object.entries(innerType._zod.def.shape) as [string, z4.$ZodType][] : []).map(
335
- ([key, subSchema]) => {
336
- const originalValue = original[key]
337
- const isOptional = isZod4SchemaOptional(subSchema)
338
- let innerType = getZod4SchemaInnerType(subSchema)
339
- let defaultValue: Partial<InferSchema<Schema>> | undefined
340
- if (isZod4Default(innerType)) {
341
- defaultValue = innerType._zod.def.defaultValue
342
- innerType = innerType._zod.def.innerType
343
- }
344
- if (
345
- originalValue === null
346
- && isZod4Nullable(innerType)
347
- ) {
348
- return [key, originalValue]
349
- }
350
- if ((originalValue === undefined || originalValue === null) && isOptional) {
351
- return [key, defaultValue]
352
- }
353
- if (innerType && originalValue !== undefined) {
354
- const parse = z4SafeParse(subSchema, originalValue)
355
- if (parse.success) {
356
- return [key, parse.data ?? defaultValue]
357
- }
358
- }
359
- if (
360
- isZod4Array(innerType)
361
- && Array.isArray(originalValue)
362
- ) {
363
- const arrayType = getZod4SchemaInnerType(innerType._zod.def.element)
364
- if (isZod4Object(arrayType)) {
365
- return [
366
- key,
367
- originalValue.map((element: unknown) =>
368
- defaultObjectBySchema(
369
- arrayType,
370
- (element && typeof element === 'object'
371
- ? element
372
- : undefined) as Partial<
373
- typeof arrayType
374
- >,
375
- ),
376
- ),
377
- ]
378
- }
379
- return [key, originalValue]
380
- }
381
- if (isZod4Record(innerType) && originalValue) {
382
- const valueType = getZod4SchemaInnerType(innerType._zod.def.valueType)
383
- if (isZod4Object(valueType)) {
384
- return [key, Object.keys(originalValue).reduce((acc: Record<string, unknown>, recordKey: string) => {
385
- acc[recordKey] = defaultObjectBySchema(valueType, originalValue[recordKey])
386
- return acc
387
- }, {})]
388
- }
389
- return [key, originalValue]
390
- }
391
- if (isZod4Object(innerType)) {
392
- return [
393
- key,
394
- defaultObjectBySchema(
395
- innerType,
396
- originalValue
397
- && typeof originalValue === 'object'
398
- ? originalValue
399
- : defaultValue,
400
- ),
401
- ]
402
- }
403
- return [key, defaultValue]
404
- },
405
- ),
406
- ),
407
- } as Partial<InferSchema<Schema>>
322
+ /**
323
+ * Adapter that abstracts the version-specific Zod internals (zod v3 vs v4) so
324
+ * that the `defaultObjectBySchema` algorithm can be written once.
325
+ */
326
+ interface ZodAdapter {
327
+ getInnerType: (schema: any) => any
328
+ isObject: (schema: any) => boolean
329
+ hasUnknownKeys: (objectSchema: any) => boolean
330
+ getShapeEntries: (objectSchema: any) => [string, any][]
331
+ isOptional: (schema: any) => boolean
332
+ isDefault: (schema: any) => boolean
333
+ getDefaultValue: (schema: any) => unknown
334
+ getDefaultInnerType: (schema: any) => any
335
+ isNullable: (schema: any) => boolean
336
+ safeParse: (schema: any, value: unknown) => { success: boolean, data?: unknown }
337
+ isArray: (schema: any) => boolean
338
+ getArrayElement: (schema: any) => any
339
+ isRecord: (schema: any) => boolean
340
+ getRecordValue: (schema: any) => any
341
+ }
342
+
343
+ const zod3Adapter: ZodAdapter = {
344
+ getInnerType: getZod3SchemaInnerType,
345
+ isObject: isZod3Object,
346
+ hasUnknownKeys: schema => schema._def.unknownKeys === 'passthrough',
347
+ getShapeEntries: schema => ('shape' in schema ? Object.entries(schema.shape) : []),
348
+ isOptional: isZod3SchemaOptional,
349
+ isDefault: isZod3Default,
350
+ getDefaultValue: schema => schema._def.defaultValue(),
351
+ getDefaultInnerType: schema => schema._def.innerType,
352
+ isNullable: isZod3Nullable,
353
+ safeParse: (schema, value) => schema.safeParse(value),
354
+ isArray: isZod3Array,
355
+ getArrayElement: schema => schema._def.type,
356
+ isRecord: isZod3Record,
357
+ getRecordValue: schema => schema._def.valueType,
358
+ }
359
+
360
+ const zod4Adapter: ZodAdapter = {
361
+ getInnerType: getZod4SchemaInnerType,
362
+ isObject: isZod4Object,
363
+ hasUnknownKeys: schema => Boolean(schema._zod.def.catchall && schema._zod.def.catchall._zod.def.type !== 'never'),
364
+ getShapeEntries: schema => ('shape' in schema._zod.def ? Object.entries(schema._zod.def.shape) : []),
365
+ isOptional: isZod4SchemaOptional,
366
+ isDefault: isZod4Default,
367
+ getDefaultValue: schema => schema._zod.def.defaultValue,
368
+ getDefaultInnerType: schema => schema._zod.def.innerType,
369
+ isNullable: isZod4Nullable,
370
+ safeParse: (schema, value) => z4SafeParse(schema, value),
371
+ isArray: isZod4Array,
372
+ getArrayElement: schema => schema._zod.def.element,
373
+ isRecord: isZod4Record,
374
+ getRecordValue: schema => schema._zod.def.valueType,
375
+ }
376
+
377
+ // Resolves the default value for an array shape entry, recursing into object elements.
378
+ function _resolveArrayValue(adapter: ZodAdapter, innerType: any, originalValue: unknown[]): unknown {
379
+ const arrayType = adapter.getInnerType(adapter.getArrayElement(innerType))
380
+ if (adapter.isObject(arrayType)) {
381
+ return originalValue.map(element => _defaultObjectFromShape(adapter, arrayType, element))
408
382
  }
383
+ return originalValue
384
+ }
409
385
 
410
- // zod v3
411
- const innerType = getZod3SchemaInnerType(schema)
386
+ // Resolves the default value for a record shape entry, recursing into object values.
387
+ function _resolveRecordValue(adapter: ZodAdapter, innerType: any, originalValue: object): unknown {
388
+ const valueType = adapter.getInnerType(adapter.getRecordValue(innerType))
389
+ if (!adapter.isObject(valueType)) {
390
+ return originalValue
391
+ }
392
+ return Object.keys(originalValue).reduce<Record<string, unknown>>((acc, recordKey) => {
393
+ acc[recordKey] = _defaultObjectFromShape(adapter, valueType, (originalValue as Record<string, unknown>)[recordKey])
394
+ return acc
395
+ }, {})
396
+ }
412
397
 
413
- if (!isZod3Object(innerType)) {
414
- return original
398
+ // Resolves the default value for a single shape entry of a Zod object schema.
399
+ function _resolveShapeEntry(adapter: ZodAdapter, key: string, subSchema: any, originalValue: unknown): [string, unknown] {
400
+ const isOptional = adapter.isOptional(subSchema)
401
+ let innerType = adapter.getInnerType(subSchema)
402
+ let defaultValue: unknown
403
+ if (adapter.isDefault(innerType)) {
404
+ defaultValue = adapter.getDefaultValue(innerType)
405
+ innerType = adapter.getDefaultInnerType(innerType)
406
+ }
407
+ if (originalValue === null && adapter.isNullable(innerType)) {
408
+ return [key, originalValue]
409
+ }
410
+ if ((originalValue === undefined || originalValue === null) && isOptional) {
411
+ return [key, defaultValue]
412
+ }
413
+ if (innerType && originalValue !== undefined) {
414
+ const parse = adapter.safeParse(subSchema, originalValue)
415
+ if (parse.success) {
416
+ return [key, parse.data ?? defaultValue]
417
+ }
415
418
  }
416
- const unknownKeys = innerType._def.unknownKeys === 'passthrough'
419
+ if (adapter.isArray(innerType) && Array.isArray(originalValue)) {
420
+ return [key, _resolveArrayValue(adapter, innerType, originalValue)]
421
+ }
422
+ if (adapter.isRecord(innerType) && originalValue) {
423
+ return [key, _resolveRecordValue(adapter, innerType, originalValue as object)]
424
+ }
425
+ if (adapter.isObject(innerType)) {
426
+ return [key, _defaultObjectFromShape(
427
+ adapter,
428
+ innerType,
429
+ originalValue && typeof originalValue === 'object' ? originalValue : defaultValue,
430
+ )]
431
+ }
432
+ return [key, defaultValue]
433
+ }
434
+
435
+ // Builds the default object for an (already unwrapped) Zod object schema.
436
+ function _defaultObjectFromShape(adapter: ZodAdapter, objectSchema: any, original: unknown): Record<string, unknown> {
437
+ const safeOriginal = (original && typeof original === 'object' && !Array.isArray(original))
438
+ ? original as Record<string, unknown>
439
+ : {}
417
440
  return {
418
- ...(unknownKeys ? original : {}),
441
+ ...(adapter.hasUnknownKeys(objectSchema) ? safeOriginal : {}),
419
442
  ...Object.fromEntries(
420
- ('shape' in innerType ? Object.entries(innerType.shape) as [string, z3.ZodTypeAny][] : []).map(
421
- ([key, subSchema]) => {
422
- const originalValue = original[key]
423
- const isOptional = isZod3SchemaOptional(subSchema)
424
- let innerType = getZod3SchemaInnerType(subSchema)
425
- let defaultValue: Partial<InferSchema<Schema>> | undefined
426
- if (isZod3Default(innerType)) {
427
- defaultValue = innerType._def.defaultValue()
428
- innerType = innerType._def.innerType
429
- }
430
- if (
431
- originalValue === null
432
- && isZod3Nullable(innerType)
433
- ) {
434
- return [key, originalValue]
435
- }
436
- if ((originalValue === undefined || originalValue === null) && isOptional) {
437
- return [key, defaultValue]
438
- }
439
- if (innerType && originalValue !== undefined) {
440
- const parse = subSchema.safeParse(originalValue)
441
- if (parse.success) {
442
- return [key, parse.data ?? defaultValue]
443
- }
444
- }
445
- if (
446
- isZod3Array(innerType)
447
- && Array.isArray(originalValue)
448
- ) {
449
- const arrayType = getZod3SchemaInnerType(innerType._def.type)
450
- if (isZod3Object(arrayType)) {
451
- return [
452
- key,
453
- originalValue.map((element: unknown) =>
454
- defaultObjectBySchema(
455
- arrayType,
456
- (element && typeof element === 'object'
457
- ? element
458
- : undefined) as Partial<
459
- typeof arrayType
460
- >,
461
- ),
462
- ),
463
- ]
464
- }
465
- return [key, originalValue]
466
- }
467
- if (isZod3Record(innerType) && originalValue) {
468
- const valueType = getZod3SchemaInnerType(innerType._def.valueType)
469
- if (isZod3Object(valueType)) {
470
- return [key, Object.keys(originalValue).reduce((acc: Record<string, unknown>, recordKey: string) => {
471
- acc[recordKey] = defaultObjectBySchema(valueType, originalValue[recordKey])
472
- return acc
473
- }, {})]
474
- }
475
- return [key, originalValue]
476
- }
477
- if (isZod3Object(innerType)) {
478
- return [
479
- key,
480
- defaultObjectBySchema(
481
- innerType,
482
- originalValue
483
- && typeof originalValue === 'object'
484
- ? originalValue
485
- : defaultValue,
486
- ),
487
- ]
488
- }
489
- return [key, defaultValue]
490
- },
443
+ adapter.getShapeEntries(objectSchema).map(([key, subSchema]) =>
444
+ _resolveShapeEntry(adapter, key, subSchema, safeOriginal[key]),
491
445
  ),
492
446
  ),
493
- } as Partial<InferSchema<Schema>>
447
+ }
448
+ }
449
+
450
+ export function defaultObjectBySchema<Schema extends FormSchema>(schema: Schema, original: Partial<InferSchema<Schema>> & Record<string, unknown> = {}): Partial<InferSchema<Schema>> {
451
+ const adapter = isZod4Schema(schema) ? zod4Adapter : zod3Adapter
452
+ const innerType = adapter.getInnerType(schema)
453
+ if (!adapter.isObject(innerType)) {
454
+ return original
455
+ }
456
+ return _defaultObjectFromShape(adapter, innerType, original) as Partial<InferSchema<Schema>>
494
457
  }
495
458
 
496
459
  export const safeParseAsync = <T extends FormSchema>(schema: T, data: any) => {
package/dist/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from './src/index'
2
- export {}