@volverjs/form-vue 0.0.14-beta.3 → 0.0.14-beta.4
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.d.ts +1 -1904
- package/dist/index.es.js +248 -242
- package/dist/index.umd.js +1 -1
- package/dist/{VvForm.d.ts → src/VvForm.d.ts} +6 -1
- package/dist/src/index.d.ts +1919 -0
- package/dist/test-playwright/VvForm.spec.d.ts +1 -0
- package/dist/test-playwright/VvFormField.spec.d.ts +1 -0
- package/dist/test-playwright/VvFormWrapper.spec.d.ts +1 -0
- package/dist/test-vitest/defaultObjectBySchema.test.d.ts +1 -0
- package/dist/test-vitest/useForm.test.d.ts +1 -0
- package/package.json +12 -11
- package/src/VvForm.ts +20 -12
- package/src/VvFormTemplate.ts +99 -101
- package/src/index.ts +1 -0
- /package/dist/{VvFormField.d.ts → src/VvFormField.d.ts} +0 -0
- /package/dist/{VvFormTemplate.d.ts → src/VvFormTemplate.d.ts} +0 -0
- /package/dist/{VvFormWrapper.d.ts → src/VvFormWrapper.d.ts} +0 -0
- /package/dist/{enums.d.ts → src/enums.d.ts} +0 -0
- /package/dist/{types.d.ts → src/types.d.ts} +0 -0
- /package/dist/{utils.d.ts → src/utils.d.ts} +0 -0
package/dist/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(V,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):(V=typeof globalThis<"u"?globalThis:V||self,r(V["@volverjs/form-vue"]={},V.Vue,V.VueUseCore,V.zod))})(this,function(V,r,U,w){"use strict";function $(e){return Array.isArray(e)}function q(e){return typeof e<"u"}function G(e){return e===null}function L(e){return typeof e=="object"}function W(e){return typeof e=="string"}function k(e){return typeof e>"u"}const M=/^[0-9]+$/,J=["__proto__","prototype","constructor"];function S(e,u,a){const f=q(a)?a:void 0;if(!L(e)||!W(u))return f;const s=K(u);if(s.length!==0){for(const t of s){if(t==="*")continue;const l=function(o){return o.map(i=>k(i)||G(i)?i:$(i)?l(i):i[t])};if($(e)&&!M.test(t)?e=l(e):e=e[t],k(e)||G(e))break}return k(e)?f:e}}function Z(e,u,a){if(!L(e)||!W(u))return;const f=K(u);if(f.length===0)return;const s=f.length;for(let t=0;t<s;t++){const l=f[t];if(t===s-1){e[l]=a;return}if(l==="*"&&$(e)){const o=f.slice(t+1).join(".");for(const i of e)Z(i,o,a);return}k(e[l])&&(e[l]={}),e=e[l]}}function K(e){const u=e.split(/[.]|(?:\[(\d|\*)\])/).filter(a=>!!a);return u.some(a=>J.indexOf(a)!==-1)?[]:u}var d=(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="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))(d||{}),I=(e=>(e.invalid="invalid",e.valid="valid",e))(I||{});const P=(e,u,a,f)=>r.defineComponent({name:"FieldComponent",props:{type:{type:String,validator:s=>Object.values(d).includes(s),default:d.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}},emits:["invalid","valid","update:formData","update:modelValue"],expose:["invalid","invalidLabel","errors"],setup(s,{slots:t,emit:l}){const o=r.computed({get(){if(n!=null&&n.formData)return S(Object(n.formData.value),String(s.name))},set(c){n!=null&&n.formData&&(Z(Object(n.formData.value),String(s.name),c),l("update:modelValue",{newValue:o.value,formData:n==null?void 0:n.formData}))}});r.onMounted(()=>{o.value===void 0&&s.defaultValue!==void 0&&(o.value=s.defaultValue)}),r.onBeforeUnmount(()=>{x(),p()});const i=r.inject(u,void 0);i&&i.fields.value.add(s.name);const n=r.inject(e),{props:h,name:y}=r.toRefs(s),b=r.computed(()=>{if(n!=null&&n.errors.value)return S(n.errors.value,String(s.name))}),m=r.computed(()=>{var c;return(c=b.value)==null?void 0:c._errors}),v=r.computed(()=>b.value!==void 0),x=r.watch(v,()=>{v.value?(l("invalid",m.value),i&&i.errors.value.set(s.name,{_errors:m.value})):(l("valid",o.value),i&&i.errors.value.delete(s.name))}),p=r.watch(()=>n==null?void 0:n.formData,()=>{l("update:formData",n==null?void 0:n.formData)},{deep:!0}),g=c=>{o.value=c},_=r.computed(()=>{let c=h.value;return typeof c=="function"&&(c=c(n==null?void 0:n.formData)),Object.keys(c).reduce((C,O)=>(C[O]=r.unref(c[O]),C),{})}),N=r.computed(()=>({..._.value,name:_.value.name??s.name,invalid:v.value,valid:s.showValid?!!(!v.value&&o.value):void 0,type:(c=>{if([d.text,d.number,d.email,d.password,d.tel,d.url,d.search,d.date,d.time,d.datetimeLocal,d.month,d.week,d.color].includes(c))return c})(s.type),invalidLabel:m.value,modelValue:o.value,"onUpdate:modelValue":g}));return r.provide(a,{name:r.readonly(y),errors:r.readonly(b)}),{component:r.computed(()=>{if(s.type===d.custom)return{render(){var c;return((c=t.default)==null?void 0:c.call(t,{modelValue:o.value,onUpdate:g,submit:n==null?void 0:n.submit,validate:n==null?void 0:n.validate,invalid:v.value,invalidLabel:m.value,formData:n==null?void 0:n.formData.value,formErrors:n==null?void 0:n.errors.value,errors:b.value}))??t.defalut}};if(!((f==null?void 0:f.lazyLoad)??s.lazyLoad)){let c;switch(s.type){case d.select:c=r.resolveComponent("VvSelect");break;case d.checkbox:c=r.resolveComponent("VvCheckbox");break;case d.radio:c=r.resolveComponent("VvRadio");break;case d.textarea:c=r.resolveComponent("VvTextarea");break;case d.radioGroup:c=r.resolveComponent("VvRadioGroup");break;case d.checkboxGroup:c=r.resolveComponent("VvCheckboxGroup");break;case d.combobox:c=r.resolveComponent("VvCombobox");break;default:c=r.resolveComponent("VvInputText")}if(typeof c!="string")return c;console.warn(`[form-vue warn]: ${c} not found, the component will be loaded asynchronously. To avoid this warning, please set "lazyLoad" option.`)}return r.defineAsyncComponent(async()=>{switch(f!=null&&f.sideEffects&&await Promise.resolve(f.sideEffects(s.type)),s.type){case d.textarea:return import("@volverjs/ui-vue/vv-textarea");case d.radio:return import("@volverjs/ui-vue/vv-radio");case d.radioGroup:return import("@volverjs/ui-vue/vv-radio-group");case d.checkbox:return import("@volverjs/ui-vue/vv-checkbox");case d.checkboxGroup:return import("@volverjs/ui-vue/vv-checkbox-group");case d.select:return import("@volverjs/ui-vue/vv-select");case d.combobox:return import("@volverjs/ui-vue/vv-combobox")}return import("@volverjs/ui-vue/vv-input-text")})}),hasProps:N,invalid:v}},render(){return this.is?r.h(this.is,this.hasProps,this.$slots):this.type===d.custom?r.h(this.component,null,this.$slots):r.h(this.component,this.hasProps,this.$slots)}}),E=(e,u={})=>{const a=t=>{let l=t;for(;l instanceof w.ZodEffects;)l=l.innerType();return l instanceof w.ZodOptional&&(l=l._def.innerType),l},f=a(e);return{...(f instanceof w.ZodObject?f._def.unknownKeys==="passthrough":!1)?u:{},...Object.fromEntries(Object.entries(f.shape).map(([t,l])=>{const o=u[t];let i=a(l),n;if(i instanceof w.ZodDefault&&(n=i._def.defaultValue(),i=i._def.innerType),o===null&&i instanceof w.ZodNullable)return[t,o];if(i instanceof w.ZodSchema){const h=l.safeParse(o);if(h.success)return[t,h.data??n]}if(i instanceof w.ZodArray&&Array.isArray(o)&&o.length){const h=a(i._def.type);if(h instanceof w.ZodObject)return[t,o.map(y=>E(h,y&&typeof y=="object"?y:void 0))??n]}return i instanceof w.ZodObject?[t,E(i,o&&typeof o=="object"?o:n)]:[t,n]}))}},T=(e,u,a,f)=>{const s=r.ref(),t=r.ref(),l=r.ref(),o=r.defineComponent({name:"FormComponent",props:{modelValue:{type:Object,default:()=>({})},updateThrottle:{type:Number,default:500},continuosValidation:{type:Boolean,default:!1},template:{type:[Array,Function]}},emits:["invalid","valid","submit","update:modelValue"],expose:["submit","validate","errors","status","valid","invalid"],setup(i,{emit:n}){l.value=E(e,r.toRaw(i.modelValue)),r.watch(()=>i.modelValue,m=>{if(m){const v=r.isProxy(m)?r.toRaw(m):m;l.value=typeof(v==null?void 0:v.clone)=="function"?v.clone():JSON.parse(JSON.stringify(v))}},{deep:!0}),U.watchThrottled(l,m=>{var v;((s.value||(a==null?void 0:a.continuosValidation))??i.continuosValidation)&&h(),(!m||!i.modelValue||JSON.stringify(m)!==JSON.stringify(i.modelValue))&&(n("update:modelValue",m),(v=a==null?void 0:a.onUpdate)==null||v.call(a,r.toRaw(m)))},{deep:!0,throttle:(a==null?void 0:a.updateThrottle)??i.updateThrottle});const h=(m=l.value)=>{var x,p,g;const v=e.safeParse(m);return v.success?(s.value=void 0,t.value=I.valid,l.value=v.data,n("update:modelValue",l.value),(p=a==null?void 0:a.onUpdate)==null||p.call(a,r.toRaw(l.value)),n("valid",v.data),(g=a==null?void 0:a.onValid)==null||g.call(a,r.toRaw(l.value)),!0):(s.value=v.error.format(),t.value=I.invalid,n("invalid",s.value),(x=a==null?void 0:a.onInvalid)==null||x.call(a,r.toRaw(s.value)),!1)},y=()=>{var m;return h()?(n("submit",l.value),(m=a==null?void 0:a.onSubmit)==null||m.call(a,r.toRaw(l.value)),!0):!1},b=r.computed(()=>t.value===I.invalid);return r.provide(u,{formData:l,submit:y,validate:h,errors:r.readonly(s),status:r.readonly(t),invalid:b}),{formData:l,submit:y,validate:h,errors:r.readonly(s),status:r.readonly(t),invalid:b}},render(){return r.h("form",{onSubmit:r.withModifiers(this.submit,["prevent"])},(this.template??(a==null?void 0:a.template))&&f?[r.h(f,{schema:this.template??(a==null?void 0:a.template)})]:{default:()=>{var i,n;return((n=(i=this.$slots)==null?void 0:i.default)==null?void 0:n.call(i,{formData:this.formData,submit:this.submit,validate:this.validate,errors:this.errors,status:this.status,invalid:this.invalid}))??this.$slots.default}})}});return{errors:s,status:t,formData:l,VvForm:o}},z=(e,u)=>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:s}){const t=r.inject(e),l=r.inject(u,void 0),o=r.ref(new Set),i=r.ref(new Map),{name:n}=r.toRefs(f);r.provide(u,{name:r.readonly(n),errors:i,fields:o}),r.watch(o,y=>{l!=null&&l.fields&&y.forEach(b=>{l==null||l.fields.value.add(b)})},{deep:!0}),r.watch(()=>new Map(i.value),(y,b)=>{l!=null&&l.errors&&(Array.from(b.keys()).forEach(m=>{l.errors.value.delete(m)}),Array.from(y.keys()).forEach(m=>{const v=y.get(m);v&&l.errors.value.set(m,v)}))},{deep:!0});const h=r.computed(()=>t!=null&&t.invalid.value?i.value.size>0:!1);return r.watch(h,()=>{h.value?s("invalid"):s("valid")}),{formData:t==null?void 0:t.formData,errors:t==null?void 0:t.errors,submit:t==null?void 0:t.submit,validate:t==null?void 0:t.validate,invalid:h,fields:o,fieldsErrors:i}},render(){var f,s;return this.tag?r.h(this.tag,null,{default:()=>{var t,l;return((l=(t=this.$slots).default)==null?void 0:l.call(t,{invalid:this.invalid,formData:this.formData,submit:this.submit,validate:this.validate,errors:this.errors,fieldsErrors:this.fieldsErrors}))??this.$slots.defalut}}):((s=(f=this.$slots).default)==null?void 0:s.call(f,{invalid:this.invalid,formData:this.formData,submit:this.submit,validate:this.validate,errors:this.errors,fieldsErrors:this.fieldsErrors}))??this.$slots.defalut}}),H=(e,u)=>{const a=r.defineComponent({props:{schema:{type:[Array,Function],required:!0}},setup(f,{slots:s}){const t=r.inject(e);if(t!=null&&t.formData)return()=>{var i;const l=typeof f.schema=="function"?f.schema(t):f.schema;let o;return l.reduce((n,h)=>{const y=typeof h=="function"?h(t):h,{vvIs:b,vvName:m,vvSlots:v,vvChildren:x,vvIf:p,vvElseIf:g,vvType:_,vvDefaultValue:N,vvShowValid:R,vvContent:c,...C}=y;if(p!==void 0){if(typeof p=="string"?o=!!S(Object(t.formData.value),p):typeof p=="function"?o=r.unref(p(t)):o=r.unref(p),!o)return n}else if(g!==void 0&&o!==void 0){if(o||(typeof g=="string"?o=!!S(Object(t.formData.value),g):typeof g=="function"?o=r.unref(g(t)):o=r.unref(g),!o))return n}else o=void 0;const O=x?r.h(a,{schema:x}):void 0;return m?(n.push(r.h(u,{name:m,is:b,type:_,defaultValue:N,showValid:R,props:C},v??O??c)),n):b?(n.push(r.h(b,C,v??O??c)),n):(x&&n.push(O),n)},[(i=s==null?void 0:s.default)==null?void 0:i.call(s,{formData:t==null?void 0:t.formData.value,submit:t==null?void 0:t.submit,validate:t==null?void 0:t.validate,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 a},A=(e,u={})=>{const a=Symbol(),f=Symbol(),s=Symbol(),t=z(a,f),l=P(a,f,s,u),o=H(a,l),{VvForm:i,errors:n,status:h,formData:y}=T(e,a,u,o);return{VvForm:i,VvFormWrapper:t,VvFormField:l,VvFormTemplate:o,formInjectionKey:a,formWrapperInjectionKey:f,formFieldInjectionKey:s,errors:n,status:h,formData:y}},B=Symbol(),Q=e=>{let u={};return e.schema&&(u=A(e.schema,e)),{...u,install(a,{global:f=!1}={}){a.provide(B,e),f&&(a.config.globalProperties.$vvForm=e,u!=null&&u.VvForm&&a.component("VvForm",u.VvForm),u!=null&&u.VvFormWrapper&&a.component("VvFormWrapper",u.VvFormWrapper),u!=null&&u.VvFormField&&a.component("VvFormField",u.VvFormField),u!=null&&u.VvFormTemplate&&a.component("VvFormTemplate",u.VvFormTemplate))}}},X=(e,u={})=>r.getCurrentInstance()?A(e,{...r.inject(B,{}),...u}):A(e,u),Y=(e,u={})=>A(e,u);V.FormFieldType=d,V.createForm=Q,V.defaultObjectBySchema=E,V.formFactory=Y,V.pluginInjectionKey=B,V.useForm=X,Object.defineProperty(V,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(b,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):(b=typeof globalThis<"u"?globalThis:b||self,r(b["@volverjs/form-vue"]={},b.Vue,b.VueUseCore,b.zod))})(this,function(b,r,q,g){"use strict";function $(e){return Array.isArray(e)}function M(e){return typeof e<"u"}function L(e){return e===null}function W(e){return typeof e=="object"}function Z(e){return typeof e=="string"}function S(e){return typeof e>"u"}const J=/^[0-9]+$/,P=["__proto__","prototype","constructor"];function I(e,i,a){const f=M(a)?a:void 0;if(!W(e)||!Z(i))return f;const s=K(i);if(s.length!==0){for(const t of s){if(t==="*")continue;const l=function(o){return o.map(u=>S(u)||L(u)?u:$(u)?l(u):u[t])};if($(e)&&!J.test(t)?e=l(e):e=e[t],S(e)||L(e))break}return S(e)?f:e}}function R(e,i,a){if(!W(e)||!Z(i))return;const f=K(i);if(f.length===0)return;const s=f.length;for(let t=0;t<s;t++){const l=f[t];if(t===s-1){e[l]=a;return}if(l==="*"&&$(e)){const o=f.slice(t+1).join(".");for(const u of e)R(u,o,a);return}S(e[l])&&(e[l]={}),e=e[l]}}function K(e){const i=e.split(/[.]|(?:\[(\d|\*)\])/).filter(a=>!!a);return i.some(a=>P.indexOf(a)!==-1)?[]:i}var d=(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="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))(d||{}),E=(e=>(e.invalid="invalid",e.valid="valid",e))(E||{});const T=(e,i,a,f)=>r.defineComponent({name:"FieldComponent",props:{type:{type:String,validator:s=>Object.values(d).includes(s),default:d.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}},emits:["invalid","valid","update:formData","update:modelValue"],expose:["invalid","invalidLabel","errors"],setup(s,{slots:t,emit:l}){const o=r.computed({get(){if(n!=null&&n.formData)return I(Object(n.formData.value),String(s.name))},set(m){n!=null&&n.formData&&(R(Object(n.formData.value),String(s.name),m),l("update:modelValue",{newValue:o.value,formData:n==null?void 0:n.formData}))}});r.onMounted(()=>{o.value===void 0&&s.defaultValue!==void 0&&(o.value=s.defaultValue)}),r.onBeforeUnmount(()=>{O(),x()});const u=r.inject(i,void 0);u&&u.fields.value.add(s.name);const n=r.inject(e),{props:c,name:y}=r.toRefs(s),V=r.computed(()=>{if(n!=null&&n.errors.value)return I(n.errors.value,String(s.name))}),v=r.computed(()=>{var m;return(m=V.value)==null?void 0:m._errors}),h=r.computed(()=>V.value!==void 0),O=r.watch(h,()=>{h.value?(l("invalid",v.value),u&&u.errors.value.set(s.name,{_errors:v.value})):(l("valid",o.value),u&&u.errors.value.delete(s.name))}),x=r.watch(()=>n==null?void 0:n.formData,()=>{l("update:formData",n==null?void 0:n.formData)},{deep:!0}),p=m=>{o.value=m},w=r.computed(()=>{let m=c.value;return typeof m=="function"&&(m=m(n==null?void 0:n.formData)),Object.keys(m).reduce((C,k)=>(C[k]=r.unref(m[k]),C),{})}),N=r.computed(()=>({...w.value,name:w.value.name??s.name,invalid:h.value,valid:s.showValid?!!(!h.value&&o.value):void 0,type:(m=>{if([d.text,d.number,d.email,d.password,d.tel,d.url,d.search,d.date,d.time,d.datetimeLocal,d.month,d.week,d.color].includes(m))return m})(s.type),invalidLabel:v.value,modelValue:o.value,"onUpdate:modelValue":p}));return r.provide(a,{name:r.readonly(y),errors:r.readonly(V)}),{component:r.computed(()=>{if(s.type===d.custom)return{render(){var m;return((m=t.default)==null?void 0:m.call(t,{modelValue:o.value,onUpdate:p,submit:n==null?void 0:n.submit,validate:n==null?void 0:n.validate,invalid:h.value,invalidLabel:v.value,formData:n==null?void 0:n.formData.value,formErrors:n==null?void 0:n.errors.value,errors:V.value}))??t.defalut}};if(!((f==null?void 0:f.lazyLoad)??s.lazyLoad)){let m;switch(s.type){case d.select:m=r.resolveComponent("VvSelect");break;case d.checkbox:m=r.resolveComponent("VvCheckbox");break;case d.radio:m=r.resolveComponent("VvRadio");break;case d.textarea:m=r.resolveComponent("VvTextarea");break;case d.radioGroup:m=r.resolveComponent("VvRadioGroup");break;case d.checkboxGroup:m=r.resolveComponent("VvCheckboxGroup");break;case d.combobox:m=r.resolveComponent("VvCombobox");break;default:m=r.resolveComponent("VvInputText")}if(typeof m!="string")return m;console.warn(`[form-vue warn]: ${m} not found, the component will be loaded asynchronously. To avoid this warning, please set "lazyLoad" option.`)}return r.defineAsyncComponent(async()=>{switch(f!=null&&f.sideEffects&&await Promise.resolve(f.sideEffects(s.type)),s.type){case d.textarea:return import("@volverjs/ui-vue/vv-textarea");case d.radio:return import("@volverjs/ui-vue/vv-radio");case d.radioGroup:return import("@volverjs/ui-vue/vv-radio-group");case d.checkbox:return import("@volverjs/ui-vue/vv-checkbox");case d.checkboxGroup:return import("@volverjs/ui-vue/vv-checkbox-group");case d.select:return import("@volverjs/ui-vue/vv-select");case d.combobox:return import("@volverjs/ui-vue/vv-combobox")}return import("@volverjs/ui-vue/vv-input-text")})}),hasProps:N,invalid:h}},render(){return this.is?r.h(this.is,this.hasProps,this.$slots):this.type===d.custom?r.h(this.component,null,this.$slots):r.h(this.component,this.hasProps,this.$slots)}}),A=(e,i={})=>{const a=t=>{let l=t;for(;l instanceof g.ZodEffects;)l=l.innerType();return l instanceof g.ZodOptional&&(l=l._def.innerType),l},f=a(e);return{...(f instanceof g.ZodObject?f._def.unknownKeys==="passthrough":!1)?i:{},...Object.fromEntries(Object.entries(f.shape).map(([t,l])=>{const o=i[t];let u=a(l),n;if(u instanceof g.ZodDefault&&(n=u._def.defaultValue(),u=u._def.innerType),o===null&&u instanceof g.ZodNullable)return[t,o];if(u instanceof g.ZodSchema){const c=l.safeParse(o);if(c.success)return[t,c.data??n]}if(u instanceof g.ZodArray&&Array.isArray(o)&&o.length){const c=a(u._def.type);if(c instanceof g.ZodObject)return[t,o.map(y=>A(c,y&&typeof y=="object"?y:void 0))??n]}return u instanceof g.ZodObject?[t,A(u,o&&typeof o=="object"?o:n)]:[t,n]}))}},z=(e,i,a,f)=>{const s=r.ref(),t=r.ref(),l=r.ref(),o=r.defineComponent({name:"FormComponent",props:{modelValue:{type:Object,default:()=>({})},updateThrottle:{type:Number,default:500},continuosValidation:{type:Boolean,default:!1},template:{type:[Array,Function],default:void 0}},emits:["invalid","valid","submit","update:modelValue"],expose:["submit","validate","errors","status","valid","invalid"],setup(u,{emit:n}){l.value=A(e,r.toRaw(u.modelValue)),r.watch(()=>u.modelValue,v=>{if(v){const h=r.isProxy(v)?r.toRaw(v):v;l.value=typeof(h==null?void 0:h.clone)=="function"?h.clone():JSON.parse(JSON.stringify(h))}},{deep:!0}),q.watchThrottled(l,v=>{var h;((s.value||(a==null?void 0:a.continuosValidation))??u.continuosValidation)&&c(),(!v||!u.modelValue||JSON.stringify(v)!==JSON.stringify(u.modelValue))&&(n("update:modelValue",v),(h=a==null?void 0:a.onUpdate)==null||h.call(a,r.toRaw(v)))},{deep:!0,throttle:(a==null?void 0:a.updateThrottle)??u.updateThrottle});const c=(v=l.value)=>{var O,x,p;const h=e.safeParse(v);return h.success?(s.value=void 0,t.value=E.valid,l.value=h.data,n("update:modelValue",l.value),(x=a==null?void 0:a.onUpdate)==null||x.call(a,r.toRaw(l.value)),n("valid",h.data),(p=a==null?void 0:a.onValid)==null||p.call(a,r.toRaw(l.value)),!0):(s.value=h.error.format(),t.value=E.invalid,n("invalid",s.value),(O=a==null?void 0:a.onInvalid)==null||O.call(a,r.toRaw(s.value)),!1)},y=()=>{var v;return c()?(n("submit",l.value),(v=a==null?void 0:a.onSubmit)==null||v.call(a,r.toRaw(l.value)),!0):!1},V=r.computed(()=>t.value===E.invalid);return r.provide(i,{formData:l,submit:y,validate:c,errors:r.readonly(s),status:r.readonly(t),invalid:V}),{formData:l,submit:y,validate:c,errors:r.readonly(s),status:r.readonly(t),invalid:V}},render(){const u=()=>{var n,c;return((c=(n=this.$slots)==null?void 0:n.default)==null?void 0:c.call(n,{formData:this.formData,submit:this.submit,validate:this.validate,errors:this.errors,status:this.status,invalid:this.invalid}))??this.$slots.default};return r.h("form",{onSubmit:r.withModifiers(this.submit,["prevent"])},(this.template??(a==null?void 0:a.template))&&f?[r.h(f,{schema:this.template??(a==null?void 0:a.template)},{default:u})]:{default:u})}});return{errors:s,status:t,formData:l,VvForm:o}},H=(e,i)=>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:s}){const t=r.inject(e),l=r.inject(i,void 0),o=r.ref(new Set),u=r.ref(new Map),{name:n}=r.toRefs(f);r.provide(i,{name:r.readonly(n),errors:u,fields:o}),r.watch(o,y=>{l!=null&&l.fields&&y.forEach(V=>{l==null||l.fields.value.add(V)})},{deep:!0}),r.watch(()=>new Map(u.value),(y,V)=>{l!=null&&l.errors&&(Array.from(V.keys()).forEach(v=>{l.errors.value.delete(v)}),Array.from(y.keys()).forEach(v=>{const h=y.get(v);h&&l.errors.value.set(v,h)}))},{deep:!0});const c=r.computed(()=>t!=null&&t.invalid.value?u.value.size>0:!1);return r.watch(c,()=>{c.value?s("invalid"):s("valid")}),{formData:t==null?void 0:t.formData,errors:t==null?void 0:t.errors,submit:t==null?void 0:t.submit,validate:t==null?void 0:t.validate,invalid:c,fields:o,fieldsErrors:u}},render(){var f,s;return this.tag?r.h(this.tag,null,{default:()=>{var t,l;return((l=(t=this.$slots).default)==null?void 0:l.call(t,{invalid:this.invalid,formData:this.formData,submit:this.submit,validate:this.validate,errors:this.errors,fieldsErrors:this.fieldsErrors}))??this.$slots.defalut}}):((s=(f=this.$slots).default)==null?void 0:s.call(f,{invalid:this.invalid,formData:this.formData,submit:this.submit,validate:this.validate,errors:this.errors,fieldsErrors:this.fieldsErrors}))??this.$slots.defalut}}),Q=(e,i)=>{const a=r.defineComponent({props:{schema:{type:[Array,Function],required:!0}},setup(f,{slots:s}){const t=r.inject(e);if(t!=null&&t.formData)return()=>{var n;const l=typeof f.schema=="function"?f.schema(t):f.schema;let o;const u=l.reduce((c,y)=>{const V=typeof y=="function"?y(t):y,{vvIs:v,vvName:h,vvSlots:O,vvChildren:x,vvIf:p,vvElseIf:w,vvType:N,vvDefaultValue:U,vvShowValid:m,vvContent:C,...k}=V;if(p!==void 0){if(typeof p=="string"?o=!!I(Object(t.formData.value),p):typeof p=="function"?o=r.unref(p(t)):o=r.unref(p),!o)return c}else if(w!==void 0&&o!==void 0){if(o||(typeof w=="string"?o=!!I(Object(t.formData.value),w):typeof w=="function"?o=r.unref(w(t)):o=r.unref(w),!o))return c}else o=void 0;const G=x?r.h(a,{schema:x}):void 0;return h?(c.push(r.h(i,{name:h,is:v,type:N,defaultValue:U,showValid:m,props:k},O??G??C)),c):v?(c.push(r.h(v,k,O??G??C)),c):(x&&c.push(G),c)},[]);return u.push((n=s==null?void 0:s.default)==null?void 0:n.call(s,{formData:t==null?void 0:t.formData.value,submit:t==null?void 0:t.submit,validate:t==null?void 0:t.validate,errors:t==null?void 0:t.errors.value,status:t==null?void 0:t.status.value,invalid:t==null?void 0:t.invalid.value})),u}}});return a},_=(e,i={})=>{const a=Symbol(),f=Symbol(),s=Symbol(),t=H(a,f),l=T(a,f,s,i),o=Q(a,l),{VvForm:u,errors:n,status:c,formData:y}=z(e,a,i,o);return{VvForm:u,VvFormWrapper:t,VvFormField:l,VvFormTemplate:o,formInjectionKey:a,formWrapperInjectionKey:f,formFieldInjectionKey:s,errors:n,status:c,formData:y}},B=Symbol(),X=e=>{let i={};return e.schema&&(i=_(e.schema,e)),{...i,install(a,{global:f=!1}={}){a.provide(B,e),f&&(a.config.globalProperties.$vvForm=e,i!=null&&i.VvForm&&a.component("VvForm",i.VvForm),i!=null&&i.VvFormWrapper&&a.component("VvFormWrapper",i.VvFormWrapper),i!=null&&i.VvFormField&&a.component("VvFormField",i.VvFormField),i!=null&&i.VvFormTemplate&&a.component("VvFormTemplate",i.VvFormTemplate))}}},Y=(e,i={})=>r.getCurrentInstance()?_(e,{...r.inject(B,{}),...i}):_(e,i),D=(e,i={})=>_(e,i);b.FormFieldType=d,b.createForm=X,b.defaultObjectBySchema=A,b.formFactory=D,b.pluginInjectionKey=B,b.useForm=Y,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -14,13 +14,13 @@ export declare const defineForm: <Schema extends FormSchema>(schema: Schema, pro
|
|
|
14
14
|
$: import("vue").ComponentInternalInstance;
|
|
15
15
|
$data: {};
|
|
16
16
|
$props: {
|
|
17
|
+
template?: FormTemplate<Schema> | undefined;
|
|
17
18
|
modelValue?: Record<string, any> | undefined;
|
|
18
19
|
updateThrottle?: number | undefined;
|
|
19
20
|
continuosValidation?: boolean | undefined;
|
|
20
21
|
onInvalid?: ((...args: any[]) => any) | undefined;
|
|
21
22
|
onValid?: ((...args: any[]) => any) | undefined;
|
|
22
23
|
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
23
|
-
readonly template?: FormTemplate<Schema> | undefined;
|
|
24
24
|
key?: string | number | symbol | undefined;
|
|
25
25
|
onSubmit?: ((...args: any[]) => any) | undefined;
|
|
26
26
|
ref?: import("vue").VNodeRef | undefined;
|
|
@@ -95,6 +95,7 @@ export declare const defineForm: <Schema extends FormSchema>(schema: Schema, pro
|
|
|
95
95
|
};
|
|
96
96
|
template: {
|
|
97
97
|
type: PropType<FormTemplate<Schema>>;
|
|
98
|
+
default: undefined;
|
|
98
99
|
};
|
|
99
100
|
}>> & {
|
|
100
101
|
onInvalid?: ((...args: any[]) => any) | undefined;
|
|
@@ -109,6 +110,7 @@ export declare const defineForm: <Schema extends FormSchema>(schema: Schema, pro
|
|
|
109
110
|
status: Readonly<Ref<FormStatus | undefined>>;
|
|
110
111
|
invalid: import("vue").ComputedRef<boolean>;
|
|
111
112
|
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("invalid" | "valid" | "update:modelValue" | "submit")[], string, {
|
|
113
|
+
template: FormTemplate<Schema>;
|
|
112
114
|
modelValue: Record<string, any>;
|
|
113
115
|
updateThrottle: number;
|
|
114
116
|
continuosValidation: boolean;
|
|
@@ -147,6 +149,7 @@ export declare const defineForm: <Schema extends FormSchema>(schema: Schema, pro
|
|
|
147
149
|
};
|
|
148
150
|
template: {
|
|
149
151
|
type: PropType<FormTemplate<Schema>>;
|
|
152
|
+
default: undefined;
|
|
150
153
|
};
|
|
151
154
|
}>> & {
|
|
152
155
|
onInvalid?: ((...args: any[]) => any) | undefined;
|
|
@@ -179,6 +182,7 @@ export declare const defineForm: <Schema extends FormSchema>(schema: Schema, pro
|
|
|
179
182
|
};
|
|
180
183
|
template: {
|
|
181
184
|
type: PropType<FormTemplate<Schema>>;
|
|
185
|
+
default: undefined;
|
|
182
186
|
};
|
|
183
187
|
}>> & {
|
|
184
188
|
onInvalid?: ((...args: any[]) => any) | undefined;
|
|
@@ -193,6 +197,7 @@ export declare const defineForm: <Schema extends FormSchema>(schema: Schema, pro
|
|
|
193
197
|
status: Readonly<Ref<FormStatus | undefined>>;
|
|
194
198
|
invalid: import("vue").ComputedRef<boolean>;
|
|
195
199
|
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("invalid" | "valid" | "update:modelValue" | "submit")[], "invalid" | "valid" | "update:modelValue" | "submit", {
|
|
200
|
+
template: FormTemplate<Schema>;
|
|
196
201
|
modelValue: Record<string, any>;
|
|
197
202
|
updateThrottle: number;
|
|
198
203
|
continuosValidation: boolean;
|