@volverjs/form-vue 0.0.10-beta.6 → 0.0.10-beta.7

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.umd.js CHANGED
@@ -1 +1 @@
1
- (function(y,r){typeof exports=="object"&&typeof module<"u"?r(exports,require("vue"),require("@vueuse/core"),require("zod")):typeof define=="function"&&define.amd?define(["exports","vue","@vueuse/core","zod"],r):(y=typeof globalThis<"u"?globalThis:y||self,r(y["@volverjs/form-vue"]={},y.Vue,y.VueUseCore,y.zod))})(this,function(y,r,M,g){"use strict";function S(e){return Array.isArray(e)}function Z(e){return typeof e<"u"}function W(e){return e===null}function A(e){return typeof e=="object"}function L(e){return typeof e=="string"}function k(e){return typeof e>"u"}const U=/^[0-9]+$/,J=["__proto__","prototype","constructor"];function B(e,a,u){const f=Z(u)?u:void 0;if(!A(e)||!L(a))return f;const o=K(a);if(o.length!==0){for(const t of o){if(t==="*")continue;const s=function(i){return i.map(l=>k(l)||W(l)?l:S(l)?s(l):l[t])};if(S(e)&&!U.test(t)?e=s(e):e=e[t],k(e)||W(e))break}return k(e)?f:e}}function _(e,a,u){if(!A(e)||!L(a))return;const f=K(a);if(f.length===0)return;const o=f.length;for(let t=0;t<o;t++){const s=f[t];if(t===o-1){e[s]=u;return}if(s==="*"&&S(e)){const i=f.slice(t+1).join(".");for(const l of e)_(l,i,u);return}k(e[s])&&(e[s]={}),e=e[s]}}function K(e){const a=e.split(/[.]|(?:\[(\d|\*)\])/).filter(u=>!!u);return a.some(u=>J.indexOf(u)!==-1)?[]:a}var c=(e=>(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="datetimeLocal",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))(c||{}),C=(e=>(e.invalid="invalid",e.valid="valid",e))(C||{});const P=(e,a,u,f={})=>r.defineComponent({name:"FieldComponent",props:{type:{type:String,validator:o=>Object.values(c).includes(o),default:c.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}},emits:["invalid","valid","update:formData","update:modelValue"],expose:["invalid","invalidLabel","errors"],setup(o,{slots:t,emit:s}){const i=r.computed({get(){if(n!=null&&n.formData)return B(Object(n.formData.value),String(o.name))},set(d){n!=null&&n.formData&&(_(Object(n.formData.value),String(o.name),d),s("update:modelValue",{newValue:i.value,formData:n==null?void 0:n.formData}))}});r.onMounted(()=>{i.value===void 0&&o.defaultValue!==void 0&&(i.value=o.defaultValue)}),r.onBeforeUnmount(()=>{w(),x()});const l=r.inject(a,void 0);l&&l.fields.value.add(o.name);const n=r.inject(e),{props:h,name:V}=r.toRefs(o),p=r.computed(()=>{if(n!=null&&n.errors.value)return B(n.errors.value,String(o.name))}),m=r.computed(()=>{var d;return(d=p.value)==null?void 0:d._errors}),v=r.computed(()=>p.value!==void 0),w=r.watch(v,()=>{v.value?(s("invalid",m.value),l&&l.errors.value.set(o.name,{_errors:m.value})):(s("valid",i.value),l&&l.errors.value.delete(o.name))}),x=r.watch(()=>n==null?void 0:n.formData,()=>{s("update:formData",n==null?void 0:n.formData)},{deep:!0}),b=d=>{i.value=d},O=r.computed(()=>typeof h.value=="function"?h.value(n==null?void 0:n.formData):h.value),G=r.computed(()=>({...O.value,name:O.value.name??o.name,invalid:v.value,valid:o.showValid?!!(!v.value&&i.value):void 0,type:(d=>{if([c.text,c.number,c.email,c.password,c.tel,c.url,c.search,c.date,c.time,c.datetimeLocal,c.month,c.week,c.color].includes(d))return d})(o.type),invalidLabel:m.value,modelValue:i.value,errors:o.is?p.value:void 0,"onUpdate:modelValue":b}));return r.provide(u,{name:r.readonly(V),errors:r.readonly(p)}),{component:r.computed(()=>{if(o.type===c.custom)return{render(){var d;return((d=t.default)==null?void 0:d.call(t,{modelValue:i.value,onUpdate:b,invalid:v.value,invalidLabel:m.value,formData:n==null?void 0:n.formData.value,formErrors:n==null?void 0:n.errors.value,errors:p.value}))??t.defalut}};if(!f.lazyLoad){let d;switch(o.type){case c.select:d=r.resolveComponent("VvSelect");break;case c.checkbox:d=r.resolveComponent("VvCheckbox");break;case c.radio:d=r.resolveComponent("VvRadio");break;case c.textarea:d=r.resolveComponent("VvTextarea");break;case c.radioGroup:d=r.resolveComponent("VvRadioGroup");break;case c.checkboxGroup:d=r.resolveComponent("VvCheckboxGroup");break;case c.combobox:d=r.resolveComponent("VvCombobox");break;default:d=r.resolveComponent("VvInputText")}if(typeof d!="string")return d;console.warn(`[form-vue warn]: ${d} not found, the component will be loaded asynchronously. To avoid this warning, please set "lazyLoad" option.`)}return r.defineAsyncComponent(async()=>{switch(f.sideEffects&&await Promise.resolve(f.sideEffects(o.type)),o.type){case c.textarea:return import("@volverjs/ui-vue/vv-textarea");case c.radio:return import("@volverjs/ui-vue/vv-radio");case c.radioGroup:return import("@volverjs/ui-vue/vv-radio-group");case c.checkbox:return import("@volverjs/ui-vue/vv-checkbox");case c.checkboxGroup:return import("@volverjs/ui-vue/vv-checkbox-group");case c.combobox:return import("@volverjs/ui-vue/vv-combobox")}return import("@volverjs/ui-vue/vv-input-text")})}),hasProps:G,invalid:v}},render(){return this.is?r.h(this.is,this.hasProps,this.$slots):this.type===c.custom?r.h(this.component,null,this.$slots):r.h(this.component,this.hasProps,this.$slots)}}),E=(e,a={})=>{const u=t=>{let s=t;for(;s instanceof g.ZodEffects;)s=s.innerType();return s},f=u(e);return{...(f instanceof g.ZodObject?f._def.unknownKeys==="passthrough":!1)?a:{},...Object.fromEntries(Object.entries(f.shape).map(([t,s])=>{const i=a[t],l=u(s);let n;if(l instanceof g.ZodDefault&&(n=l._def.defaultValue()),i===null&&l instanceof g.ZodNullable)return[t,i];if(l instanceof g.ZodSchema){const h=l.safeParse(a[t]);if(h.success)return[t,h.data??n]}return l instanceof g.ZodObject?[t,E(l,i&&typeof i=="object"?i:{})]:[t,n]}))}},z=(e,a,u)=>{const f=r.ref(),o=r.ref(),t=r.ref(),s=r.defineComponent({name:"FormComponent",props:{modelValue:{type:Object,default:()=>({})},continuosValidation:{type:Boolean,default:!1}},emits:["invalid","valid","submit","update:modelValue"],expose:["submit","errors","status"],setup(i,{emit:l}){t.value=E(e,i.modelValue);const n=(u==null?void 0:u.continuosValidation)||i.continuosValidation;r.watch(()=>i.modelValue,m=>{if(m){const v=r.isProxy(m)?r.toRaw(m):m;t.value=typeof(v==null?void 0:v.clone)=="function"?v.clone():JSON.parse(JSON.stringify(v))}},{deep:!0}),M.watchThrottled(t,m=>{(f.value||n)&&h(),(!m||!i.modelValue||JSON.stringify(m)!==JSON.stringify(i.modelValue))&&l("update:modelValue",m)},{deep:!0,throttle:(u==null?void 0:u.updateThrottle)??500});const h=(m=t.value)=>{const v=e.safeParse(m);return v.success?(f.value=void 0,o.value=C.valid,t.value=v.data,l("update:modelValue",t.value),l("valid",v.data),!0):(f.value=v.error.format(),o.value=C.invalid,l("invalid",f.value),!1)},V=()=>h()?(l("submit",t.value),!0):!1,p=r.computed(()=>o.value===C.invalid);return r.provide(a,{formData:t,submit:V,errors:r.readonly(f),status:r.readonly(o),invalid:p}),{formData:t,submit:V,errors:r.readonly(f),status:r.readonly(o),invalid:p}},render(){return r.h("form",{onSubmit:r.withModifiers(this.submit,["prevent"])},{default:()=>{var i,l;return((l=(i=this.$slots)==null?void 0:i.default)==null?void 0:l.call(i,{formData:this.formData,submit:this.submit,errors:this.errors,status:this.status,invalid:this.invalid}))??this.$slots.default}})}});return{errors:f,status:o,formData:t,VvForm:s}},H=(e,a)=>r.defineComponent({name:"WrapperComponent",props:{name:{type:String,required:!0},tag:{type:String,default:void 0}},emits:["invalid","valid"],expose:["fields","invalid"],setup(f,{emit:o}){const t=r.inject(e),s=r.inject(a,void 0),i=r.ref(new Set),l=r.ref(new Map),{name:n}=r.toRefs(f);r.provide(a,{name:r.readonly(n),errors:l,fields:i}),r.watch(i,V=>{s!=null&&s.fields&&V.forEach(p=>{s==null||s.fields.value.add(p)})},{deep:!0}),r.watch(()=>new Map(l.value),(V,p)=>{s!=null&&s.errors&&(Array.from(p.keys()).forEach(m=>{s.errors.value.delete(m)}),Array.from(V.keys()).forEach(m=>{const v=V.get(m);v&&s.errors.value.set(m,v)}))},{deep:!0});const h=r.computed(()=>t!=null&&t.invalid.value?l.value.size>0:!1);return r.watch(h,()=>{h.value?o("invalid"):o("valid")}),{formData:t==null?void 0:t.formData,errors:t==null?void 0:t.errors,invalid:h,fields:i,fieldsErrors:l}},render(){var f,o;return this.tag?r.h(this.tag,null,{default:()=>{var t,s;return((s=(t=this.$slots).default)==null?void 0:s.call(t,{invalid:this.invalid,formData:this.formData,errors:this.errors,fieldsErrors:this.fieldsErrors}))??this.$slots.defalut}}):((o=(f=this.$slots).default)==null?void 0:o.call(f,{invalid:this.invalid,formData:this.formData,errors:this.errors,fieldsErrors:this.fieldsErrors}))??this.$slots.defalut}}),Q=(e,a)=>{const u=r.defineComponent({props:{schema:{type:[Array,Function],required:!0}},setup(f,{slots:o}){const t=r.inject(e),s=typeof f.schema=="function"?f.schema(t):f.schema;let i;return()=>{var l;return s==null?void 0:s.reduce((n,h)=>{const V=typeof h=="function"?h(t):h,{vvIs:p,vvName:m,vvSlots:v,vvChildren:w,vvIf:x,vvElseIf:b,vvType:O,vvDefaultValue:G,vvShowValid:q,...d}=V;if(x!==void 0){if(i=typeof x=="function"?r.unref(x(t)):r.unref(x),!i)return n}else if(b!==void 0&&i!==void 0){if(i||(i=typeof b=="function"?r.unref(b(t)):r.unref(b),!i))return n}else i=void 0;const N=w?r.h(u,{schema:w}):void 0;return m?(n.push(r.h(a,{name:m,is:p,type:O,defaultValue:G,showValid:q,props:d},v??N)),n):p?(n.push(r.h(p,d,v??N)),n):(w&&n.push(N),n)},[(l=o==null?void 0:o.default)==null?void 0:l.call(o,{formData:t==null?void 0:t.formData.value,submit:t==null?void 0:t.submit,errors:t==null?void 0:t.errors.value,status:t==null?void 0:t.status.value,invalid:t==null?void 0:t.invalid.value})])}}});return u},I=(e,a={})=>{const u=Symbol(),f=Symbol(),o=Symbol(),{VvForm:t,errors:s,status:i,formData:l}=z(e,u,a),n=H(u,f),h=P(u,f,o,a),V=Q(u,h);return{VvForm:t,VvFormWrapper:n,VvFormField:h,VvFormTemplate:V,formInjectionKey:u,formWrapperInjectionKey:f,formFieldInjectionKey:o,errors:s,status:i,formData:l}},$=Symbol(),R=e=>{let a={};return e.schema&&(a=I(e.schema,e)),{...a,install(u,{global:f=!1}={}){u.provide($,e),f&&(u.config.globalProperties.$vvForm=e,a!=null&&a.VvForm&&u.component("VvForm",a.VvForm),a!=null&&a.VvFormWrapper&&u.component("VvFormWrapper",a.VvFormWrapper),a!=null&&a.VvFormField&&u.component("VvFormField",a.VvFormField),a!=null&&a.VvFormTemplate&&u.component("VvFormTemplate",a.VvFormTemplate))}}},T=(e,a={})=>{const u={...r.inject($,{}),...a};return I(e,u)};y.FormFieldType=c,y.createForm=R,y.defaultObjectBySchema=E,y.formFactory=I,y.pluginInjectionKey=$,y.useForm=T,Object.defineProperty(y,Symbol.toStringTag,{value:"Module"})});
1
+ (function(y,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("vue"),require("@vueuse/core"),require("zod")):typeof define=="function"&&define.amd?define(["exports","vue","@vueuse/core","zod"],t):(y=typeof globalThis<"u"?globalThis:y||self,t(y["@volverjs/form-vue"]={},y.Vue,y.VueUseCore,y.zod))})(this,function(y,t,M,x){"use strict";function E(e){return Array.isArray(e)}function Z(e){return typeof e<"u"}function W(e){return e===null}function A(e){return typeof e=="object"}function L(e){return typeof e=="string"}function k(e){return typeof e>"u"}const U=/^[0-9]+$/,J=["__proto__","prototype","constructor"];function O(e,s,u){const f=Z(u)?u:void 0;if(!A(e)||!L(s))return f;const a=K(s);if(a.length!==0){for(const r of a){if(r==="*")continue;const l=function(o){return o.map(i=>k(i)||W(i)?i:E(i)?l(i):i[r])};if(E(e)&&!U.test(r)?e=l(e):e=e[r],k(e)||W(e))break}return k(e)?f:e}}function _(e,s,u){if(!A(e)||!L(s))return;const f=K(s);if(f.length===0)return;const a=f.length;for(let r=0;r<a;r++){const l=f[r];if(r===a-1){e[l]=u;return}if(l==="*"&&E(e)){const o=f.slice(r+1).join(".");for(const i of e)_(i,o,u);return}k(e[l])&&(e[l]={}),e=e[l]}}function K(e){const s=e.split(/[.]|(?:\[(\d|\*)\])/).filter(u=>!!u);return s.some(u=>J.indexOf(u)!==-1)?[]:s}var c=(e=>(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="datetimeLocal",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))(c||{}),C=(e=>(e.invalid="invalid",e.valid="valid",e))(C||{});const P=(e,s,u,f={})=>t.defineComponent({name:"FieldComponent",props:{type:{type:String,validator:a=>Object.values(c).includes(a),default:c.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}},emits:["invalid","valid","update:formData","update:modelValue"],expose:["invalid","invalidLabel","errors"],setup(a,{slots:r,emit:l}){const o=t.computed({get(){if(n!=null&&n.formData)return O(Object(n.formData.value),String(a.name))},set(d){n!=null&&n.formData&&(_(Object(n.formData.value),String(a.name),d),l("update:modelValue",{newValue:o.value,formData:n==null?void 0:n.formData}))}});t.onMounted(()=>{o.value===void 0&&a.defaultValue!==void 0&&(o.value=a.defaultValue)}),t.onBeforeUnmount(()=>{w(),g()});const i=t.inject(s,void 0);i&&i.fields.value.add(a.name);const n=t.inject(e),{props:h,name:b}=t.toRefs(a),p=t.computed(()=>{if(n!=null&&n.errors.value)return O(n.errors.value,String(a.name))}),m=t.computed(()=>{var d;return(d=p.value)==null?void 0:d._errors}),v=t.computed(()=>p.value!==void 0),w=t.watch(v,()=>{v.value?(l("invalid",m.value),i&&i.errors.value.set(a.name,{_errors:m.value})):(l("valid",o.value),i&&i.errors.value.delete(a.name))}),g=t.watch(()=>n==null?void 0:n.formData,()=>{l("update:formData",n==null?void 0:n.formData)},{deep:!0}),V=d=>{o.value=d},S=t.computed(()=>typeof h.value=="function"?h.value(n==null?void 0:n.formData):h.value),B=t.computed(()=>({...S.value,name:S.value.name??a.name,invalid:v.value,valid:a.showValid?!!(!v.value&&o.value):void 0,type:(d=>{if([c.text,c.number,c.email,c.password,c.tel,c.url,c.search,c.date,c.time,c.datetimeLocal,c.month,c.week,c.color].includes(d))return d})(a.type),invalidLabel:m.value,modelValue:o.value,"onUpdate:modelValue":V}));return t.provide(u,{name:t.readonly(b),errors:t.readonly(p)}),{component:t.computed(()=>{if(a.type===c.custom)return{render(){var d;return((d=r.default)==null?void 0:d.call(r,{modelValue:o.value,onUpdate:V,invalid:v.value,invalidLabel:m.value,formData:n==null?void 0:n.formData.value,formErrors:n==null?void 0:n.errors.value,errors:p.value}))??r.defalut}};if(!f.lazyLoad){let d;switch(a.type){case c.select:d=t.resolveComponent("VvSelect");break;case c.checkbox:d=t.resolveComponent("VvCheckbox");break;case c.radio:d=t.resolveComponent("VvRadio");break;case c.textarea:d=t.resolveComponent("VvTextarea");break;case c.radioGroup:d=t.resolveComponent("VvRadioGroup");break;case c.checkboxGroup:d=t.resolveComponent("VvCheckboxGroup");break;case c.combobox:d=t.resolveComponent("VvCombobox");break;default:d=t.resolveComponent("VvInputText")}if(typeof d!="string")return d;console.warn(`[form-vue warn]: ${d} not found, the component will be loaded asynchronously. To avoid this warning, please set "lazyLoad" option.`)}return t.defineAsyncComponent(async()=>{switch(f.sideEffects&&await Promise.resolve(f.sideEffects(a.type)),a.type){case c.textarea:return import("@volverjs/ui-vue/vv-textarea");case c.radio:return import("@volverjs/ui-vue/vv-radio");case c.radioGroup:return import("@volverjs/ui-vue/vv-radio-group");case c.checkbox:return import("@volverjs/ui-vue/vv-checkbox");case c.checkboxGroup:return import("@volverjs/ui-vue/vv-checkbox-group");case c.combobox:return import("@volverjs/ui-vue/vv-combobox")}return import("@volverjs/ui-vue/vv-input-text")})}),hasProps:B,invalid:v}},render(){return this.is?t.h(this.is,this.hasProps,this.$slots):this.type===c.custom?t.h(this.component,null,this.$slots):t.h(this.component,this.hasProps,this.$slots)}}),I=(e,s={})=>{const u=r=>{let l=r;for(;l instanceof x.ZodEffects;)l=l.innerType();return l},f=u(e);return{...(f instanceof x.ZodObject?f._def.unknownKeys==="passthrough":!1)?s:{},...Object.fromEntries(Object.entries(f.shape).map(([r,l])=>{const o=s[r],i=u(l);let n;if(i instanceof x.ZodDefault&&(n=i._def.defaultValue()),o===null&&i instanceof x.ZodNullable)return[r,o];if(i instanceof x.ZodSchema){const h=i.safeParse(s[r]);if(h.success)return[r,h.data??n]}return i instanceof x.ZodObject?[r,I(i,o&&typeof o=="object"?o:{})]:[r,n]}))}},z=(e,s,u)=>{const f=t.ref(),a=t.ref(),r=t.ref(),l=t.defineComponent({name:"FormComponent",props:{modelValue:{type:Object,default:()=>({})},updateThrottle:{type:Number,default:500},continuosValidation:{type:Boolean,default:!1}},emits:["invalid","valid","submit","update:modelValue"],expose:["submit","errors","status"],setup(o,{emit:i}){r.value=I(e,o.modelValue);const n=(u==null?void 0:u.continuosValidation)??o.continuosValidation;t.watch(()=>o.modelValue,m=>{if(m){const v=t.isProxy(m)?t.toRaw(m):m;r.value=typeof(v==null?void 0:v.clone)=="function"?v.clone():JSON.parse(JSON.stringify(v))}},{deep:!0}),M.watchThrottled(r,m=>{(f.value||n)&&h(),(!m||!o.modelValue||JSON.stringify(m)!==JSON.stringify(o.modelValue))&&i("update:modelValue",m)},{deep:!0,throttle:(u==null?void 0:u.updateThrottle)??o.updateThrottle});const h=(m=r.value)=>{const v=e.safeParse(m);return v.success?(f.value=void 0,a.value=C.valid,r.value=v.data,i("update:modelValue",r.value),i("valid",v.data),!0):(f.value=v.error.format(),a.value=C.invalid,i("invalid",f.value),!1)},b=()=>h()?(i("submit",r.value),!0):!1,p=t.computed(()=>a.value===C.invalid);return t.provide(s,{formData:r,submit:b,errors:t.readonly(f),status:t.readonly(a),invalid:p}),{formData:r,submit:b,errors:t.readonly(f),status:t.readonly(a),invalid:p}},render(){return t.h("form",{onSubmit:t.withModifiers(this.submit,["prevent"])},{default:()=>{var o,i;return((i=(o=this.$slots)==null?void 0:o.default)==null?void 0:i.call(o,{formData:this.formData,submit:this.submit,errors:this.errors,status:this.status,invalid:this.invalid}))??this.$slots.default}})}});return{errors:f,status:a,formData:r,VvForm:l}},T=(e,s)=>t.defineComponent({name:"WrapperComponent",props:{name:{type:String,required:!0},tag:{type:String,default:void 0}},emits:["invalid","valid"],expose:["fields","invalid"],setup(f,{emit:a}){const r=t.inject(e),l=t.inject(s,void 0),o=t.ref(new Set),i=t.ref(new Map),{name:n}=t.toRefs(f);t.provide(s,{name:t.readonly(n),errors:i,fields:o}),t.watch(o,b=>{l!=null&&l.fields&&b.forEach(p=>{l==null||l.fields.value.add(p)})},{deep:!0}),t.watch(()=>new Map(i.value),(b,p)=>{l!=null&&l.errors&&(Array.from(p.keys()).forEach(m=>{l.errors.value.delete(m)}),Array.from(b.keys()).forEach(m=>{const v=b.get(m);v&&l.errors.value.set(m,v)}))},{deep:!0});const h=t.computed(()=>r!=null&&r.invalid.value?i.value.size>0:!1);return t.watch(h,()=>{h.value?a("invalid"):a("valid")}),{formData:r==null?void 0:r.formData,errors:r==null?void 0:r.errors,invalid:h,fields:o,fieldsErrors:i}},render(){var f,a;return this.tag?t.h(this.tag,null,{default:()=>{var r,l;return((l=(r=this.$slots).default)==null?void 0:l.call(r,{invalid:this.invalid,formData:this.formData,errors:this.errors,fieldsErrors:this.fieldsErrors}))??this.$slots.defalut}}):((a=(f=this.$slots).default)==null?void 0:a.call(f,{invalid:this.invalid,formData:this.formData,errors:this.errors,fieldsErrors:this.fieldsErrors}))??this.$slots.defalut}}),D=(e,s)=>{const u=t.defineComponent({props:{schema:{type:[Array,Function],required:!0}},setup(f,{slots:a}){const r=t.inject(e);if(!(r!=null&&r.formData))return;const l=typeof f.schema=="function"?f.schema(r):f.schema;let o;return()=>{var i;return l.reduce((n,h)=>{const b=typeof h=="function"?h(r):h,{vvIs:p,vvName:m,vvSlots:v,vvChildren:w,vvIf:g,vvElseIf:V,vvType:S,vvDefaultValue:B,vvShowValid:q,...d}=b;if(g!==void 0){if(typeof g=="string"?o=!!O(Object(r.formData.value),g):typeof g=="function"?o=t.unref(g(r)):o=t.unref(g),!o)return n}else if(V!==void 0&&o!==void 0){if(o||(typeof V=="string"?o=!!O(Object(r.formData.value),V):typeof V=="function"?o=t.unref(V(r)):o=t.unref(V),!o))return n}else o=void 0;const G=w?t.h(u,{schema:w}):void 0;return m?(n.push(t.h(s,{name:m,is:p,type:S,defaultValue:B,showValid:q,props:d},v??G)),n):p?(n.push(t.h(p,d,v??G)),n):(w&&n.push(G),n)},[(i=a==null?void 0:a.default)==null?void 0:i.call(a,{formData:r==null?void 0:r.formData.value,submit:r==null?void 0:r.submit,errors:r==null?void 0:r.errors.value,status:r==null?void 0:r.status.value,invalid:r==null?void 0:r.invalid.value})])}}});return u},$=(e,s={})=>{const u=Symbol(),f=Symbol(),a=Symbol(),{VvForm:r,errors:l,status:o,formData:i}=z(e,u,s),n=T(u,f),h=P(u,f,a,s),b=D(u,h);return{VvForm:r,VvFormWrapper:n,VvFormField:h,VvFormTemplate:b,formInjectionKey:u,formWrapperInjectionKey:f,formFieldInjectionKey:a,errors:l,status:o,formData:i}},N=Symbol(),H=e=>{let s={};return e.schema&&(s=$(e.schema,e)),{...s,install(u,{global:f=!1}={}){u.provide(N,e),f&&(u.config.globalProperties.$vvForm=e,s!=null&&s.VvForm&&u.component("VvForm",s.VvForm),s!=null&&s.VvFormWrapper&&u.component("VvFormWrapper",s.VvFormWrapper),s!=null&&s.VvFormField&&u.component("VvFormField",s.VvFormField),s!=null&&s.VvFormTemplate&&u.component("VvFormTemplate",s.VvFormTemplate))}}},Q=(e,s={})=>{const u={...t.inject(N,{}),...s};return $(e,u)};y.FormFieldType=c,y.createForm=H,y.defaultObjectBySchema=I,y.formFactory=$,y.pluginInjectionKey=N,y.useForm=Q,Object.defineProperty(y,Symbol.toStringTag,{value:"Module"})});
package/dist/types.d.ts CHANGED
@@ -111,8 +111,8 @@ export type SimpleFormTemplateItem<Schema extends FormSchema> = Record<
111
111
  | SimpleFormTemplateItem<Schema>
112
112
  | ((data?: InjectedFormData<Schema>) => SimpleFormTemplateItem<Schema>)
113
113
  >
114
- vvIf?: AnyBoolean<Schema>
115
- vvElseIf?: AnyBoolean<Schema>
114
+ vvIf?: AnyBoolean<Schema> | Path<z.infer<Schema>>
115
+ vvElseIf?: AnyBoolean<Schema> | Path<z.infer<Schema>>
116
116
  vvType?: `${FormFieldType}`
117
117
  vvShowValid?: boolean
118
118
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
package/package.json CHANGED
@@ -19,7 +19,7 @@
19
19
  "bugs": {
20
20
  "url": "https://github.com/volverjs/form-vue/issues"
21
21
  },
22
- "version": "0.0.10-beta.6",
22
+ "version": "0.0.10-beta.7",
23
23
  "engines": {
24
24
  "node": ">= 16.x"
25
25
  },
@@ -36,7 +36,7 @@
36
36
  ],
37
37
  "dependencies": {
38
38
  "@volverjs/ui-vue": "0.0.6-beta.7",
39
- "@vueuse/core": "^10.0.2",
39
+ "@vueuse/core": "^10.1.2",
40
40
  "ts-dot-prop": "^2.1.2",
41
41
  "vue": "^3.2.47",
42
42
  "zod": "^3.21.4"
@@ -44,25 +44,25 @@
44
44
  "devDependencies": {
45
45
  "@playwright/experimental-ct-vue": "^1.32.3",
46
46
  "@testing-library/vue": "^7.0.0",
47
- "@typescript-eslint/eslint-plugin": "^5.59.0",
48
- "@typescript-eslint/parser": "^5.59.0",
49
- "@vitejs/plugin-vue": "^4.1.0",
47
+ "@typescript-eslint/eslint-plugin": "^5.59.2",
48
+ "@typescript-eslint/parser": "^5.59.2",
49
+ "@vitejs/plugin-vue": "^4.2.1",
50
50
  "@volverjs/style": "^0.1.8",
51
51
  "@vue/compiler-sfc": "^3.2.47",
52
52
  "@vue/runtime-core": "^3.2.47",
53
53
  "@vue/test-utils": "^2.3.2",
54
54
  "copy": "^0.3.2",
55
- "eslint": "^8.38.0",
55
+ "eslint": "^8.39.0",
56
56
  "eslint-config-prettier": "^8.8.0",
57
57
  "eslint-plugin-prettier": "^4.2.1",
58
- "happy-dom": "^9.9.2",
59
- "prettier": "^2.8.7",
58
+ "happy-dom": "^9.10.4",
59
+ "prettier": "^2.8.8",
60
60
  "typescript": "^5.0.4",
61
- "vite": "^4.3.1",
61
+ "vite": "^4.3.4",
62
62
  "vite-plugin-eslint": "^1.8.1",
63
- "vite-plugin-externalize-deps": "^0.5.0",
63
+ "vite-plugin-externalize-deps": "^0.6.0",
64
64
  "vitest": "^0.30.1",
65
- "vue-tsc": "^1.4.2"
65
+ "vue-tsc": "^1.6.3"
66
66
  },
67
67
  "typesVersions": {
68
68
  "*": {
package/src/VvForm.ts CHANGED
@@ -37,6 +37,10 @@ export const defineForm = <Schema extends FormSchema>(
37
37
  type: Object,
38
38
  default: () => ({}),
39
39
  },
40
+ updateThrottle: {
41
+ type: Number,
42
+ default: 500,
43
+ },
40
44
  continuosValidation: {
41
45
  type: Boolean,
42
46
  default: false,
@@ -48,7 +52,7 @@ export const defineForm = <Schema extends FormSchema>(
48
52
  formData.value = defaultObjectBySchema(schema, props.modelValue)
49
53
 
50
54
  const keepValidation =
51
- options?.continuosValidation || props.continuosValidation
55
+ options?.continuosValidation ?? props.continuosValidation
52
56
 
53
57
  watch(
54
58
  () => props.modelValue,
@@ -81,7 +85,10 @@ export const defineForm = <Schema extends FormSchema>(
81
85
  emit('update:modelValue', newValue)
82
86
  }
83
87
  },
84
- { deep: true, throttle: options?.updateThrottle ?? 500 },
88
+ {
89
+ deep: true,
90
+ throttle: options?.updateThrottle ?? props.updateThrottle,
91
+ },
85
92
  )
86
93
 
87
94
  const parseModelValue = (value = formData.value) => {
@@ -205,7 +205,6 @@ export const defineFormField = <Schema extends FormSchema>(
205
205
  })(props.type as FormFieldType),
206
206
  invalidLabel: invalidLabel.value,
207
207
  modelValue: modelValue.value,
208
- errors: props.is ? errors.value : undefined,
209
208
  'onUpdate:modelValue': onUpdate,
210
209
  }))
211
210
 
@@ -1,3 +1,4 @@
1
+ import { get } from 'ts-dot-prop'
1
2
  import {
2
3
  type Component,
3
4
  type PropType,
@@ -32,13 +33,14 @@ export const defineFormTemplate = <Schema extends FormSchema>(
32
33
  },
33
34
  setup(templateProps, { slots: templateSlots }) {
34
35
  const injectedFormData = inject(formProvideKey)
36
+ if (!injectedFormData?.formData) return
35
37
  const normalizedSchema =
36
38
  typeof templateProps.schema === 'function'
37
39
  ? templateProps.schema(injectedFormData)
38
40
  : templateProps.schema
39
41
  let lastIf: boolean | undefined = undefined
40
42
  return () =>
41
- normalizedSchema?.reduce<(VNode | VNode[] | undefined)[]>(
43
+ normalizedSchema.reduce<(VNode | VNode[] | undefined)[]>(
42
44
  (acc, field) => {
43
45
  const normalizedField =
44
46
  typeof field === 'function'
@@ -58,10 +60,18 @@ export const defineFormTemplate = <Schema extends FormSchema>(
58
60
  } = normalizedField
59
61
  // conditions
60
62
  if (vvIf !== undefined) {
61
- lastIf =
62
- typeof vvIf === 'function'
63
- ? unref(vvIf(injectedFormData))
64
- : unref(vvIf)
63
+ if (typeof vvIf === 'string') {
64
+ lastIf = Boolean(
65
+ get(
66
+ Object(injectedFormData.formData.value),
67
+ vvIf,
68
+ ),
69
+ )
70
+ } else if (typeof vvIf === 'function') {
71
+ lastIf = unref(vvIf(injectedFormData))
72
+ } else {
73
+ lastIf = unref(vvIf)
74
+ }
65
75
  if (!lastIf) {
66
76
  return acc
67
77
  }
@@ -72,10 +82,18 @@ export const defineFormTemplate = <Schema extends FormSchema>(
72
82
  if (lastIf) {
73
83
  return acc
74
84
  }
75
- lastIf =
76
- typeof vvElseIf === 'function'
77
- ? unref(vvElseIf(injectedFormData))
78
- : unref(vvElseIf)
85
+ if (typeof vvElseIf === 'string') {
86
+ lastIf = Boolean(
87
+ get(
88
+ Object(injectedFormData.formData.value),
89
+ vvElseIf,
90
+ ),
91
+ )
92
+ } else if (typeof vvElseIf === 'function') {
93
+ lastIf = unref(vvElseIf(injectedFormData))
94
+ } else {
95
+ lastIf = unref(vvElseIf)
96
+ }
79
97
  if (!lastIf) {
80
98
  return acc
81
99
  }
package/src/types.d.ts CHANGED
@@ -111,8 +111,8 @@ export type SimpleFormTemplateItem<Schema extends FormSchema> = Record<
111
111
  | SimpleFormTemplateItem<Schema>
112
112
  | ((data?: InjectedFormData<Schema>) => SimpleFormTemplateItem<Schema>)
113
113
  >
114
- vvIf?: AnyBoolean<Schema>
115
- vvElseIf?: AnyBoolean<Schema>
114
+ vvIf?: AnyBoolean<Schema> | Path<z.infer<Schema>>
115
+ vvElseIf?: AnyBoolean<Schema> | Path<z.infer<Schema>>
116
116
  vvType?: `${FormFieldType}`
117
117
  vvShowValid?: boolean
118
118
  // eslint-disable-next-line @typescript-eslint/no-explicit-any