@volverjs/form-vue 1.0.0-beta.9 → 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/index.umd.js CHANGED
@@ -1 +1 @@
1
- (function(w,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):(w=typeof globalThis<"u"?globalThis:w||self,e(w["@volverjs/form-vue"]={},w.Vue,w.VueUseCore,w.zod))})(this,function(w,e,$,k){"use strict";function N(r){return Array.isArray(r)}function J(r){return typeof r<"u"}function G(r){return r===null}function L(r){return typeof r=="object"}function Z(r){return typeof r=="string"}function A(r){return typeof r>"u"}const M=/^[0-9]+$/,P=["__proto__","prototype","constructor"];function E(r,u,a){const d=J(a)?a:void 0;if(!L(r)||!Z(u))return d;const i=q(u);if(i.length!==0){for(const t of i){if(t==="*")continue;const s=function(l){return l.map(f=>A(f)||G(f)?f:N(f)?s(f):f[t])};if(N(r)&&!M.test(t)?r=s(r):r=r[t],A(r)||G(r))break}return A(r)?d:r}}function K(r,u,a){if(!L(r)||!Z(u))return;const d=q(u);if(d.length===0)return;const i=d.length;for(let t=0;t<i;t++){const s=d[t];if(t===i-1){r[s]=a;return}if(s==="*"&&N(r)){const l=d.slice(t+1).join(".");for(const f of r)K(f,l,a);return}A(r[s])&&(r[s]={}),r=r[s]}}function q(r){const u=r.split(/[.]|(?:\[(\d|\*)\])/).filter(a=>!!a);return u.some(a=>P.indexOf(a)!==-1)?[]:u}var c=(r=>(r.text="text",r.number="number",r.email="email",r.password="password",r.tel="tel",r.url="url",r.search="search",r.date="date",r.time="time",r.datetimeLocal="datetime-local",r.month="month",r.week="week",r.color="color",r.select="select",r.checkbox="checkbox",r.radio="radio",r.textarea="textarea",r.radioGroup="radioGroup",r.checkboxGroup="checkboxGroup",r.combobox="combobox",r.custom="custom",r))(c||{}),O=(r=>(r.invalid="invalid",r.valid="valid",r.submitting="submitting",r.updated="updated",r.unknown="unknown",r))(O||{});const z=(r,u,a,d)=>e.defineComponent({name:"VvFormField",props:{type:{type:String,validator:i=>Object.values(c).includes(i),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},lazyLoad:{type:Boolean,default:!1},readonly:{type:Boolean,default:void 0}},emits:["invalid","valid","update:formData","update:modelValue"],expose:["invalid","invalidLabel","errors"],setup(i,{slots:t,emit:s}){const l=e.computed({get(){if(n!=null&&n.formData)return E(Object(n.formData.value),String(i.name))},set(o){n!=null&&n.formData&&(K(Object(n.formData.value),String(i.name),o),s("update:modelValue",{newValue:l.value,formData:n==null?void 0:n.formData}))}});e.onMounted(()=>{l.value===void 0&&i.defaultValue!==void 0&&(l.value=i.defaultValue)}),e.onBeforeUnmount(()=>{y(),h()});const f=e.inject(u,void 0);f&&f.fields.value.add(i.name);const n=e.inject(r),{props:m,name:V}=e.toRefs(i),p=e.computed(()=>{if(n!=null&&n.errors.value)return E(n.errors.value,String(i.name))}),g=e.computed(()=>{var o;return(o=p.value)==null?void 0:o._errors}),v=e.computed(()=>p.value!==void 0),y=e.watch(v,()=>{v.value?(s("invalid",g.value),f&&f.errors.value.set(i.name,{_errors:g.value})):(s("valid",l.value),f&&f.errors.value.delete(i.name))}),h=e.watch(()=>n==null?void 0:n.formData,()=>{s("update:formData",n==null?void 0:n.formData)},{deep:!0}),b=o=>{l.value=o},x=e.computed(()=>{let o=m.value;return typeof o=="function"&&(o=o(n==null?void 0:n.formData)),Object.keys(o).reduce((U,I)=>(U[I]=e.unref(o[I]),U),{})}),S=e.computed(()=>n!=null&&n.readonly.value?!0:x.value.readonly??i.readonly),C=e.computed(()=>({...x.value,name:x.value.name??i.name,invalid:v.value,valid:i.showValid?!!(!v.value&&l.value):void 0,type:(o=>{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(o))return o})(i.type),invalidLabel:g.value,modelValue:l.value,readonly:S.value,"onUpdate:modelValue":b}));return e.provide(a,{name:e.readonly(V),errors:e.readonly(p)}),{component:e.computed(()=>{if(i.type===c.custom)return{render(){var o;return((o=t.default)==null?void 0:o.call(t,{modelValue:l.value,onUpdate:b,submit:n==null?void 0:n.submit,validate:n==null?void 0:n.validate,invalid:v.value,invalidLabel:g.value,formData:n==null?void 0:n.formData.value,formErrors:n==null?void 0:n.errors.value,errors:p.value,readonly:S.value}))??t.defalut}};if(!((d==null?void 0:d.lazyLoad)??i.lazyLoad)){let o;switch(i.type){case c.select:o=e.resolveComponent("VvSelect");break;case c.checkbox:o=e.resolveComponent("VvCheckbox");break;case c.radio:o=e.resolveComponent("VvRadio");break;case c.textarea:o=e.resolveComponent("VvTextarea");break;case c.radioGroup:o=e.resolveComponent("VvRadioGroup");break;case c.checkboxGroup:o=e.resolveComponent("VvCheckboxGroup");break;case c.combobox:o=e.resolveComponent("VvCombobox");break;default:o=e.resolveComponent("VvInputText")}if(typeof o!="string")return o;console.warn(`[form-vue warn]: ${o} not found, the component will be loaded asynchronously. To avoid this warning, please set "lazyLoad" option.`)}return e.defineAsyncComponent(async()=>{switch(d!=null&&d.sideEffects&&await Promise.resolve(d.sideEffects(i.type)),i.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.select:return import("@volverjs/ui-vue/vv-select");case c.combobox:return import("@volverjs/ui-vue/vv-combobox")}return import("@volverjs/ui-vue/vv-input-text")})}),hasProps:C,invalid:v}},render(){return this.is?e.h(this.is,this.hasProps,this.$slots):this.type===c.custom?e.h(this.component,null,this.$slots):e.h(this.component,this.hasProps,this.$slots)}}),W=(r,u={})=>{const a=t=>{let s=t;for(;s instanceof k.ZodEffects;)s=s.innerType();return s instanceof k.ZodOptional&&(s=s._def.innerType),s},d=a(r);return{...(d instanceof k.ZodObject?d._def.unknownKeys==="passthrough":!1)?u:{},...Object.fromEntries(Object.entries(d.shape).map(([t,s])=>{const l=u[t];let f=a(s),n;if(f instanceof k.ZodDefault&&(n=f._def.defaultValue(),f=f._def.innerType),l===null&&f instanceof k.ZodNullable)return[t,l];if(f instanceof k.ZodSchema){const m=s.safeParse(l);if(m.success)return[t,m.data??n]}if(f instanceof k.ZodArray&&Array.isArray(l)&&l.length){const m=a(f._def.type);if(m instanceof k.ZodObject)return[t,l.map(V=>W(m,V&&typeof V=="object"?V:void 0))??n]}return f instanceof k.ZodObject?[t,W(f,l&&typeof l=="object"?l:n)]:[t,n]}))}},T=(r,u,a,d)=>{const i=e.ref(),t=e.ref(),s=e.computed(()=>t.value===O.invalid),l=e.ref(),f=e.ref(!1),n=async(v=l.value)=>{if(f.value)return!0;const y=await r.safeParseAsync(v);return y.success?(i.value=void 0,t.value=O.valid,l.value=y.data,!0):(i.value=y.error.format(),t.value=O.invalid,!1)},m=async()=>f.value||!await n()?!1:(t.value=O.submitting,!0),{ignoreUpdates:V,stop:p}=$.watchIgnorable(l,()=>{t.value=O.updated},{deep:!0,eventFilter:$.throttleFilter((a==null?void 0:a.updateThrottle)??500)}),g=e.defineComponent({name:"VvForm",props:{continuosValidation:{type:Boolean,default:!1},modelValue:{type:Object,default:()=>({})},readonly:{type:Boolean,default:(a==null?void 0:a.readonly)??!1},tag:{type:String,default:"form"},template:{type:[Array,Function],default:void 0}},emits:["invalid","valid","submit","update:modelValue","update:readonly"],expose:["submit","validate","errors","status","valid","invalid","readonly"],setup(v,{emit:y}){return l.value=W(r,e.toRaw(v.modelValue)),e.watch(()=>v.modelValue,h=>{if(h){const b=e.isProxy(h)?e.toRaw(h):h;if(JSON.stringify(b)===JSON.stringify(e.toRaw(l.value)))return;l.value=typeof(b==null?void 0:b.clone)=="function"?b.clone():JSON.parse(JSON.stringify(b))}},{deep:!0}),e.watch(t,async h=>{var b,x,S,C,R;if(h===O.invalid){const o=e.toRaw(i.value);y("invalid",o),(b=a==null?void 0:a.onInvalid)==null||b.call(a,o);return}if(h===O.valid){const o=e.toRaw(l.value);y("valid",o),(x=a==null?void 0:a.onValid)==null||x.call(a,o),y("update:modelValue",o),(S=a==null?void 0:a.onUpdate)==null||S.call(a,o);return}if(h===O.submitting){const o=e.toRaw(l.value);y("submit",o),(C=a==null?void 0:a.onSubmit)==null||C.call(a,o)}if(h===O.updated){if((i.value||a!=null&&a.continuosValidation||v.continuosValidation)&&await n(),!l.value||!v.modelValue||JSON.stringify(l.value)!==JSON.stringify(v.modelValue)){const o=e.toRaw(l.value);y("update:modelValue",o),(R=a==null?void 0:a.onUpdate)==null||R.call(a,o)}t.value===O.updated&&(t.value=O.unknown)}}),e.onMounted(()=>{f.value=v.readonly}),e.watch(()=>v.readonly,h=>{f.value=h}),e.watch(f,h=>{h!==v.readonly&&y("update:readonly",f.value)}),e.provide(u,{formData:l,submit:m,validate:n,ignoreUpdates:V,stopUpdatesWatch:p,errors:e.readonly(i),status:e.readonly(t),invalid:s,readonly:f}),{formData:l,submit:m,validate:n,ignoreUpdates:V,stopUpdatesWatch:p,errors:e.readonly(i),status:e.readonly(t),invalid:s,isReadonly:f}},render(){const v=()=>{var y,h;return((h=(y=this.$slots)==null?void 0:y.default)==null?void 0:h.call(y,{formData:this.formData,submit:this.submit,validate:this.validate,ignoreUpdates:this.ignoreUpdates,stopUpdatesWatch:this.stopUpdatesWatch,errors:this.errors,status:this.status,invalid:this.invalid,readonly:this.isReadonly}))??this.$slots.default};return e.h(this.tag,{onSubmit:e.withModifiers(this.submit,["prevent"])},(this.template??(a==null?void 0:a.template))&&d?[e.h(d,{schema:this.template??(a==null?void 0:a.template)},{default:v})]:{default:v})}});return{errors:i,status:t,invalid:s,readonly:f,formData:l,validate:n,submit:m,ignoreUpdates:V,stopUpdatesWatch:p,VvForm:g}},H=(r,u)=>e.defineComponent({name:"VvFormWrapper",props:{name:{type:String,required:!0},tag:{type:String,default:void 0}},emits:["invalid","valid"],expose:["fields","invalid"],setup(d,{emit:i}){const t=e.inject(r),s=e.inject(u,void 0),l=e.ref(new Set),f=e.ref(new Map),{name:n}=e.toRefs(d);e.provide(u,{name:e.readonly(n),errors:f,fields:l}),e.watch(l,V=>{s!=null&&s.fields&&V.forEach(p=>{s==null||s.fields.value.add(p)})},{deep:!0}),e.watch(()=>new Map(f.value),(V,p)=>{s!=null&&s.errors&&(Array.from(p.keys()).forEach(g=>{s.errors.value.delete(g)}),Array.from(V.keys()).forEach(g=>{const v=V.get(g);v&&s.errors.value.set(g,v)}))},{deep:!0});const m=e.computed(()=>t!=null&&t.invalid.value?f.value.size>0:!1);return e.watch(m,()=>{m.value?i("invalid"):i("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:m,fields:l,fieldsErrors:f}},render(){var d,i;return this.tag?e.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,submit:this.submit,validate:this.validate,errors:this.errors,fieldsErrors:this.fieldsErrors}))??this.$slots.defalut}}):((i=(d=this.$slots).default)==null?void 0:i.call(d,{invalid:this.invalid,formData:this.formData,submit:this.submit,validate:this.validate,errors:this.errors,fieldsErrors:this.fieldsErrors}))??this.$slots.defalut}}),Q=(r,u)=>{const a=e.defineComponent({name:"VvFormTemplate",props:{schema:{type:[Array,Function],required:!0}},setup(d,{slots:i}){const t=e.inject(r);if(t!=null&&t.formData)return()=>{var n;const s=typeof d.schema=="function"?d.schema(t):d.schema;let l;const f=s.reduce((m,V)=>{const p=typeof V=="function"?V(t):V,{vvIs:g,vvName:v,vvSlots:y,vvChildren:h,vvIf:b,vvElseIf:x,vvType:S,vvDefaultValue:C,vvShowValid:R,vvContent:o,...U}=p;if(b!==void 0){if(typeof b=="string"?l=!!E(Object(t.formData.value),b):typeof b=="function"?l=e.unref(b(t)):l=e.unref(b),!l)return m}else if(x!==void 0&&l!==void 0){if(l||(typeof x=="string"?l=!!E(Object(t.formData.value),x):typeof x=="function"?l=e.unref(x(t)):l=e.unref(x),!l))return m}else l=void 0;const I=h?e.h(a,{schema:h}):void 0;return v?(m.push(e.h(u,{name:v,is:g,type:S,defaultValue:C,showValid:R,props:U},y??I??o)),m):g?(m.push(e.h(g,U,y??I??o)),m):(h&&m.push(I),m)},[]);return f.push((n=i==null?void 0:i.default)==null?void 0:n.call(i,{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})),f}}});return a},B=(r,u={})=>{const a=Symbol(),d=Symbol(),i=Symbol(),t=H(a,d),s=z(a,d,i,u),l=Q(a,s),{VvForm:f,errors:n,status:m,invalid:V,readonly:p,formData:g,validate:v,submit:y,ignoreUpdates:h,stopUpdatesWatch:b}=T(r,a,u,l);return{VvForm:f,VvFormWrapper:t,VvFormField:s,VvFormTemplate:l,formInjectionKey:a,formWrapperInjectionKey:d,formFieldInjectionKey:i,errors:n,status:m,invalid:V,readonly:p,formData:g,validate:v,submit:y,ignoreUpdates:h,stopUpdatesWatch:b}},_=Symbol(),X=r=>{let u={};return r.schema&&(u=B(r.schema,r)),{...u,install(a,{global:d=!1}={}){a.provide(_,r),d&&(a.config.globalProperties.$vvForm=r,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))}}},Y=(r,u={})=>e.getCurrentInstance()?B(r,{...e.inject(_,{}),...u}):B(r,u),D=(r,u={})=>B(r,u);w.FormFieldType=c,w.createForm=X,w.defaultObjectBySchema=W,w.formFactory=D,w.pluginInjectionKey=_,w.useForm=Y,Object.defineProperty(w,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"})});
@@ -0,0 +1,93 @@
1
+ import { Component, DeepReadonly, Ref, RendererElement, RendererNode, VNode, WatchStopHandle } from 'vue';
2
+ import { z, AnyZodObject, ZodEffects, ZodOptional, ZodTypeAny, RefinementCtx } from 'zod';
3
+ import { IgnoredUpdater } from '@vueuse/core';
4
+ import { FormFieldType, FormStatus } from './enums';
5
+ type Depth = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
6
+ type DecrementDepth<D extends Depth[number]> = Depth[D];
7
+ export type EffectType<T extends ZodTypeAny, D extends Depth[number] = 10> = D extends 0 ? T : T | ZodOptional<T> | ZodEffects<EffectType<T, DecrementDepth<D>>>;
8
+ export type FormSchema = EffectType<AnyZodObject>;
9
+ export type FormFieldComponentOptions = {
10
+ lazyLoad?: boolean;
11
+ sideEffects?: (type: `${FormFieldType}`) => Promise<void> | void;
12
+ };
13
+ export type FormComponentOptions<Schema, Type> = {
14
+ updateThrottle?: number;
15
+ continuousValidation?: boolean;
16
+ readonly?: boolean;
17
+ template?: Schema extends FormSchema ? FormTemplate<Schema, Type> : never;
18
+ class?: Schema extends FormSchema ? new (data?: Partial<z.infer<Schema>>) => Type : never;
19
+ onUpdate?: Schema extends FormSchema ? (data?: undefined extends Type ? Partial<z.infer<Schema>> : Type) => void : never;
20
+ onSubmit?: Schema extends FormSchema ? (data?: undefined extends Type ? Partial<z.infer<Schema>> : Type) => void : never;
21
+ onReset?: Schema extends FormSchema ? (data?: undefined extends Type ? Partial<z.infer<Schema>> : Type) => void : never;
22
+ onInvalid?: Schema extends FormSchema ? (error?: z.inferFormattedError<Schema>) => void : never;
23
+ onValid?: Schema extends FormSchema ? (data?: undefined extends Type ? Partial<z.infer<Schema>> : Type) => void : never;
24
+ };
25
+ export type FormComposableOptions<Schema, Type> = FormFieldComponentOptions & FormComponentOptions<Schema, Type> & {
26
+ scope?: string;
27
+ };
28
+ type FormPluginOptionsSchema<T = Partial<z.infer<FormSchema>>> = {
29
+ schema?: FormSchema;
30
+ factory?: (data?: Partial<z.infer<FormSchema>>) => T;
31
+ };
32
+ export type FormPluginOptions = FormPluginOptionsSchema & FormComposableOptions<FormPluginOptionsSchema['schema'], FormPluginOptionsSchema['factory']>;
33
+ export type InjectedFormData<Schema extends FormSchema, Type> = {
34
+ formData: Ref<(undefined extends Type ? Partial<z.infer<Schema>> : Type) | undefined>;
35
+ errors: Readonly<Ref<DeepReadonly<z.inferFormattedError<Schema>> | undefined>>;
36
+ submit: () => Promise<boolean>;
37
+ validate: (formData?: undefined extends Type ? Partial<z.infer<Schema>> : Type, options?: {
38
+ fields?: Set<Path<z.infer<Schema>>>;
39
+ superRefine?: (arg: z.infer<Schema>, ctx: RefinementCtx) => void | Promise<void>;
40
+ }) => Promise<boolean>;
41
+ clear: () => void;
42
+ reset: () => void;
43
+ ignoreUpdates: IgnoredUpdater;
44
+ stopUpdatesWatch: WatchStopHandle;
45
+ status: Readonly<Ref<FormStatus | undefined>>;
46
+ invalid: Readonly<Ref<boolean>>;
47
+ readonly: Ref<boolean>;
48
+ wrappers: Map<string, InjectedFormWrapperData<Schema>>;
49
+ };
50
+ export type InjectedFormWrapperData<Schema extends FormSchema> = {
51
+ name: Readonly<Ref<string>>;
52
+ errors: Ref<Map<string, z.inferFormattedError<Schema>>>;
53
+ invalid: Readonly<Ref<boolean>>;
54
+ readonly: Readonly<Ref<boolean>>;
55
+ fields: Ref<Map<string, string>>;
56
+ };
57
+ export type InjectedFormFieldData<Schema extends FormSchema> = {
58
+ name: Readonly<Ref<Path<z.infer<Schema>>>>;
59
+ errors: Readonly<Ref<DeepReadonly<z.inferFormattedError<Schema>>>>;
60
+ };
61
+ export type InjectedFormFieldsGroupData<Schema extends FormSchema> = {
62
+ names: DeepReadonly<Ref<Path<z.infer<Schema>>[]>>;
63
+ errors: Readonly<Ref<DeepReadonly<Record<string, z.inferFormattedError<Schema>> | undefined>>>;
64
+ };
65
+ export type Primitive = null | undefined | string | number | boolean | symbol | bigint;
66
+ type IsTuple<T extends readonly any[]> = number extends T['length'] ? false : true;
67
+ type TupleKeys<T extends readonly any[]> = Exclude<keyof T, keyof any[]>;
68
+ export type PathConcat<TKey extends string | number, TValue> = TValue extends Primitive ? `${TKey}` : `${TKey}` | `${TKey}.${Path<TValue>}`;
69
+ export type Path<T> = T extends readonly (infer V)[] ? IsTuple<T> extends true ? {
70
+ [K in TupleKeys<T>]-?: PathConcat<K & string, T[K]>;
71
+ }[TupleKeys<T>] : PathConcat<number, V> : {
72
+ [K in keyof T]-?: PathConcat<K & string, T[K]>;
73
+ }[keyof T];
74
+ export type PathValue<T, TPath extends Path<T> | Path<T>[]> = T extends any ? TPath extends `${infer K}.${infer R}` ? K extends keyof T ? R extends Path<T[K]> ? undefined extends T[K] ? PathValue<T[K], R> | undefined : PathValue<T[K], R> : never : K extends `${number}` ? T extends readonly (infer V)[] ? PathValue<V, R & Path<V>> : never : never : TPath extends keyof T ? T[TPath] : TPath extends `${number}` ? T extends readonly (infer V)[] ? V : never : never : never;
75
+ export type AnyBoolean<Schema extends FormSchema, Type> = boolean | Ref<boolean> | ((data?: InjectedFormData<Schema, Type>) => boolean | Ref<boolean>);
76
+ export type SimpleFormTemplateItem<Schema extends FormSchema, Type> = Record<string, any> & {
77
+ vvIs?: string | Component;
78
+ vvName?: Path<z.infer<Schema>>;
79
+ vvSlots?: Record<string, any>;
80
+ vvChildren?: Array<SimpleFormTemplateItem<Schema, Type> | ((data?: InjectedFormData<Schema, Type>, scope?: Record<string, unknown>) => SimpleFormTemplateItem<Schema, Type>)> | ((data?: InjectedFormData<Schema, Type>, scope?: Record<string, unknown>) => Array<SimpleFormTemplateItem<Schema, Type> | ((data?: InjectedFormData<Schema, Type>, scope?: Record<string, unknown>) => SimpleFormTemplateItem<Schema, Type>)>);
81
+ vvIf?: AnyBoolean<Schema, Type> | Path<z.infer<Schema>>;
82
+ vvElseIf?: AnyBoolean<Schema, Type> | Path<z.infer<Schema>>;
83
+ vvType?: `${FormFieldType}`;
84
+ vvShowValid?: boolean;
85
+ vvContent?: string;
86
+ vvDefaultValue?: any;
87
+ };
88
+ export type FormTemplateItem<Schema extends FormSchema, Type = undefined> = SimpleFormTemplateItem<Schema, Type> | ((data?: InjectedFormData<Schema, Type>, scope?: Record<string, unknown>) => SimpleFormTemplateItem<Schema, Type>);
89
+ export type FormTemplate<Schema extends FormSchema, Type = undefined> = FormTemplateItem<Schema, Type>[] | ((data?: InjectedFormData<Schema, Type>, scope?: Record<string, unknown>) => FormTemplateItem<Schema, Type>[]);
90
+ export type RenderFunctionOutput = VNode<RendererNode, RendererElement, {
91
+ [key: string]: any;
92
+ }>;
93
+ export {};
@@ -0,0 +1,3 @@
1
+ import { z } from 'zod';
2
+ import { FormSchema } from './types';
3
+ export declare function defaultObjectBySchema<Schema extends FormSchema>(schema: Schema, original?: Partial<z.infer<Schema>> & Record<string, unknown>): Partial<z.infer<Schema>>;
package/package.json CHANGED
@@ -1,16 +1,10 @@
1
1
  {
2
2
  "name": "@volverjs/form-vue",
3
+ "type": "module",
4
+ "version": "1.0.1",
3
5
  "description": "Vue 3 Forms with @volverjs/ui-vue",
4
- "author": "8 Wave",
6
+ "author": "8 Wave S.r.l.",
5
7
  "license": "MIT",
6
- "keywords": [
7
- "form",
8
- "form-field",
9
- "form-wrapper",
10
- "vue3",
11
- "zod",
12
- "validation"
13
- ],
14
8
  "homepage": "https://github.com/volverjs/form-vue",
15
9
  "repository": {
16
10
  "type": "git",
@@ -19,52 +13,26 @@
19
13
  "bugs": {
20
14
  "url": "https://github.com/volverjs/form-vue/issues"
21
15
  },
22
- "version": "1.0.0-beta.9",
23
- "engines": {
24
- "node": ">= 16.x"
16
+ "keywords": [
17
+ "form",
18
+ "form-field",
19
+ "form-wrapper",
20
+ "vue3",
21
+ "zod",
22
+ "validation"
23
+ ],
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "import": "./dist/index.es.js",
28
+ "default": "./dist/index.umd.js"
29
+ },
30
+ "./src/*": "./src/*",
31
+ "./dist/*": "./dist/*"
25
32
  },
26
- "packageManager": "pnpm@8.7.5",
27
- "type": "module",
28
33
  "main": "./dist/index.js",
29
34
  "module": "./dist/index.js",
30
35
  "types": "./dist/index.d.ts",
31
- "files": [
32
- "dist",
33
- "src",
34
- "node",
35
- "*.d.ts"
36
- ],
37
- "dependencies": {
38
- "@volverjs/ui-vue": "0.0.10-beta.29",
39
- "@vueuse/core": "^10.9.0",
40
- "ts-dot-prop": "^2.1.3",
41
- "vue": "^3.4.21",
42
- "zod": "^3.22.4"
43
- },
44
- "devDependencies": {
45
- "@playwright/experimental-ct-vue": "1.42.1",
46
- "@testing-library/vue": "^8.0.3",
47
- "@typescript-eslint/eslint-plugin": "^7.3.1",
48
- "@vitejs/plugin-vue": "^5.0.4",
49
- "@volverjs/style": "^0.1.11",
50
- "@vue/compiler-sfc": "^3.4.21",
51
- "@vue/eslint-config-typescript": "^13.0.0",
52
- "@vue/runtime-core": "^3.4.21",
53
- "@vue/test-utils": "^2.4.5",
54
- "copy": "^0.3.2",
55
- "eslint": "^8.57.0",
56
- "eslint-config-prettier": "^9.1.0",
57
- "eslint-plugin-prettier": "^5.1.3",
58
- "eslint-plugin-vue": "^9.23.0",
59
- "happy-dom": "^14.3.1",
60
- "prettier": "^3.2.5",
61
- "typescript": "^5.4.3",
62
- "vite": "^5.2.2",
63
- "vite-plugin-dts": "^3.7.3",
64
- "vite-plugin-eslint": "^1.8.1",
65
- "vite-plugin-externalize-deps": "^0.8.0",
66
- "vitest": "^1.4.0"
67
- },
68
36
  "typesVersions": {
69
37
  "*": {
70
38
  "*": [
@@ -72,17 +40,49 @@
72
40
  ]
73
41
  }
74
42
  },
75
- "exports": {
76
- ".": {
77
- "types": "./dist/index.d.ts",
78
- "import": "./dist/index.es.js",
79
- "default": "./dist/index.umd.js"
80
- },
81
- "./src/*": "./src/*",
82
- "./dist/*": "./dist/*"
43
+ "files": [
44
+ "*.d.ts",
45
+ "dist",
46
+ "node",
47
+ "src"
48
+ ],
49
+ "engines": {
50
+ "node": ">= 16.x"
51
+ },
52
+ "peerDependencies": {
53
+ "@volverjs/ui-vue": "^0.0.x",
54
+ "@vueuse/core": "^13.x.x",
55
+ "ts-dot-prop": "^2.x.x",
56
+ "vue": "^3.5.x",
57
+ "zod": "^3.24.x"
58
+ },
59
+ "devDependencies": {
60
+ "@antfu/eslint-config": "^5.0.0",
61
+ "@nabla/vite-plugin-eslint": "^2.0.5",
62
+ "@playwright/experimental-ct-vue": "^1.54.1",
63
+ "@testing-library/vue": "^8.1.0",
64
+ "@vitejs/plugin-vue": "^6.0.0",
65
+ "@volverjs/style": "^0.1.20",
66
+ "@volverjs/ui-vue": "^0.0.9",
67
+ "@vue/compiler-sfc": "^3.5.18",
68
+ "@vue/runtime-core": "^3.5.18",
69
+ "@vue/test-utils": "^2.4.6",
70
+ "@vueuse/core": "^13.5.0",
71
+ "copy": "^0.3.2",
72
+ "eslint": "^9.31.0",
73
+ "happy-dom": "^18.0.1",
74
+ "ts-dot-prop": "^2.1.4",
75
+ "typescript": "^5.8.3",
76
+ "vite": "^7.0.6",
77
+ "vite-plugin-dts": "^4.5.4",
78
+ "vite-plugin-externalize-deps": "^0.9.0",
79
+ "vitest": "^3.2.4",
80
+ "vue": "^3.5.18",
81
+ "zod": "^3.24.4"
83
82
  },
84
83
  "scripts": {
85
- "lint": "eslint . --ext .js,.jsx,.ts,.tsx",
84
+ "lint": "eslint .",
85
+ "lint:fix": "eslint . --fix",
86
86
  "type-check": "tsc --noEmit",
87
87
  "dev": "vite build --watch",
88
88
  "build": "vite build",
@@ -90,6 +90,7 @@
90
90
  "test-vitest": "vitest run",
91
91
  "test-vitest-watch": "vitest",
92
92
  "test-playwright": "playwright test -c playwright-ct.config.ts",
93
+ "test-playwright:ui": "playwright test -c playwright-ct.config.ts --ui",
93
94
  "credits": "npx @opengovsg/credits-generator"
94
95
  }
95
96
  }