@volverjs/form-vue 1.0.0 → 1.0.1
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/VvFormFieldsGroup.d.ts +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.es.js +47 -46
- package/dist/index.umd.js +1 -1
- package/package.json +6 -6
- package/src/VvFormFieldsGroup.ts +2 -1
|
@@ -33,12 +33,12 @@ export declare function defineFormFieldsGroup<Schema extends FormSchema, Type =
|
|
|
33
33
|
}>[];
|
|
34
34
|
}>;
|
|
35
35
|
hasProps: import('vue').ComputedRef<{
|
|
36
|
+
modelValue: Record<string, any>;
|
|
36
37
|
names: {};
|
|
37
38
|
invalid: boolean;
|
|
38
39
|
invalids: Record<string, boolean>;
|
|
39
40
|
valid: boolean | undefined;
|
|
40
41
|
invalidLabels: Record<string, string[]> | undefined;
|
|
41
|
-
modelValue: Record<string, any>;
|
|
42
42
|
readonly: boolean;
|
|
43
43
|
}>;
|
|
44
44
|
invalid: import('vue').ComputedRef<boolean>;
|
package/dist/index.d.ts
CHANGED
|
@@ -298,12 +298,12 @@ declare function _formType<Schema extends FormSchema, Type>(schema: Schema, opti
|
|
|
298
298
|
}>[];
|
|
299
299
|
}>;
|
|
300
300
|
hasProps: import('vue').ComputedRef<{
|
|
301
|
+
modelValue: Record<string, any>;
|
|
301
302
|
names: {};
|
|
302
303
|
invalid: boolean;
|
|
303
304
|
invalids: Record<string, boolean>;
|
|
304
305
|
valid: boolean | undefined;
|
|
305
306
|
invalidLabels: Record<string, string[]> | undefined;
|
|
306
|
-
modelValue: Record<string, any>;
|
|
307
307
|
readonly: boolean;
|
|
308
308
|
}>;
|
|
309
309
|
invalid: import('vue').ComputedRef<boolean>;
|
|
@@ -788,12 +788,12 @@ export declare function formType<Schema extends FormSchema, Type>(schema: Schema
|
|
|
788
788
|
}>[];
|
|
789
789
|
}>;
|
|
790
790
|
hasProps: import('vue').ComputedRef<{
|
|
791
|
+
modelValue: Record<string, any>;
|
|
791
792
|
names: {};
|
|
792
793
|
invalid: boolean;
|
|
793
794
|
invalids: Record<string, boolean>;
|
|
794
795
|
valid: boolean | undefined;
|
|
795
796
|
invalidLabels: Record<string, string[]> | undefined;
|
|
796
|
-
modelValue: Record<string, any>;
|
|
797
797
|
readonly: boolean;
|
|
798
798
|
}>;
|
|
799
799
|
invalid: import('vue').ComputedRef<boolean>;
|
package/dist/index.es.js
CHANGED
|
@@ -87,7 +87,7 @@ function je(e, i, a, v, n) {
|
|
|
87
87
|
l.value = void 0, u.value = void 0, d = void 0;
|
|
88
88
|
}, y = () => {
|
|
89
89
|
r.value = c(), j(), u.value = x.reset;
|
|
90
|
-
}, f = async (D) => p.value || !await m(void 0, D) ? !1 : (u.value = x.submitting, !0), { ignoreUpdates:
|
|
90
|
+
}, f = async (D) => p.value || !await m(void 0, D) ? !1 : (u.value = x.submitting, !0), { ignoreUpdates: h, stop: g } = pe(
|
|
91
91
|
r,
|
|
92
92
|
() => {
|
|
93
93
|
u.value = x.updated;
|
|
@@ -208,7 +208,7 @@ function je(e, i, a, v, n) {
|
|
|
208
208
|
clear: j,
|
|
209
209
|
errors: I,
|
|
210
210
|
formData: r,
|
|
211
|
-
ignoreUpdates:
|
|
211
|
+
ignoreUpdates: h,
|
|
212
212
|
invalid: o,
|
|
213
213
|
readonly: p,
|
|
214
214
|
reset: y,
|
|
@@ -221,7 +221,7 @@ function je(e, i, a, v, n) {
|
|
|
221
221
|
clear: j,
|
|
222
222
|
errors: I,
|
|
223
223
|
formData: r,
|
|
224
|
-
ignoreUpdates:
|
|
224
|
+
ignoreUpdates: h,
|
|
225
225
|
invalid: o,
|
|
226
226
|
isReadonly: p,
|
|
227
227
|
reset: y,
|
|
@@ -244,7 +244,7 @@ function je(e, i, a, v, n) {
|
|
|
244
244
|
status: R.value,
|
|
245
245
|
wrappers: n,
|
|
246
246
|
clear: j,
|
|
247
|
-
ignoreUpdates:
|
|
247
|
+
ignoreUpdates: h,
|
|
248
248
|
reset: y,
|
|
249
249
|
stopUpdatesWatch: g,
|
|
250
250
|
submit: f,
|
|
@@ -276,7 +276,7 @@ function je(e, i, a, v, n) {
|
|
|
276
276
|
clear: j,
|
|
277
277
|
errors: l,
|
|
278
278
|
formData: r,
|
|
279
|
-
ignoreUpdates:
|
|
279
|
+
ignoreUpdates: h,
|
|
280
280
|
invalid: o,
|
|
281
281
|
readonly: p,
|
|
282
282
|
reset: y,
|
|
@@ -435,7 +435,7 @@ function xe(e, i, a, v) {
|
|
|
435
435
|
const j = O(() => {
|
|
436
436
|
if (c?.errors.value)
|
|
437
437
|
return N(c.errors.value, String(n.name));
|
|
438
|
-
}), y = O(() => j.value?._errors), f = O(() => j.value !== void 0),
|
|
438
|
+
}), y = O(() => j.value?._errors), f = O(() => j.value !== void 0), h = A(f, (t) => {
|
|
439
439
|
if (t) {
|
|
440
440
|
u("invalid", j.value), d && d.errors.value.set(
|
|
441
441
|
String(n.name),
|
|
@@ -454,7 +454,7 @@ function xe(e, i, a, v) {
|
|
|
454
454
|
{ deep: !0 }
|
|
455
455
|
);
|
|
456
456
|
P(() => {
|
|
457
|
-
|
|
457
|
+
h(), g();
|
|
458
458
|
});
|
|
459
459
|
const I = (t) => {
|
|
460
460
|
t instanceof InputEvent && (t = t.target.value), m.value = t;
|
|
@@ -617,34 +617,34 @@ function Ie(e, i, a) {
|
|
|
617
617
|
],
|
|
618
618
|
slots: Object,
|
|
619
619
|
setup(v, { slots: n, emit: l }) {
|
|
620
|
-
const { props: u, names: o, defaultValues: r } = Q(v), p = oe(), d = O(() => Array.isArray(o.value) ? o.value : Object.values(o.value)), c = O(() => Array.isArray(o.value) ? o.value : Object.keys(o.value)), m = O(() => Array.isArray(o.value) ? o.value.reduce((s,
|
|
620
|
+
const { props: u, names: o, defaultValues: r } = Q(v), p = oe(), d = O(() => Array.isArray(o.value) ? o.value : Object.values(o.value)), c = O(() => Array.isArray(o.value) ? o.value : Object.keys(o.value)), m = O(() => Array.isArray(o.value) ? o.value.reduce((s, b) => (s[String(b)] = b, s), {}) : o.value), j = O(() => Object.keys(m.value).reduce((s, b) => (s[String(m.value[b])] = b, s), {})), y = U(i, void 0);
|
|
621
621
|
y && d.value.forEach((s) => {
|
|
622
622
|
y.fields.value.set(`${p}-${s}`, s);
|
|
623
623
|
});
|
|
624
|
-
const f = U(e),
|
|
624
|
+
const f = U(e), h = O({
|
|
625
625
|
get() {
|
|
626
|
-
return f?.formData ? c.value.reduce((s,
|
|
626
|
+
return f?.formData ? c.value.reduce((s, b) => (s[b] = N(
|
|
627
627
|
new Object(f.formData.value),
|
|
628
|
-
m.value[
|
|
628
|
+
m.value[b]
|
|
629
629
|
), s), {}) : {};
|
|
630
630
|
},
|
|
631
631
|
set(s) {
|
|
632
|
-
f?.formData && (c.value.forEach((
|
|
632
|
+
f?.formData && (c.value.forEach((b) => {
|
|
633
633
|
X(
|
|
634
634
|
new Object(f.formData.value),
|
|
635
|
-
m.value[
|
|
636
|
-
s?.[
|
|
635
|
+
m.value[b],
|
|
636
|
+
s?.[b]
|
|
637
637
|
);
|
|
638
638
|
}), l("update:modelValue", {
|
|
639
|
-
newValue:
|
|
639
|
+
newValue: h.value,
|
|
640
640
|
formData: f?.formData
|
|
641
641
|
}));
|
|
642
642
|
}
|
|
643
643
|
});
|
|
644
644
|
q(() => {
|
|
645
645
|
r.value && d.value.forEach((s) => {
|
|
646
|
-
r.value?.[s] !== void 0 &&
|
|
647
|
-
...
|
|
646
|
+
r.value?.[s] !== void 0 && h.value[s] === void 0 && (h.value = {
|
|
647
|
+
...h.value,
|
|
648
648
|
[s]: r.value?.[s]
|
|
649
649
|
});
|
|
650
650
|
});
|
|
@@ -658,21 +658,21 @@ function Ie(e, i, a) {
|
|
|
658
658
|
const g = O(() => {
|
|
659
659
|
if (!f?.errors.value)
|
|
660
660
|
return;
|
|
661
|
-
const s = d.value.reduce((
|
|
661
|
+
const s = d.value.reduce((b, E) => {
|
|
662
662
|
if (!f.errors.value)
|
|
663
|
-
return
|
|
663
|
+
return b;
|
|
664
664
|
const ee = N(f.errors.value, String(E));
|
|
665
|
-
return ee === void 0 || (
|
|
665
|
+
return ee === void 0 || (b[String(E)] = ee), b;
|
|
666
666
|
}, {});
|
|
667
667
|
if (Object.keys(s).length !== 0)
|
|
668
668
|
return s;
|
|
669
669
|
}), I = O(() => {
|
|
670
670
|
if (!g.value)
|
|
671
671
|
return;
|
|
672
|
-
const s = Object.keys(g.value).reduce((
|
|
672
|
+
const s = Object.keys(g.value).reduce((b, E) => (g.value?.[E] && (b[j.value[E]] = g.value[E]._errors), b), {});
|
|
673
673
|
if (Object.keys(s).length !== 0)
|
|
674
674
|
return s;
|
|
675
|
-
}), R = O(() => g.value !== void 0), k = O(() => c.value.reduce((s,
|
|
675
|
+
}), R = O(() => g.value !== void 0), k = O(() => c.value.reduce((s, b) => (s[b] = !!g.value?.[j.value[b]], s), {})), D = A(R, () => {
|
|
676
676
|
if (R.value) {
|
|
677
677
|
l("invalid", g.value), y && d.value.forEach((s) => {
|
|
678
678
|
if (!g.value?.[s]) {
|
|
@@ -688,7 +688,7 @@ function Ie(e, i, a) {
|
|
|
688
688
|
});
|
|
689
689
|
return;
|
|
690
690
|
}
|
|
691
|
-
l("valid",
|
|
691
|
+
l("valid", h.value), y && d.value.forEach((s) => {
|
|
692
692
|
y.errors.value.delete(
|
|
693
693
|
s
|
|
694
694
|
);
|
|
@@ -704,31 +704,32 @@ function Ie(e, i, a) {
|
|
|
704
704
|
D(), S();
|
|
705
705
|
});
|
|
706
706
|
const t = (s) => {
|
|
707
|
-
|
|
708
|
-
}, V = (s,
|
|
709
|
-
|
|
710
|
-
...
|
|
711
|
-
[s]:
|
|
707
|
+
h.value = s;
|
|
708
|
+
}, V = (s, b) => {
|
|
709
|
+
b instanceof InputEvent && (b = b.target.value), c.value.includes(s) && (h.value = {
|
|
710
|
+
...h.value,
|
|
711
|
+
[s]: b
|
|
712
712
|
});
|
|
713
713
|
}, $ = O(() => {
|
|
714
714
|
let s = u.value;
|
|
715
715
|
return typeof s == "function" && (s = s(f?.formData)), Object.keys(s).reduce(
|
|
716
|
-
(
|
|
716
|
+
(b, E) => (b[E] = _(s[E]), b),
|
|
717
717
|
{}
|
|
718
718
|
);
|
|
719
|
-
}), Y = O(() => f?.readonly.value ? !0 : $.value.readonly ?? v.readonly), de = O(() => c.value.reduce((s,
|
|
720
|
-
V(
|
|
719
|
+
}), Y = O(() => f?.readonly.value ? !0 : $.value.readonly ?? v.readonly), de = O(() => c.value.reduce((s, b) => (s[`onUpdate:${b}`] = (E) => {
|
|
720
|
+
V(b, E);
|
|
721
721
|
}, s), {
|
|
722
722
|
"onUpdate:modelValue": t
|
|
723
723
|
})), fe = O(() => ({
|
|
724
724
|
...de.value,
|
|
725
725
|
...$.value,
|
|
726
|
+
...h.value,
|
|
727
|
+
modelValue: h.value,
|
|
726
728
|
names: $.value.name ?? d.value,
|
|
727
729
|
invalid: R.value,
|
|
728
730
|
invalids: k.value,
|
|
729
|
-
valid: v.showValid ? !!(!R.value &&
|
|
731
|
+
valid: v.showValid ? !!(!R.value && h.value) : void 0,
|
|
730
732
|
invalidLabels: I.value,
|
|
731
|
-
modelValue: b.value,
|
|
732
733
|
readonly: Y.value
|
|
733
734
|
}));
|
|
734
735
|
return T(a, {
|
|
@@ -743,7 +744,7 @@ function Ie(e, i, a) {
|
|
|
743
744
|
invalid: R.value,
|
|
744
745
|
invalids: k.value,
|
|
745
746
|
invalidLabels: I.value,
|
|
746
|
-
modelValue:
|
|
747
|
+
modelValue: h.value,
|
|
747
748
|
onUpdate: t,
|
|
748
749
|
onUpdateField: V,
|
|
749
750
|
readonly: Y.value,
|
|
@@ -812,10 +813,10 @@ function Fe(e, i) {
|
|
|
812
813
|
A(
|
|
813
814
|
m,
|
|
814
815
|
(y, f) => {
|
|
815
|
-
l?.fields && (f.forEach((
|
|
816
|
+
l?.fields && (f.forEach((h, g) => {
|
|
816
817
|
y.has(g) || l?.fields.value.delete(g);
|
|
817
|
-
}), y.forEach((
|
|
818
|
-
l?.fields.value.has(g) || l?.fields.value.set(g,
|
|
818
|
+
}), y.forEach((h, g) => {
|
|
819
|
+
l?.fields.value.has(g) || l?.fields.value.set(g, h);
|
|
819
820
|
}));
|
|
820
821
|
},
|
|
821
822
|
{ deep: !0 }
|
|
@@ -824,8 +825,8 @@ function Fe(e, i) {
|
|
|
824
825
|
(y) => {
|
|
825
826
|
l?.errors && u.value.forEach((f) => {
|
|
826
827
|
if (y.has(f) || l.errors.value.delete(f), y.has(f)) {
|
|
827
|
-
const
|
|
828
|
-
|
|
828
|
+
const h = y.get(f);
|
|
829
|
+
h && l.errors.value.set(f, h);
|
|
829
830
|
}
|
|
830
831
|
});
|
|
831
832
|
},
|
|
@@ -906,7 +907,7 @@ function ke(e, i) {
|
|
|
906
907
|
vvName: j,
|
|
907
908
|
vvSlots: y,
|
|
908
909
|
vvChildren: f,
|
|
909
|
-
vvIf:
|
|
910
|
+
vvIf: h,
|
|
910
911
|
vvElseIf: g,
|
|
911
912
|
vvType: I,
|
|
912
913
|
vvDefaultValue: R,
|
|
@@ -914,11 +915,11 @@ function ke(e, i) {
|
|
|
914
915
|
vvContent: D,
|
|
915
916
|
...S
|
|
916
917
|
} = c;
|
|
917
|
-
if (
|
|
918
|
-
if (typeof
|
|
918
|
+
if (h !== void 0) {
|
|
919
|
+
if (typeof h == "string" ? o = !!N(
|
|
919
920
|
new Object(l.formData.value),
|
|
920
|
-
|
|
921
|
-
) : typeof
|
|
921
|
+
h
|
|
922
|
+
) : typeof h == "function" ? o = _(h(l)) : o = _(h), !o)
|
|
922
923
|
return p;
|
|
923
924
|
} else if (g !== void 0 && o !== void 0) {
|
|
924
925
|
if (o || (typeof g == "string" ? o = !!N(
|
|
@@ -993,7 +994,7 @@ function J(e, i = {}) {
|
|
|
993
994
|
formData: j,
|
|
994
995
|
ignoreUpdates: y,
|
|
995
996
|
invalid: f,
|
|
996
|
-
readonly:
|
|
997
|
+
readonly: h,
|
|
997
998
|
reset: g,
|
|
998
999
|
status: I,
|
|
999
1000
|
stopUpdatesWatch: R,
|
|
@@ -1010,7 +1011,7 @@ function J(e, i = {}) {
|
|
|
1010
1011
|
formWrapperInjectionKey: v,
|
|
1011
1012
|
ignoreUpdates: y,
|
|
1012
1013
|
invalid: f,
|
|
1013
|
-
readonly:
|
|
1014
|
+
readonly: h,
|
|
1014
1015
|
reset: g,
|
|
1015
1016
|
status: I,
|
|
1016
1017
|
stopUpdatesWatch: R,
|
package/dist/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(I,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@vueuse/core"),require("zod")):typeof define=="function"&&define.amd?define(["exports","vue","@vueuse/core","zod"],e):(I=typeof globalThis<"u"?globalThis:I||self,e(I["@volverjs/form-vue"]={},I.Vue,I.VueUseCore,I.zod))})(this,function(I,e,Z,F){"use strict";var w=(t=>(t.text="text",t.number="number",t.email="email",t.password="password",t.tel="tel",t.url="url",t.search="search",t.date="date",t.time="time",t.datetimeLocal="datetime-local",t.month="month",t.week="week",t.color="color",t.select="select",t.checkbox="checkbox",t.radio="radio",t.textarea="textarea",t.radioGroup="radioGroup",t.checkboxGroup="checkboxGroup",t.combobox="combobox",t.custom="custom",t))(w||{}),x=(t=>(t.invalid="invalid",t.valid="valid",t.submitting="submitting",t.reset="reset",t.updated="updated",t.unknown="unknown",t))(x||{});function U(t,u={}){const n=s=>{let l=s;for(;l instanceof F.ZodEffects;)l=l.innerType();return l instanceof F.ZodOptional&&(l=l._def.innerType),l},v=s=>{let l=s;for(;l instanceof F.ZodEffects;)l=l.innerType();return l instanceof F.ZodOptional},o=n(t);return{...(o instanceof F.ZodObject?o._def.unknownKeys==="passthrough":!1)?u:{},...Object.fromEntries(Object.entries(o.shape).map(([s,l])=>{const a=u[s],y=v(l);let f=n(l),m;if(f instanceof F.ZodDefault&&(m=f._def.defaultValue(),f=f._def.innerType),a===null&&f instanceof F.ZodNullable)return[s,a];if(a==null&&y)return[s,m];if(f instanceof F.ZodSchema){const p=l.safeParse(a);if(p.success)return[s,p.data??m]}if(f instanceof F.ZodArray&&Array.isArray(a)&&a.length){const p=n(f._def.type);if(p instanceof F.ZodObject)return[s,a.map(O=>U(p,O&&typeof O=="object"?O:void 0))]}if(f instanceof F.ZodRecord&&a){const p=n(f._def.valueType);if(p instanceof F.ZodObject)return[s,Object.keys(a).reduce((O,h)=>(O[h]=U(p,a[h]),O),{})]}return f instanceof F.ZodObject?[s,U(f,a&&typeof a=="object"?a:m)]:[s,m]}))}}function H(t,u,n,v,o){const i=e.ref(),s=e.ref(),l=e.computed(()=>s.value===x.invalid),a=e.ref(),y=e.ref(!1);let f;const m=D=>{const R=U(t,D);if(n?.class){const r=n.class;return new r(R)}return R},p=async(D=a.value,R)=>{if(f=R?.fields,y.value)return!0;const r=R?.superRefine?await t.superRefine(R.superRefine).safeParseAsync(D):await t.safeParseAsync(D);if(!r.success){if(s.value=x.invalid,!f?.size)return i.value=r.error.format(),!1;const j=r.error.issues.filter(A=>f?.has(A.path.join(".")));return j.length?(i.value=new F.ZodError(j).format(),!1):(i.value=void 0,!0)}return i.value=void 0,s.value=x.valid,a.value=m(r.data),!0},O=()=>{i.value=void 0,s.value=void 0,f=void 0},h=()=>{a.value=m(),O(),s.value=x.reset},c=async D=>y.value||!await p(void 0,D)?!1:(s.value=x.submitting,!0),{ignoreUpdates:V,stop:g}=Z.watchIgnorable(a,()=>{s.value=x.updated},{deep:!0,eventFilter:Z.throttleFilter(n?.updateThrottle??500)}),E=e.readonly(i),S=e.readonly(s),k=e.defineComponent({name:"VvForm",props:{continuousValidation:{type:Boolean,default:!1},modelValue:{type:Object,default:()=>({})},readonly:{type:Boolean,default:n?.readonly??!1},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(D,{emit:R}){return a.value=m(e.toRaw(D.modelValue)),e.watch(()=>D.modelValue,r=>{if(r){const j=e.isProxy(r)?e.toRaw(r):r;if(JSON.stringify(j)===JSON.stringify(e.toRaw(a.value)))return;a.value=typeof j?.clone=="function"?j.clone():JSON.parse(JSON.stringify(j))}},{deep:!0}),e.watch(s,async r=>{if(r===x.invalid){const j=e.toRaw(i.value);R("invalid",j),n?.onInvalid?.(j);return}if(r===x.valid){const j=e.toRaw(a.value);R("valid",j),n?.onValid?.(j),R("update:modelValue",j),n?.onUpdate?.(j);return}if(r===x.submitting){const j=e.toRaw(a.value);R("submit",j),n?.onSubmit?.(j);return}if(r===x.reset){const j=e.toRaw(a.value);R("reset",j),n?.onReset?.(j);return}if(r===x.updated){if((i.value||n?.continuousValidation||D.continuousValidation)&&await p(void 0,{superRefine:D.superRefine,fields:f??new Set(D.validateFields)}),!a.value||!D.modelValue||JSON.stringify(a.value)!==JSON.stringify(D.modelValue)){const j=e.toRaw(a.value);R("update:modelValue",j),n?.onUpdate?.(j)}s.value===x.updated&&(s.value=x.unknown)}}),e.onMounted(()=>{y.value=D.readonly}),e.watch(()=>D.readonly,r=>{y.value=r}),e.watch(y,r=>{r!==D.readonly&&R("update:readonly",y.value)}),e.provide(u,{clear:O,errors:E,formData:a,ignoreUpdates:V,invalid:l,readonly:y,reset:h,status:S,stopUpdatesWatch:g,submit:c,validate:p,wrappers:o}),{clear:O,errors:E,formData:a,ignoreUpdates:V,invalid:l,isReadonly:y,reset:h,status:S,stopUpdatesWatch:g,submit:()=>c({superRefine:D.superRefine,fields:new Set(D.validateFields)}),validate:p,wrappers:o}},render(){const D=()=>this.$slots?.default?.({errors:E.value,formData:a.value,invalid:l.value,readonly:y.value,status:S.value,wrappers:o,clear:O,ignoreUpdates:V,reset:h,stopUpdatesWatch:g,submit:c,validate:p})??this.$slots.default;return e.h(this.tag,{onSubmit:e.withModifiers(this.submit,["prevent"]),onReset:e.withModifiers(this.reset,["prevent"])},(this.template??n?.template)&&v?[e.h(v,{schema:this.template??n?.template},{default:D})]:{default:D})}});return{clear:O,errors:i,formData:a,ignoreUpdates:V,invalid:l,readonly:y,reset:h,status:s,wrappers:o,stopUpdatesWatch:g,submit:c,validate:p,VvForm:k}}function L(t){return Array.isArray(t)}function Q(t){return!1}function _(t){return t===null}function N(t){return typeof t=="object"}function K(t){return typeof t=="string"}function G(t){return typeof t>"u"}const X=/^[0-9]+$/,Y=["__proto__","prototype","constructor"];function B(t,u,n){const v=Q()?n:void 0;if(!N(t)||!K(u))return v;const o=T(u);if(o.length!==0){for(const i of o){if(i==="*")continue;const s=function(l){return l.map(a=>G(a)||_(a)?a:L(a)?s(a):a[i])};if(L(t)&&!X.test(i)?t=s(t):t=t[i],G(t)||_(t))break}return G(t)?v:t}}function M(t,u,n){if(!N(t)||!K(u))return;const v=T(u);if(v.length===0)return;const o=v.length;for(let i=0;i<o;i++){const s=v[i];if(i===o-1){t[s]=n;return}if(s==="*"&&L(t)){const l=v.slice(i+1).join(".");for(const a of t)M(a,l,n);return}G(t[s])&&(t[s]={}),t=t[s]}}function T(t){const u=t.split(/[.]|(?:\[(\d|\*)\])/).filter(n=>!!n);return u.some(n=>Y.indexOf(n)!==-1)?[]:u}function z(t,u,n,v){return e.defineComponent({name:"VvFormField",props:{type:{type:String,validator:o=>Object.values(w).includes(o),default:w.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(o,{slots:i,emit:s}){const{props:l,name:a}=e.toRefs(o),y=e.useId(),f=e.inject(u,void 0);f&&f.fields.value.set(y,o.name);const m=e.inject(t),p=e.computed({get(){if(m?.formData)return B(new Object(m.formData.value),String(o.name))},set(r){m?.formData&&(M(new Object(m.formData.value),String(o.name),r),s("update:modelValue",{newValue:p.value,formData:m?.formData}))}});e.onMounted(()=>{p.value===void 0&&o.defaultValue!==void 0&&(p.value=o.defaultValue)}),e.onBeforeUnmount(()=>{f&&f.fields.value.delete(y)});const O=e.computed(()=>{if(m?.errors.value)return B(m.errors.value,String(o.name))}),h=e.computed(()=>O.value?._errors),c=e.computed(()=>O.value!==void 0),V=e.watch(c,r=>{if(r){s("invalid",O.value),f&&f.errors.value.set(String(o.name),O.value);return}s("valid",p.value),f&&f.errors.value.delete(o.name)}),g=e.watch(()=>m?.formData,()=>{s("update:formData",m?.formData)},{deep:!0});e.onBeforeUnmount(()=>{V(),g()});const E=r=>{r instanceof InputEvent&&(r=r.target.value),p.value=r},S=e.computed(()=>{let r=l.value;return typeof r=="function"&&(r=r(m?.formData)),Object.keys(r).reduce((j,A)=>(j[A]=e.unref(r[A]),j),{})}),k=e.computed(()=>m?.readonly.value||f?.readonly.value?!0:S.value.readonly??o.readonly),D=e.computed(()=>({...S.value,name:S.value.name??o.name,invalid:c.value,valid:o.showValid?!!(!c.value&&p.value):void 0,type:(r=>{if([w.color,w.date,w.datetimeLocal,w.email,w.month,w.number,w.password,w.search,w.tel,w.text,w.time,w.url,w.week].includes(r))return r})(o.type),invalidLabel:h.value,modelValue:p.value,readonly:k.value,"onUpdate:modelValue":E}));return e.provide(n,{name:e.readonly(a),errors:e.readonly(O)}),{component:e.computed(()=>{if(o.type===w.custom)return{render(){return i.default?.({errors:O.value,formData:m?.formData.value,formErrors:m?.errors.value,invalid:c.value,invalidLabel:h.value,modelValue:p.value,readonly:k.value,onUpdate:E,submit:m?.submit,validate:m?.validate})??i.default}};if(!(v?.lazyLoad??o.lazyLoad)){let r;switch(o.type){case w.select:r=e.resolveComponent("VvSelect");break;case w.checkbox:r=e.resolveComponent("VvCheckbox");break;case w.radio:r=e.resolveComponent("VvRadio");break;case w.textarea:r=e.resolveComponent("VvTextarea");break;case w.radioGroup:r=e.resolveComponent("VvRadioGroup");break;case w.checkboxGroup:r=e.resolveComponent("VvCheckboxGroup");break;case w.combobox:r=e.resolveComponent("VvCombobox");break;default:r=e.resolveComponent("VvInputText")}if(typeof r!="string")return r;console.warn(`[@volverjs/form-vue]: ${r} not found, the component will be loaded asynchronously. To avoid this warning, please set "lazyLoad" option.`)}return e.defineAsyncComponent(async()=>{switch(v?.sideEffects&&await Promise.resolve(v.sideEffects(o.type)),o.type){case w.textarea:return import("@volverjs/ui-vue/vv-textarea");case w.radio:return import("@volverjs/ui-vue/vv-radio");case w.radioGroup:return import("@volverjs/ui-vue/vv-radio-group");case w.checkbox:return import("@volverjs/ui-vue/vv-checkbox");case w.checkboxGroup:return import("@volverjs/ui-vue/vv-checkbox-group");case w.select:return import("@volverjs/ui-vue/vv-select");case w.combobox:return import("@volverjs/ui-vue/vv-combobox")}return import("@volverjs/ui-vue/vv-input-text")})}),hasProps:D,invalid:c}},render(){return this.is?e.h(this.is,this.hasProps,this.$slots):this.type===w.custom?e.h(this.component,null,this.$slots):e.h(this.component,this.hasProps,this.$slots)}})}function ee(t,u,n){return e.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(v,{slots:o,emit:i}){const{props:s,names:l,defaultValues:a}=e.toRefs(v),y=e.useId(),f=e.computed(()=>Array.isArray(l.value)?l.value:Object.values(l.value)),m=e.computed(()=>Array.isArray(l.value)?l.value:Object.keys(l.value)),p=e.computed(()=>Array.isArray(l.value)?l.value.reduce((d,b)=>(d[String(b)]=b,d),{}):l.value),O=e.computed(()=>Object.keys(p.value).reduce((d,b)=>(d[String(p.value[b])]=b,d),{})),h=e.inject(u,void 0);h&&f.value.forEach(d=>{h.fields.value.set(`${y}-${d}`,d)});const c=e.inject(t),V=e.computed({get(){return c?.formData?m.value.reduce((d,b)=>(d[b]=B(new Object(c.formData.value),p.value[b]),d),{}):{}},set(d){c?.formData&&(m.value.forEach(b=>{M(new Object(c.formData.value),p.value[b],d?.[b])}),i("update:modelValue",{newValue:V.value,formData:c?.formData}))}});e.onMounted(()=>{a.value&&f.value.forEach(d=>{a.value?.[d]!==void 0&&V.value[d]===void 0&&(V.value={...V.value,[d]:a.value?.[d]})})}),e.onBeforeUnmount(()=>{h&&f.value.forEach(d=>{h.fields.value.delete(`${y}-${d}`)})});const g=e.computed(()=>{if(!c?.errors.value)return;const d=f.value.reduce((b,C)=>{if(!c.errors.value)return b;const J=B(c.errors.value,String(C));return J===void 0||(b[String(C)]=J),b},{});if(Object.keys(d).length!==0)return d}),E=e.computed(()=>{if(!g.value)return;const d=Object.keys(g.value).reduce((b,C)=>(g.value?.[C]&&(b[O.value[C]]=g.value[C]._errors),b),{});if(Object.keys(d).length!==0)return d}),S=e.computed(()=>g.value!==void 0),k=e.computed(()=>m.value.reduce((d,b)=>(d[b]=!!g.value?.[O.value[b]],d),{})),D=e.watch(S,()=>{if(S.value){i("invalid",g.value),h&&f.value.forEach(d=>{if(!g.value?.[d]){h.errors.value.delete(d);return}h.errors.value.set(d,g.value?.[d])});return}i("valid",V.value),h&&f.value.forEach(d=>{h.errors.value.delete(d)})}),R=e.watch(()=>c?.formData,()=>{i("update:formData",c?.formData)},{deep:!0});e.onBeforeUnmount(()=>{D(),R()});const r=d=>{V.value=d},j=(d,b)=>{b instanceof InputEvent&&(b=b.target.value),m.value.includes(d)&&(V.value={...V.value,[d]:b})},A=e.computed(()=>{let d=s.value;return typeof d=="function"&&(d=d(c?.formData)),Object.keys(d).reduce((b,C)=>(b[C]=e.unref(d[C]),b),{})}),q=e.computed(()=>c?.readonly.value?!0:A.value.readonly??v.readonly),le=e.computed(()=>m.value.reduce((d,b)=>(d[`onUpdate:${b}`]=C=>{j(b,C)},d),{"onUpdate:modelValue":r})),ie=e.computed(()=>({...le.value,...A.value,names:A.value.name??f.value,invalid:S.value,invalids:k.value,valid:v.showValid?!!(!S.value&&V.value):void 0,invalidLabels:E.value,modelValue:V.value,readonly:q.value}));return e.provide(n,{names:e.readonly(l),errors:e.readonly(g)}),{component:e.computed(()=>({render(){return o.default?.({errors:g.value,formData:c?.formData.value,formErrors:c?.errors.value,invalid:S.value,invalids:k.value,invalidLabels:E.value,modelValue:V.value,onUpdate:r,onUpdateField:j,readonly:q.value,submit:c?.submit,validate:c?.validate})??o.default}})),hasProps:ie,invalid:S}},render(){return this.is?e.h(this.is,this.hasProps,this.$slots):e.h(this.component,null,this.$slots)}})}function te(t,u){return e.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(n,{emit:v}){const o=e.inject(t),i=e.inject(u,void 0),s=e.ref(new Map),l=e.ref(new Map),{name:a}=e.toRefs(n),y=e.computed(()=>o?.invalid.value?l.value.size>0:!1);e.watch(y,h=>{if(h){v("invalid");return}v("valid")});const f=e.computed(()=>o?.readonly.value||n.readonly),m={name:e.readonly(a),errors:l,invalid:e.readonly(y),readonly:e.readonly(f),fields:s};e.provide(u,m);const p=e.computed(()=>new Map(s.value));e.watch(p,(h,c)=>{i?.fields&&(c.forEach((V,g)=>{h.has(g)||i?.fields.value.delete(g)}),h.forEach((V,g)=>{i?.fields.value.has(g)||i?.fields.value.set(g,V)}))},{deep:!0}),e.watch(l,h=>{i?.errors&&s.value.forEach(c=>{if(h.has(c)||i.errors.value.delete(c),h.has(c)){const V=h.get(c);V&&i.errors.value.set(c,V)}})},{deep:!0}),e.onMounted(()=>{if(!o?.wrappers||!a.value){console.warn("[@volverjs/form-vue]: Invalid wrapper registration state");return}if(o.wrappers.has(a.value)){console.warn(`[@volverjs/form-vue]: wrapper name "${a.value}" is already used`);return}o.wrappers.set(a.value,m)}),e.onBeforeUnmount(()=>{o?.wrappers&&a.value&&o.wrappers.delete(a.value)});const O=()=>o?.validate(void 0,{fields:new Set(s.value.values())})??Promise.resolve(!0);return{errors:o?.errors,fields:s,fieldsErrors:l,formData:o?.formData,invalid:y,readonly:f,clear:o?.clear,reset:o?.reset,submit:o?.submit,validate:o?.validate,validateWrapper:O}},render(){const n=()=>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?e.h(this.tag,null,{default:n}):n()}})}function re(t,u){const n=e.defineComponent({name:"VvFormTemplate",props:{schema:{type:[Array,Function],required:!0},scope:{type:Object,default:()=>({})}},slots:Object,setup(v,{slots:o}){const i=e.inject(t);if(i?.formData)return()=>{const s=typeof v.schema=="function"?v.schema(i,v.scope):v.schema;let l;const a=s.reduce((y,f)=>{const m=typeof f=="function"?f(i,v.scope):f,{vvIs:p,vvName:O,vvSlots:h,vvChildren:c,vvIf:V,vvElseIf:g,vvType:E,vvDefaultValue:S,vvShowValid:k,vvContent:D,...R}=m;if(V!==void 0){if(typeof V=="string"?l=!!B(new Object(i.formData.value),V):typeof V=="function"?l=e.unref(V(i)):l=e.unref(V),!l)return y}else if(g!==void 0&&l!==void 0){if(l||(typeof g=="string"?l=!!B(new Object(i.formData.value),g):typeof g=="function"?l=e.unref(g(i)):l=e.unref(g),!l))return y}else l=void 0;let r;return c&&(typeof p=="string"?r=e.h(n,{schema:c}):r={default:j=>e.h(n,{schema:c,scope:j})}),O?(y.push(e.h(u,{name:O,is:p,type:E,defaultValue:S,showValid:k,props:R},h??r??D)),y):p?(y.push(e.h(p,R,h??r??D)),y):(r&&("default"in r?y.push(r.default(v.scope)):y.push(r)),y)},[]);return a.push(o?.default?.({errors:i?.errors.value,formData:i?.formData.value,invalid:i?.invalid.value,status:i?.status.value,submit:i?.submit,validate:i?.validate,clear:i?.clear,reset:i?.reset})),a}}});return n}function W(t,u={}){const n=Symbol("formInjectionKey"),v=Symbol("formWrapperInjectionKey"),o=Symbol("formFieldInjectionKey"),i=Symbol("formFieldsGroupInjectionKey"),s=te(n,v),l=z(n,v,o,u),a=ee(n,v,i),y=re(n,l),f=new Map,{clear:m,errors:p,formData:O,ignoreUpdates:h,invalid:c,readonly:V,reset:g,status:E,stopUpdatesWatch:S,submit:k,validate:D,VvForm:R}=H(t,n,u,y,f);return{clear:m,errors:p,formData:O,formFieldInjectionKey:o,formInjectionKey:n,formWrapperInjectionKey:v,ignoreUpdates:h,invalid:c,readonly:V,reset:g,status:E,stopUpdatesWatch:S,submit:k,validate:D,wrappers:f,VvForm:R,VvFormField:l,VvFormFieldsGroup:a,VvFormTemplate:y,VvFormWrapper:s}}const P=Symbol("pluginInjectionKey");function ae(t){let u={};return t.schema&&(u=W(t.schema,t)),{...u,install(n,{global:v=!1}={}){n.provide(P,t),v&&(n.config.globalProperties.$vvForm=t,u?.VvForm&&n.component("VvForm",u.VvForm),u?.VvFormWrapper&&n.component("VvFormWrapper",u.VvFormWrapper),u?.VvFormField&&n.component("VvFormField",u.VvFormField),u?.VvFormFieldsGroup&&n.component("VvFormFieldsGroup",u.VvFormFieldsGroup),u?.VvFormTemplate&&n.component("VvFormTemplate",u.VvFormTemplate))}}}const $=new Map;function ne(t,u={}){if(u.scope&&$.has(u.scope))return $.get(u.scope);if(!e.getCurrentInstance()){const v=W(t,u);return u.scope&&$.set(u.scope,v),v}const n=W(t,{...e.inject(P,{}),...u});return u.scope&&$.set(u.scope,n),n}function oe(t,u={}){return W(t,u)}I.FormFieldType=w,I.createForm=ae,I.defaultObjectBySchema=U,I.formType=oe,I.pluginInjectionKey=P,I.useForm=ne,Object.defineProperty(I,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(I,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@vueuse/core"),require("zod")):typeof define=="function"&&define.amd?define(["exports","vue","@vueuse/core","zod"],e):(I=typeof globalThis<"u"?globalThis:I||self,e(I["@volverjs/form-vue"]={},I.Vue,I.VueUseCore,I.zod))})(this,function(I,e,Z,F){"use strict";var V=(t=>(t.text="text",t.number="number",t.email="email",t.password="password",t.tel="tel",t.url="url",t.search="search",t.date="date",t.time="time",t.datetimeLocal="datetime-local",t.month="month",t.week="week",t.color="color",t.select="select",t.checkbox="checkbox",t.radio="radio",t.textarea="textarea",t.radioGroup="radioGroup",t.checkboxGroup="checkboxGroup",t.combobox="combobox",t.custom="custom",t))(V||{}),x=(t=>(t.invalid="invalid",t.valid="valid",t.submitting="submitting",t.reset="reset",t.updated="updated",t.unknown="unknown",t))(x||{});function U(t,u={}){const n=s=>{let l=s;for(;l instanceof F.ZodEffects;)l=l.innerType();return l instanceof F.ZodOptional&&(l=l._def.innerType),l},v=s=>{let l=s;for(;l instanceof F.ZodEffects;)l=l.innerType();return l instanceof F.ZodOptional},o=n(t);return{...(o instanceof F.ZodObject?o._def.unknownKeys==="passthrough":!1)?u:{},...Object.fromEntries(Object.entries(o.shape).map(([s,l])=>{const a=u[s],y=v(l);let f=n(l),m;if(f instanceof F.ZodDefault&&(m=f._def.defaultValue(),f=f._def.innerType),a===null&&f instanceof F.ZodNullable)return[s,a];if(a==null&&y)return[s,m];if(f instanceof F.ZodSchema){const p=l.safeParse(a);if(p.success)return[s,p.data??m]}if(f instanceof F.ZodArray&&Array.isArray(a)&&a.length){const p=n(f._def.type);if(p instanceof F.ZodObject)return[s,a.map(O=>U(p,O&&typeof O=="object"?O:void 0))]}if(f instanceof F.ZodRecord&&a){const p=n(f._def.valueType);if(p instanceof F.ZodObject)return[s,Object.keys(a).reduce((O,h)=>(O[h]=U(p,a[h]),O),{})]}return f instanceof F.ZodObject?[s,U(f,a&&typeof a=="object"?a:m)]:[s,m]}))}}function H(t,u,n,v,o){const i=e.ref(),s=e.ref(),l=e.computed(()=>s.value===x.invalid),a=e.ref(),y=e.ref(!1);let f;const m=D=>{const R=U(t,D);if(n?.class){const r=n.class;return new r(R)}return R},p=async(D=a.value,R)=>{if(f=R?.fields,y.value)return!0;const r=R?.superRefine?await t.superRefine(R.superRefine).safeParseAsync(D):await t.safeParseAsync(D);if(!r.success){if(s.value=x.invalid,!f?.size)return i.value=r.error.format(),!1;const j=r.error.issues.filter(A=>f?.has(A.path.join(".")));return j.length?(i.value=new F.ZodError(j).format(),!1):(i.value=void 0,!0)}return i.value=void 0,s.value=x.valid,a.value=m(r.data),!0},O=()=>{i.value=void 0,s.value=void 0,f=void 0},h=()=>{a.value=m(),O(),s.value=x.reset},c=async D=>y.value||!await p(void 0,D)?!1:(s.value=x.submitting,!0),{ignoreUpdates:b,stop:g}=Z.watchIgnorable(a,()=>{s.value=x.updated},{deep:!0,eventFilter:Z.throttleFilter(n?.updateThrottle??500)}),E=e.readonly(i),S=e.readonly(s),k=e.defineComponent({name:"VvForm",props:{continuousValidation:{type:Boolean,default:!1},modelValue:{type:Object,default:()=>({})},readonly:{type:Boolean,default:n?.readonly??!1},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(D,{emit:R}){return a.value=m(e.toRaw(D.modelValue)),e.watch(()=>D.modelValue,r=>{if(r){const j=e.isProxy(r)?e.toRaw(r):r;if(JSON.stringify(j)===JSON.stringify(e.toRaw(a.value)))return;a.value=typeof j?.clone=="function"?j.clone():JSON.parse(JSON.stringify(j))}},{deep:!0}),e.watch(s,async r=>{if(r===x.invalid){const j=e.toRaw(i.value);R("invalid",j),n?.onInvalid?.(j);return}if(r===x.valid){const j=e.toRaw(a.value);R("valid",j),n?.onValid?.(j),R("update:modelValue",j),n?.onUpdate?.(j);return}if(r===x.submitting){const j=e.toRaw(a.value);R("submit",j),n?.onSubmit?.(j);return}if(r===x.reset){const j=e.toRaw(a.value);R("reset",j),n?.onReset?.(j);return}if(r===x.updated){if((i.value||n?.continuousValidation||D.continuousValidation)&&await p(void 0,{superRefine:D.superRefine,fields:f??new Set(D.validateFields)}),!a.value||!D.modelValue||JSON.stringify(a.value)!==JSON.stringify(D.modelValue)){const j=e.toRaw(a.value);R("update:modelValue",j),n?.onUpdate?.(j)}s.value===x.updated&&(s.value=x.unknown)}}),e.onMounted(()=>{y.value=D.readonly}),e.watch(()=>D.readonly,r=>{y.value=r}),e.watch(y,r=>{r!==D.readonly&&R("update:readonly",y.value)}),e.provide(u,{clear:O,errors:E,formData:a,ignoreUpdates:b,invalid:l,readonly:y,reset:h,status:S,stopUpdatesWatch:g,submit:c,validate:p,wrappers:o}),{clear:O,errors:E,formData:a,ignoreUpdates:b,invalid:l,isReadonly:y,reset:h,status:S,stopUpdatesWatch:g,submit:()=>c({superRefine:D.superRefine,fields:new Set(D.validateFields)}),validate:p,wrappers:o}},render(){const D=()=>this.$slots?.default?.({errors:E.value,formData:a.value,invalid:l.value,readonly:y.value,status:S.value,wrappers:o,clear:O,ignoreUpdates:b,reset:h,stopUpdatesWatch:g,submit:c,validate:p})??this.$slots.default;return e.h(this.tag,{onSubmit:e.withModifiers(this.submit,["prevent"]),onReset:e.withModifiers(this.reset,["prevent"])},(this.template??n?.template)&&v?[e.h(v,{schema:this.template??n?.template},{default:D})]:{default:D})}});return{clear:O,errors:i,formData:a,ignoreUpdates:b,invalid:l,readonly:y,reset:h,status:s,wrappers:o,stopUpdatesWatch:g,submit:c,validate:p,VvForm:k}}function L(t){return Array.isArray(t)}function Q(t){return!1}function _(t){return t===null}function N(t){return typeof t=="object"}function K(t){return typeof t=="string"}function G(t){return typeof t>"u"}const X=/^[0-9]+$/,Y=["__proto__","prototype","constructor"];function B(t,u,n){const v=Q()?n:void 0;if(!N(t)||!K(u))return v;const o=T(u);if(o.length!==0){for(const i of o){if(i==="*")continue;const s=function(l){return l.map(a=>G(a)||_(a)?a:L(a)?s(a):a[i])};if(L(t)&&!X.test(i)?t=s(t):t=t[i],G(t)||_(t))break}return G(t)?v:t}}function M(t,u,n){if(!N(t)||!K(u))return;const v=T(u);if(v.length===0)return;const o=v.length;for(let i=0;i<o;i++){const s=v[i];if(i===o-1){t[s]=n;return}if(s==="*"&&L(t)){const l=v.slice(i+1).join(".");for(const a of t)M(a,l,n);return}G(t[s])&&(t[s]={}),t=t[s]}}function T(t){const u=t.split(/[.]|(?:\[(\d|\*)\])/).filter(n=>!!n);return u.some(n=>Y.indexOf(n)!==-1)?[]:u}function z(t,u,n,v){return e.defineComponent({name:"VvFormField",props:{type:{type:String,validator:o=>Object.values(V).includes(o),default:V.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(o,{slots:i,emit:s}){const{props:l,name:a}=e.toRefs(o),y=e.useId(),f=e.inject(u,void 0);f&&f.fields.value.set(y,o.name);const m=e.inject(t),p=e.computed({get(){if(m?.formData)return B(new Object(m.formData.value),String(o.name))},set(r){m?.formData&&(M(new Object(m.formData.value),String(o.name),r),s("update:modelValue",{newValue:p.value,formData:m?.formData}))}});e.onMounted(()=>{p.value===void 0&&o.defaultValue!==void 0&&(p.value=o.defaultValue)}),e.onBeforeUnmount(()=>{f&&f.fields.value.delete(y)});const O=e.computed(()=>{if(m?.errors.value)return B(m.errors.value,String(o.name))}),h=e.computed(()=>O.value?._errors),c=e.computed(()=>O.value!==void 0),b=e.watch(c,r=>{if(r){s("invalid",O.value),f&&f.errors.value.set(String(o.name),O.value);return}s("valid",p.value),f&&f.errors.value.delete(o.name)}),g=e.watch(()=>m?.formData,()=>{s("update:formData",m?.formData)},{deep:!0});e.onBeforeUnmount(()=>{b(),g()});const E=r=>{r instanceof InputEvent&&(r=r.target.value),p.value=r},S=e.computed(()=>{let r=l.value;return typeof r=="function"&&(r=r(m?.formData)),Object.keys(r).reduce((j,A)=>(j[A]=e.unref(r[A]),j),{})}),k=e.computed(()=>m?.readonly.value||f?.readonly.value?!0:S.value.readonly??o.readonly),D=e.computed(()=>({...S.value,name:S.value.name??o.name,invalid:c.value,valid:o.showValid?!!(!c.value&&p.value):void 0,type:(r=>{if([V.color,V.date,V.datetimeLocal,V.email,V.month,V.number,V.password,V.search,V.tel,V.text,V.time,V.url,V.week].includes(r))return r})(o.type),invalidLabel:h.value,modelValue:p.value,readonly:k.value,"onUpdate:modelValue":E}));return e.provide(n,{name:e.readonly(a),errors:e.readonly(O)}),{component:e.computed(()=>{if(o.type===V.custom)return{render(){return i.default?.({errors:O.value,formData:m?.formData.value,formErrors:m?.errors.value,invalid:c.value,invalidLabel:h.value,modelValue:p.value,readonly:k.value,onUpdate:E,submit:m?.submit,validate:m?.validate})??i.default}};if(!(v?.lazyLoad??o.lazyLoad)){let r;switch(o.type){case V.select:r=e.resolveComponent("VvSelect");break;case V.checkbox:r=e.resolveComponent("VvCheckbox");break;case V.radio:r=e.resolveComponent("VvRadio");break;case V.textarea:r=e.resolveComponent("VvTextarea");break;case V.radioGroup:r=e.resolveComponent("VvRadioGroup");break;case V.checkboxGroup:r=e.resolveComponent("VvCheckboxGroup");break;case V.combobox:r=e.resolveComponent("VvCombobox");break;default:r=e.resolveComponent("VvInputText")}if(typeof r!="string")return r;console.warn(`[@volverjs/form-vue]: ${r} not found, the component will be loaded asynchronously. To avoid this warning, please set "lazyLoad" option.`)}return e.defineAsyncComponent(async()=>{switch(v?.sideEffects&&await Promise.resolve(v.sideEffects(o.type)),o.type){case V.textarea:return import("@volverjs/ui-vue/vv-textarea");case V.radio:return import("@volverjs/ui-vue/vv-radio");case V.radioGroup:return import("@volverjs/ui-vue/vv-radio-group");case V.checkbox:return import("@volverjs/ui-vue/vv-checkbox");case V.checkboxGroup:return import("@volverjs/ui-vue/vv-checkbox-group");case V.select:return import("@volverjs/ui-vue/vv-select");case V.combobox:return import("@volverjs/ui-vue/vv-combobox")}return import("@volverjs/ui-vue/vv-input-text")})}),hasProps:D,invalid:c}},render(){return this.is?e.h(this.is,this.hasProps,this.$slots):this.type===V.custom?e.h(this.component,null,this.$slots):e.h(this.component,this.hasProps,this.$slots)}})}function ee(t,u,n){return e.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(v,{slots:o,emit:i}){const{props:s,names:l,defaultValues:a}=e.toRefs(v),y=e.useId(),f=e.computed(()=>Array.isArray(l.value)?l.value:Object.values(l.value)),m=e.computed(()=>Array.isArray(l.value)?l.value:Object.keys(l.value)),p=e.computed(()=>Array.isArray(l.value)?l.value.reduce((d,w)=>(d[String(w)]=w,d),{}):l.value),O=e.computed(()=>Object.keys(p.value).reduce((d,w)=>(d[String(p.value[w])]=w,d),{})),h=e.inject(u,void 0);h&&f.value.forEach(d=>{h.fields.value.set(`${y}-${d}`,d)});const c=e.inject(t),b=e.computed({get(){return c?.formData?m.value.reduce((d,w)=>(d[w]=B(new Object(c.formData.value),p.value[w]),d),{}):{}},set(d){c?.formData&&(m.value.forEach(w=>{M(new Object(c.formData.value),p.value[w],d?.[w])}),i("update:modelValue",{newValue:b.value,formData:c?.formData}))}});e.onMounted(()=>{a.value&&f.value.forEach(d=>{a.value?.[d]!==void 0&&b.value[d]===void 0&&(b.value={...b.value,[d]:a.value?.[d]})})}),e.onBeforeUnmount(()=>{h&&f.value.forEach(d=>{h.fields.value.delete(`${y}-${d}`)})});const g=e.computed(()=>{if(!c?.errors.value)return;const d=f.value.reduce((w,C)=>{if(!c.errors.value)return w;const J=B(c.errors.value,String(C));return J===void 0||(w[String(C)]=J),w},{});if(Object.keys(d).length!==0)return d}),E=e.computed(()=>{if(!g.value)return;const d=Object.keys(g.value).reduce((w,C)=>(g.value?.[C]&&(w[O.value[C]]=g.value[C]._errors),w),{});if(Object.keys(d).length!==0)return d}),S=e.computed(()=>g.value!==void 0),k=e.computed(()=>m.value.reduce((d,w)=>(d[w]=!!g.value?.[O.value[w]],d),{})),D=e.watch(S,()=>{if(S.value){i("invalid",g.value),h&&f.value.forEach(d=>{if(!g.value?.[d]){h.errors.value.delete(d);return}h.errors.value.set(d,g.value?.[d])});return}i("valid",b.value),h&&f.value.forEach(d=>{h.errors.value.delete(d)})}),R=e.watch(()=>c?.formData,()=>{i("update:formData",c?.formData)},{deep:!0});e.onBeforeUnmount(()=>{D(),R()});const r=d=>{b.value=d},j=(d,w)=>{w instanceof InputEvent&&(w=w.target.value),m.value.includes(d)&&(b.value={...b.value,[d]:w})},A=e.computed(()=>{let d=s.value;return typeof d=="function"&&(d=d(c?.formData)),Object.keys(d).reduce((w,C)=>(w[C]=e.unref(d[C]),w),{})}),q=e.computed(()=>c?.readonly.value?!0:A.value.readonly??v.readonly),le=e.computed(()=>m.value.reduce((d,w)=>(d[`onUpdate:${w}`]=C=>{j(w,C)},d),{"onUpdate:modelValue":r})),ie=e.computed(()=>({...le.value,...A.value,...b.value,modelValue:b.value,names:A.value.name??f.value,invalid:S.value,invalids:k.value,valid:v.showValid?!!(!S.value&&b.value):void 0,invalidLabels:E.value,readonly:q.value}));return e.provide(n,{names:e.readonly(l),errors:e.readonly(g)}),{component:e.computed(()=>({render(){return o.default?.({errors:g.value,formData:c?.formData.value,formErrors:c?.errors.value,invalid:S.value,invalids:k.value,invalidLabels:E.value,modelValue:b.value,onUpdate:r,onUpdateField:j,readonly:q.value,submit:c?.submit,validate:c?.validate})??o.default}})),hasProps:ie,invalid:S}},render(){return this.is?e.h(this.is,this.hasProps,this.$slots):e.h(this.component,null,this.$slots)}})}function te(t,u){return e.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(n,{emit:v}){const o=e.inject(t),i=e.inject(u,void 0),s=e.ref(new Map),l=e.ref(new Map),{name:a}=e.toRefs(n),y=e.computed(()=>o?.invalid.value?l.value.size>0:!1);e.watch(y,h=>{if(h){v("invalid");return}v("valid")});const f=e.computed(()=>o?.readonly.value||n.readonly),m={name:e.readonly(a),errors:l,invalid:e.readonly(y),readonly:e.readonly(f),fields:s};e.provide(u,m);const p=e.computed(()=>new Map(s.value));e.watch(p,(h,c)=>{i?.fields&&(c.forEach((b,g)=>{h.has(g)||i?.fields.value.delete(g)}),h.forEach((b,g)=>{i?.fields.value.has(g)||i?.fields.value.set(g,b)}))},{deep:!0}),e.watch(l,h=>{i?.errors&&s.value.forEach(c=>{if(h.has(c)||i.errors.value.delete(c),h.has(c)){const b=h.get(c);b&&i.errors.value.set(c,b)}})},{deep:!0}),e.onMounted(()=>{if(!o?.wrappers||!a.value){console.warn("[@volverjs/form-vue]: Invalid wrapper registration state");return}if(o.wrappers.has(a.value)){console.warn(`[@volverjs/form-vue]: wrapper name "${a.value}" is already used`);return}o.wrappers.set(a.value,m)}),e.onBeforeUnmount(()=>{o?.wrappers&&a.value&&o.wrappers.delete(a.value)});const O=()=>o?.validate(void 0,{fields:new Set(s.value.values())})??Promise.resolve(!0);return{errors:o?.errors,fields:s,fieldsErrors:l,formData:o?.formData,invalid:y,readonly:f,clear:o?.clear,reset:o?.reset,submit:o?.submit,validate:o?.validate,validateWrapper:O}},render(){const n=()=>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?e.h(this.tag,null,{default:n}):n()}})}function re(t,u){const n=e.defineComponent({name:"VvFormTemplate",props:{schema:{type:[Array,Function],required:!0},scope:{type:Object,default:()=>({})}},slots:Object,setup(v,{slots:o}){const i=e.inject(t);if(i?.formData)return()=>{const s=typeof v.schema=="function"?v.schema(i,v.scope):v.schema;let l;const a=s.reduce((y,f)=>{const m=typeof f=="function"?f(i,v.scope):f,{vvIs:p,vvName:O,vvSlots:h,vvChildren:c,vvIf:b,vvElseIf:g,vvType:E,vvDefaultValue:S,vvShowValid:k,vvContent:D,...R}=m;if(b!==void 0){if(typeof b=="string"?l=!!B(new Object(i.formData.value),b):typeof b=="function"?l=e.unref(b(i)):l=e.unref(b),!l)return y}else if(g!==void 0&&l!==void 0){if(l||(typeof g=="string"?l=!!B(new Object(i.formData.value),g):typeof g=="function"?l=e.unref(g(i)):l=e.unref(g),!l))return y}else l=void 0;let r;return c&&(typeof p=="string"?r=e.h(n,{schema:c}):r={default:j=>e.h(n,{schema:c,scope:j})}),O?(y.push(e.h(u,{name:O,is:p,type:E,defaultValue:S,showValid:k,props:R},h??r??D)),y):p?(y.push(e.h(p,R,h??r??D)),y):(r&&("default"in r?y.push(r.default(v.scope)):y.push(r)),y)},[]);return a.push(o?.default?.({errors:i?.errors.value,formData:i?.formData.value,invalid:i?.invalid.value,status:i?.status.value,submit:i?.submit,validate:i?.validate,clear:i?.clear,reset:i?.reset})),a}}});return n}function W(t,u={}){const n=Symbol("formInjectionKey"),v=Symbol("formWrapperInjectionKey"),o=Symbol("formFieldInjectionKey"),i=Symbol("formFieldsGroupInjectionKey"),s=te(n,v),l=z(n,v,o,u),a=ee(n,v,i),y=re(n,l),f=new Map,{clear:m,errors:p,formData:O,ignoreUpdates:h,invalid:c,readonly:b,reset:g,status:E,stopUpdatesWatch:S,submit:k,validate:D,VvForm:R}=H(t,n,u,y,f);return{clear:m,errors:p,formData:O,formFieldInjectionKey:o,formInjectionKey:n,formWrapperInjectionKey:v,ignoreUpdates:h,invalid:c,readonly:b,reset:g,status:E,stopUpdatesWatch:S,submit:k,validate:D,wrappers:f,VvForm:R,VvFormField:l,VvFormFieldsGroup:a,VvFormTemplate:y,VvFormWrapper:s}}const P=Symbol("pluginInjectionKey");function ae(t){let u={};return t.schema&&(u=W(t.schema,t)),{...u,install(n,{global:v=!1}={}){n.provide(P,t),v&&(n.config.globalProperties.$vvForm=t,u?.VvForm&&n.component("VvForm",u.VvForm),u?.VvFormWrapper&&n.component("VvFormWrapper",u.VvFormWrapper),u?.VvFormField&&n.component("VvFormField",u.VvFormField),u?.VvFormFieldsGroup&&n.component("VvFormFieldsGroup",u.VvFormFieldsGroup),u?.VvFormTemplate&&n.component("VvFormTemplate",u.VvFormTemplate))}}}const $=new Map;function ne(t,u={}){if(u.scope&&$.has(u.scope))return $.get(u.scope);if(!e.getCurrentInstance()){const v=W(t,u);return u.scope&&$.set(u.scope,v),v}const n=W(t,{...e.inject(P,{}),...u});return u.scope&&$.set(u.scope,n),n}function oe(t,u={}){return W(t,u)}I.FormFieldType=V,I.createForm=ae,I.defaultObjectBySchema=U,I.formType=oe,I.pluginInjectionKey=P,I.useForm=ne,Object.defineProperty(I,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volverjs/form-vue",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.1",
|
|
5
5
|
"description": "Vue 3 Forms with @volverjs/ui-vue",
|
|
6
6
|
"author": "8 Wave S.r.l.",
|
|
7
7
|
"license": "MIT",
|
|
@@ -57,15 +57,15 @@
|
|
|
57
57
|
"zod": "^3.24.x"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@antfu/eslint-config": "^
|
|
60
|
+
"@antfu/eslint-config": "^5.0.0",
|
|
61
61
|
"@nabla/vite-plugin-eslint": "^2.0.5",
|
|
62
62
|
"@playwright/experimental-ct-vue": "^1.54.1",
|
|
63
63
|
"@testing-library/vue": "^8.1.0",
|
|
64
64
|
"@vitejs/plugin-vue": "^6.0.0",
|
|
65
65
|
"@volverjs/style": "^0.1.20",
|
|
66
66
|
"@volverjs/ui-vue": "^0.0.9",
|
|
67
|
-
"@vue/compiler-sfc": "^3.5.
|
|
68
|
-
"@vue/runtime-core": "^3.5.
|
|
67
|
+
"@vue/compiler-sfc": "^3.5.18",
|
|
68
|
+
"@vue/runtime-core": "^3.5.18",
|
|
69
69
|
"@vue/test-utils": "^2.4.6",
|
|
70
70
|
"@vueuse/core": "^13.5.0",
|
|
71
71
|
"copy": "^0.3.2",
|
|
@@ -73,11 +73,11 @@
|
|
|
73
73
|
"happy-dom": "^18.0.1",
|
|
74
74
|
"ts-dot-prop": "^2.1.4",
|
|
75
75
|
"typescript": "^5.8.3",
|
|
76
|
-
"vite": "^7.0.
|
|
76
|
+
"vite": "^7.0.6",
|
|
77
77
|
"vite-plugin-dts": "^4.5.4",
|
|
78
78
|
"vite-plugin-externalize-deps": "^0.9.0",
|
|
79
79
|
"vitest": "^3.2.4",
|
|
80
|
-
"vue": "^3.5.
|
|
80
|
+
"vue": "^3.5.18",
|
|
81
81
|
"zod": "^3.24.4"
|
|
82
82
|
},
|
|
83
83
|
"scripts": {
|
package/src/VvFormFieldsGroup.ts
CHANGED
|
@@ -330,6 +330,8 @@ export function defineFormFieldsGroup<Schema extends FormSchema, Type = undefine
|
|
|
330
330
|
const hasProps = computed(() => ({
|
|
331
331
|
...onUpdateEvents.value,
|
|
332
332
|
...hasFieldProps.value,
|
|
333
|
+
...modelValue.value,
|
|
334
|
+
modelValue: modelValue.value,
|
|
333
335
|
names: hasFieldProps.value.name ?? names.value,
|
|
334
336
|
invalid: invalid.value,
|
|
335
337
|
invalids: invalids.value,
|
|
@@ -337,7 +339,6 @@ export function defineFormFieldsGroup<Schema extends FormSchema, Type = undefine
|
|
|
337
339
|
? Boolean(!invalid.value && modelValue.value)
|
|
338
340
|
: undefined,
|
|
339
341
|
invalidLabels: invalidLabels.value,
|
|
340
|
-
modelValue: modelValue.value,
|
|
341
342
|
readonly: isReadonly.value,
|
|
342
343
|
}))
|
|
343
344
|
|