@volverjs/form-vue 1.1.0-beta.3 → 1.1.0-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.umd.js CHANGED
@@ -1,3 +1 @@
1
- (function(N,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("vue"),require("@vueuse/core")):typeof define=="function"&&define.amd?define(["exports","vue","@vueuse/core"],a):(N=typeof globalThis<"u"?globalThis:N||self,a(N["@volverjs/form-vue"]={},N.Vue,N.VueUseCore))})(this,function(N,a,q){"use strict";var S=(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))(S||{}),D=(e=>(e.invalid="invalid",e.valid="valid",e.submitting="submitting",e.reset="reset",e.updated="updated",e.unknown="unknown",e))(D||{}),z;(function(e){e.assertEqual=t=>{};function r(t){}e.assertIs=r;function n(t){throw new Error}e.assertNever=n,e.arrayToEnum=t=>{const i={};for(const s of t)i[s]=s;return i},e.getValidEnumValues=t=>{const i=e.objectKeys(t).filter(l=>typeof t[t[l]]!="number"),s={};for(const l of i)s[l]=t[l];return e.objectValues(s)},e.objectValues=t=>e.objectKeys(t).map(function(i){return t[i]}),e.objectKeys=typeof Object.keys=="function"?t=>Object.keys(t):t=>{const i=[];for(const s in t)Object.prototype.hasOwnProperty.call(t,s)&&i.push(s);return i},e.find=(t,i)=>{for(const s of t)if(i(s))return s},e.isInteger=typeof Number.isInteger=="function"?t=>Number.isInteger(t):t=>typeof t=="number"&&Number.isFinite(t)&&Math.floor(t)===t;function u(t,i=" | "){return t.map(s=>typeof s=="string"?`'${s}'`:s).join(i)}e.joinValues=u,e.jsonStringifyReplacer=(t,i)=>typeof i=="bigint"?i.toString():i})(z||(z={}));var H;(function(e){e.mergeShapes=(r,n)=>({...r,...n})})(H||(H={})),z.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),z.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);class A extends Error{get errors(){return this.issues}constructor(r){super(),this.issues=[],this.addIssue=u=>{this.issues=[...this.issues,u]},this.addIssues=(u=[])=>{this.issues=[...this.issues,...u]};const n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=r}format(r){const n=r||function(i){return i.message},u={_errors:[]},t=i=>{for(const s of i.issues)if(s.code==="invalid_union")s.unionErrors.map(t);else if(s.code==="invalid_return_type")t(s.returnTypeError);else if(s.code==="invalid_arguments")t(s.argumentsError);else if(s.path.length===0)u._errors.push(n(s));else{let l=u,d=0;for(;d<s.path.length;){const h=s.path[d];d===s.path.length-1?(l[h]=l[h]||{_errors:[]},l[h]._errors.push(n(s))):l[h]=l[h]||{_errors:[]},l=l[h],d++}}};return t(this),u}static assert(r){if(!(r instanceof A))throw new Error(`Not a ZodError: ${r}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,z.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(r=n=>n.message){const n={},u=[];for(const t of this.issues)if(t.path.length>0){const i=t.path[0];n[i]=n[i]||[],n[i].push(r(t))}else u.push(r(t));return{formErrors:u,fieldErrors:n}}get formErrors(){return this.flatten()}}A.create=e=>new A(e);function Q(e,r,n){function u(l,d){var h;Object.defineProperty(l,"_zod",{value:l._zod??{},enumerable:!1}),(h=l._zod).traits??(h.traits=new Set),l._zod.traits.add(e),r(l,d);for(const p in s.prototype)p in l||Object.defineProperty(l,p,{value:s.prototype[p].bind(l)});l._zod.constr=s,l._zod.def=d}const t=n?.Parent??Object;class i extends t{}Object.defineProperty(i,"name",{value:e});function s(l){var d;const h=n?.Parent?new i:this;u(h,l),(d=h._zod).deferred??(d.deferred=[]);for(const p of h._zod.deferred)p();return h}return Object.defineProperty(s,"init",{value:u}),Object.defineProperty(s,Symbol.hasInstance,{value:l=>n?.Parent&&l instanceof n.Parent?!0:l?._zod?.traits?.has(e)}),Object.defineProperty(s,"name",{value:e}),s}class me extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}const he={};function X(e){return he}function ye(e){const r=Object.values(e).filter(u=>typeof u=="number");return Object.entries(e).filter(([u,t])=>r.indexOf(+u)===-1).map(([u,t])=>t)}function ve(e,r){return typeof r=="bigint"?r.toString():r}function J(e){return typeof e=="string"?e:e?.message}function Y(e,r,n){const u={...e,path:e.path??[]};if(!e.message){const t=J(e.inst?._zod.def?.error?.(e))??J(r?.error?.(e))??J(n.customError?.(e))??J(n.localeError?.(e))??"Invalid input";u.message=t}return delete u.inst,delete u.continue,r?.reportInput||delete u.input,u}const ee=(e,r)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:r,enumerable:!1}),e.message=JSON.stringify(r,ve,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},te=Q("$ZodError",ee),re=Q("$ZodError",ee,{Parent:Error});function ne(e,r){const n=function(i){return i.message},u={_errors:[]},t=i=>{for(const s of i.issues)if(s.code==="invalid_union"&&s.errors.length)s.errors.map(l=>t({issues:l}));else if(s.code==="invalid_key")t({issues:s.issues});else if(s.code==="invalid_element")t({issues:s.issues});else if(s.path.length===0)u._errors.push(n(s));else{let l=u,d=0;for(;d<s.path.length;){const h=s.path[d];d===s.path.length-1?(l[h]=l[h]||{_errors:[]},l[h]._errors.push(n(s))):l[h]=l[h]||{_errors:[]},l=l[h],d++}}};return t(e),u}const be=(e=>(r,n,u)=>{const t=u?{...u,async:!1}:{async:!1},i=r._zod.run({value:n,issues:[]},t);if(i instanceof Promise)throw new me;return i.issues.length?{success:!1,error:new(e??te)(i.issues.map(s=>Y(s,t,X())))}:{success:!0,data:i.value}})(re),ge=(e=>async(r,n,u)=>{const t=u?Object.assign(u,{async:!0}):{async:!0};let i=r._zod.run({value:n,issues:[]},t);return i instanceof Promise&&(i=await i),i.issues.length?{success:!1,error:new e(i.issues.map(s=>Y(s,t,X())))}:{success:!0,data:i.value}})(re);class se{constructor(){this._map=new Map,this._idmap=new Map}add(r,...n){const u=n[0];if(this._map.set(r,u),u&&typeof u=="object"&&"id"in u){if(this._idmap.has(u.id))throw new Error(`ID ${u.id} already exists in the registry`);this._idmap.set(u.id,r)}return this}clear(){return this._map=new Map,this._idmap=new Map,this}remove(r){const n=this._map.get(r);return n&&typeof n=="object"&&"id"in n&&this._idmap.delete(n.id),this._map.delete(r),this}get(r){const n=r._zod.parent;if(n){const u={...this.get(n)??{}};delete u.id;const t={...u,...this._map.get(r)};return Object.keys(t).length?t:void 0}return this._map.get(r)}has(r){return this._map.has(r)}}function we(){return new se}const Oe=we();class ae{constructor(r){this.counter=0,this.metadataRegistry=r?.metadata??Oe,this.target=r?.target??"draft-2020-12",this.unrepresentable=r?.unrepresentable??"throw",this.override=r?.override??(()=>{}),this.io=r?.io??"output",this.seen=new Map}process(r,n={path:[],schemaPath:[]}){var u;const t=r._zod.def,i={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},s=this.seen.get(r);if(s)return s.count++,n.schemaPath.includes(r)&&(s.cycle=n.path),s.schema;const l={schema:{},count:1,cycle:void 0,path:n.path};this.seen.set(r,l);const d=r._zod.toJSONSchema?.();if(d)l.schema=d;else{const f={...n,schemaPath:[...n.schemaPath,r],path:n.path},w=r._zod.parent;if(w)l.ref=w,this.process(w,f),this.seen.get(w).isParent=!0;else{const v=l.schema;switch(t.type){case"string":{const o=v;o.type="string";const{minimum:c,maximum:m,format:b,patterns:O,contentEncoding:j}=r._zod.bag;if(typeof c=="number"&&(o.minLength=c),typeof m=="number"&&(o.maxLength=m),b&&(o.format=i[b]??b,o.format===""&&delete o.format),j&&(o.contentEncoding=j),O&&O.size>0){const V=[...O];V.length===1?o.pattern=V[0].source:V.length>1&&(l.schema.allOf=[...V.map(k=>({...this.target==="draft-7"?{type:"string"}:{},pattern:k.source}))])}break}case"number":{const o=v,{minimum:c,maximum:m,format:b,multipleOf:O,exclusiveMaximum:j,exclusiveMinimum:V}=r._zod.bag;typeof b=="string"&&b.includes("int")?o.type="integer":o.type="number",typeof V=="number"&&(o.exclusiveMinimum=V),typeof c=="number"&&(o.minimum=c,typeof V=="number"&&(V>=c?delete o.minimum:delete o.exclusiveMinimum)),typeof j=="number"&&(o.exclusiveMaximum=j),typeof m=="number"&&(o.maximum=m,typeof j=="number"&&(j<=m?delete o.maximum:delete o.exclusiveMaximum)),typeof O=="number"&&(o.multipleOf=O);break}case"boolean":{const o=v;o.type="boolean";break}case"bigint":{if(this.unrepresentable==="throw")throw new Error("BigInt cannot be represented in JSON Schema");break}case"symbol":{if(this.unrepresentable==="throw")throw new Error("Symbols cannot be represented in JSON Schema");break}case"null":{v.type="null";break}case"any":break;case"unknown":break;case"undefined":{if(this.unrepresentable==="throw")throw new Error("Undefined cannot be represented in JSON Schema");break}case"void":{if(this.unrepresentable==="throw")throw new Error("Void cannot be represented in JSON Schema");break}case"never":{v.not={};break}case"date":{if(this.unrepresentable==="throw")throw new Error("Date cannot be represented in JSON Schema");break}case"array":{const o=v,{minimum:c,maximum:m}=r._zod.bag;typeof c=="number"&&(o.minItems=c),typeof m=="number"&&(o.maxItems=m),o.type="array",o.items=this.process(t.element,{...f,path:[...f.path,"items"]});break}case"object":{const o=v;o.type="object",o.properties={};const c=t.shape;for(const O in c)o.properties[O]=this.process(c[O],{...f,path:[...f.path,"properties",O]});const m=new Set(Object.keys(c)),b=new Set([...m].filter(O=>{const j=t.shape[O]._zod;return this.io==="input"?j.optin===void 0:j.optout===void 0}));b.size>0&&(o.required=Array.from(b)),t.catchall?._zod.def.type==="never"?o.additionalProperties=!1:t.catchall?t.catchall&&(o.additionalProperties=this.process(t.catchall,{...f,path:[...f.path,"additionalProperties"]})):this.io==="output"&&(o.additionalProperties=!1);break}case"union":{const o=v;o.anyOf=t.options.map((c,m)=>this.process(c,{...f,path:[...f.path,"anyOf",m]}));break}case"intersection":{const o=v,c=this.process(t.left,{...f,path:[...f.path,"allOf",0]}),m=this.process(t.right,{...f,path:[...f.path,"allOf",1]}),b=j=>"allOf"in j&&Object.keys(j).length===1,O=[...b(c)?c.allOf:[c],...b(m)?m.allOf:[m]];o.allOf=O;break}case"tuple":{const o=v;o.type="array";const c=t.items.map((O,j)=>this.process(O,{...f,path:[...f.path,"prefixItems",j]}));if(this.target==="draft-2020-12"?o.prefixItems=c:o.items=c,t.rest){const O=this.process(t.rest,{...f,path:[...f.path,"items"]});this.target==="draft-2020-12"?o.items=O:o.additionalItems=O}t.rest&&(o.items=this.process(t.rest,{...f,path:[...f.path,"items"]}));const{minimum:m,maximum:b}=r._zod.bag;typeof m=="number"&&(o.minItems=m),typeof b=="number"&&(o.maxItems=b);break}case"record":{const o=v;o.type="object",o.propertyNames=this.process(t.keyType,{...f,path:[...f.path,"propertyNames"]}),o.additionalProperties=this.process(t.valueType,{...f,path:[...f.path,"additionalProperties"]});break}case"map":{if(this.unrepresentable==="throw")throw new Error("Map cannot be represented in JSON Schema");break}case"set":{if(this.unrepresentable==="throw")throw new Error("Set cannot be represented in JSON Schema");break}case"enum":{const o=v,c=ye(t.entries);c.every(m=>typeof m=="number")&&(o.type="number"),c.every(m=>typeof m=="string")&&(o.type="string"),o.enum=c;break}case"literal":{const o=v,c=[];for(const m of t.values)if(m===void 0){if(this.unrepresentable==="throw")throw new Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof m=="bigint"){if(this.unrepresentable==="throw")throw new Error("BigInt literals cannot be represented in JSON Schema");c.push(Number(m))}else c.push(m);if(c.length!==0)if(c.length===1){const m=c[0];o.type=m===null?"null":typeof m,o.const=m}else c.every(m=>typeof m=="number")&&(o.type="number"),c.every(m=>typeof m=="string")&&(o.type="string"),c.every(m=>typeof m=="boolean")&&(o.type="string"),c.every(m=>m===null)&&(o.type="null"),o.enum=c;break}case"file":{const o=v,c={type:"string",format:"binary",contentEncoding:"binary"},{minimum:m,maximum:b,mime:O}=r._zod.bag;m!==void 0&&(c.minLength=m),b!==void 0&&(c.maxLength=b),O?O.length===1?(c.contentMediaType=O[0],Object.assign(o,c)):o.anyOf=O.map(j=>({...c,contentMediaType:j})):Object.assign(o,c);break}case"transform":{if(this.unrepresentable==="throw")throw new Error("Transforms cannot be represented in JSON Schema");break}case"nullable":{const o=this.process(t.innerType,f);v.anyOf=[o,{type:"null"}];break}case"nonoptional":{this.process(t.innerType,f),l.ref=t.innerType;break}case"success":{const o=v;o.type="boolean";break}case"default":{this.process(t.innerType,f),l.ref=t.innerType,v.default=JSON.parse(JSON.stringify(t.defaultValue));break}case"prefault":{this.process(t.innerType,f),l.ref=t.innerType,this.io==="input"&&(v._prefault=JSON.parse(JSON.stringify(t.defaultValue)));break}case"catch":{this.process(t.innerType,f),l.ref=t.innerType;let o;try{o=t.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}v.default=o;break}case"nan":{if(this.unrepresentable==="throw")throw new Error("NaN cannot be represented in JSON Schema");break}case"template_literal":{const o=v,c=r._zod.pattern;if(!c)throw new Error("Pattern not found in template literal");o.type="string",o.pattern=c.source;break}case"pipe":{const o=this.io==="input"?t.in._zod.def.type==="transform"?t.out:t.in:t.out;this.process(o,f),l.ref=o;break}case"readonly":{this.process(t.innerType,f),l.ref=t.innerType,v.readOnly=!0;break}case"promise":{this.process(t.innerType,f),l.ref=t.innerType;break}case"optional":{this.process(t.innerType,f),l.ref=t.innerType;break}case"lazy":{const o=r._zod.innerType;this.process(o,f),l.ref=o;break}case"custom":{if(this.unrepresentable==="throw")throw new Error("Custom types cannot be represented in JSON Schema");break}}}}const h=this.metadataRegistry.get(r);return h&&Object.assign(l.schema,h),this.io==="input"&&I(r)&&(delete l.schema.examples,delete l.schema.default),this.io==="input"&&l.schema._prefault&&((u=l.schema).default??(u.default=l.schema._prefault)),delete l.schema._prefault,this.seen.get(r).schema}emit(r,n){const u={cycles:n?.cycles??"ref",reused:n?.reused??"inline",external:n?.external??void 0},t=this.seen.get(r);if(!t)throw new Error("Unprocessed schema. This is a bug in Zod.");const i=p=>{const f=this.target==="draft-2020-12"?"$defs":"definitions";if(u.external){const c=u.external.registry.get(p[0])?.id,m=u.external.uri??(O=>O);if(c)return{ref:m(c)};const b=p[1].defId??p[1].schema.id??`schema${this.counter++}`;return p[1].defId=b,{defId:b,ref:`${m("__shared")}#/${f}/${b}`}}if(p[1]===t)return{ref:"#"};const v=`#/${f}/`,o=p[1].schema.id??`__schema${this.counter++}`;return{defId:o,ref:v+o}},s=p=>{if(p[1].schema.$ref)return;const f=p[1],{ref:w,defId:v}=i(p);f.def={...f.schema},v&&(f.defId=v);const o=f.schema;for(const c in o)delete o[c];o.$ref=w};if(u.cycles==="throw")for(const p of this.seen.entries()){const f=p[1];if(f.cycle)throw new Error(`Cycle detected: #/${f.cycle?.join("/")}/<root>
2
-
3
- Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(const p of this.seen.entries()){const f=p[1];if(r===p[0]){s(p);continue}if(u.external){const v=u.external.registry.get(p[0])?.id;if(r!==p[0]&&v){s(p);continue}}if(this.metadataRegistry.get(p[0])?.id){s(p);continue}if(f.cycle){s(p);continue}if(f.count>1&&u.reused==="ref"){s(p);continue}}const l=(p,f)=>{const w=this.seen.get(p),v=w.def??w.schema,o={...v};if(w.ref===null)return;const c=w.ref;if(w.ref=null,c){l(c,f);const m=this.seen.get(c).schema;m.$ref&&f.target==="draft-7"?(v.allOf=v.allOf??[],v.allOf.push(m)):(Object.assign(v,m),Object.assign(v,o))}w.isParent||this.override({zodSchema:p,jsonSchema:v,path:w.path??[]})};for(const p of[...this.seen.entries()].reverse())l(p[0],{target:this.target});const d={};if(this.target==="draft-2020-12"?d.$schema="https://json-schema.org/draft/2020-12/schema":this.target==="draft-7"?d.$schema="http://json-schema.org/draft-07/schema#":console.warn(`Invalid target: ${this.target}`),u.external?.uri){const p=u.external.registry.get(r)?.id;if(!p)throw new Error("Schema is missing an `id` property");d.$id=u.external.uri(p)}Object.assign(d,t.def);const h=u.external?.defs??{};for(const p of this.seen.entries()){const f=p[1];f.def&&f.defId&&(h[f.defId]=f.def)}u.external||Object.keys(h).length>0&&(this.target==="draft-2020-12"?d.$defs=h:d.definitions=h);try{return JSON.parse(JSON.stringify(d))}catch{throw new Error("Error converting schema to JSON.")}}}function je(e,r){if(e instanceof se){const u=new ae(r),t={};for(const l of e._idmap.entries()){const[d,h]=l;u.process(h)}const i={},s={registry:e,uri:r?.uri,defs:t};for(const l of e._idmap.entries()){const[d,h]=l;i[d]=u.emit(h,{...r,external:s})}if(Object.keys(t).length>0){const l=u.target==="draft-2020-12"?"$defs":"definitions";i.__shared={[l]:t}}return{schemas:i}}const n=new ae(r);return n.process(e),n.emit(e,r)}function I(e,r){const n=r??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);const t=e._zod.def;switch(t.type){case"string":case"number":case"bigint":case"boolean":case"date":case"symbol":case"undefined":case"null":case"any":case"unknown":case"never":case"void":case"literal":case"enum":case"nan":case"file":case"template_literal":return!1;case"array":return I(t.element,n);case"object":{for(const i in t.shape)if(I(t.shape[i],n))return!0;return!1}case"union":{for(const i of t.options)if(I(i,n))return!0;return!1}case"intersection":return I(t.left,n)||I(t.right,n);case"tuple":{for(const i of t.items)if(I(i,n))return!0;return!!(t.rest&&I(t.rest,n))}case"record":return I(t.keyType,n)||I(t.valueType,n);case"map":return I(t.keyType,n)||I(t.valueType,n);case"set":return I(t.valueType,n);case"promise":case"optional":case"nonoptional":case"nullable":case"readonly":return I(t.innerType,n);case"lazy":return I(t.getter(),n);case"default":return I(t.innerType,n);case"prefault":return I(t.innerType,n);case"custom":return!1;case"transform":return!0;case"pipe":return I(t.in,n)||I(t.out,n);case"success":return!1;case"catch":return!1}throw new Error(`Unknown schema type: ${t.type}`)}const M=e=>e._def.typeName==="ZodObject",_e=e=>e._def.typeName==="ZodDefault",Se=e=>e._def.typeName==="ZodNullable",ke=e=>e._def.typeName==="ZodRecord",Ee=e=>e._def.typeName==="ZodArray",oe=e=>e._def.typeName==="ZodEffects",ie=e=>e._def.typeName==="ZodOptional",C=e=>{let r=e;for(;oe(r);)r=r.innerType();return ie(r)&&(r=r._def.innerType),r},Ve=e=>{let r=e;for(;oe(r);)r=r.innerType();return!!ie(r)};function xe(e){return Array.isArray(e)?"array":e===null?"null":typeof e}function Ie(e,r){const n=xe(e);return r.type?r.type===n||r.type==="integer"&&n==="number"&&Number.isInteger(e):!0}function T(e,r){if(e.anyOf&&Array.isArray(e.anyOf)){if(r!==void 0){for(const s of e.anyOf)if(Ie(r,s))return T(s,r);for(const s of e.anyOf){const l=s;if(!l.type||l.type==="object")return T(l,r)}}return T(e.anyOf[0],r)}if(e.type!=="object"||!e.properties)switch(e.type){case"string":return typeof r=="string"?r:e.default;case"number":case"integer":return typeof r=="number"?r:e.default;case"boolean":return typeof r=="boolean"?r:e.default;case"null":return r===null?r:e.default;case"array":return Array.isArray(r)&&e.items?r.map(s=>T(e.items,s)):e.default;default:return e.default}const n=e.properties,t=r&&typeof r=="object"&&!Array.isArray(r)?r:void 0,i={};for(const s in n){const l=t?.[s];i[s]=T(n[s],l)}if(t&&e.additionalProperties!==!1){const s=new Set(Object.keys(n));for(const[l,d]of Object.entries(t))s.has(l)||(i[l]=d)}return i}const U=e=>"_zod"in e;function F(e,r={}){if(U(e)){const t=je(e);if(t.type!=="object"||!t.properties)return r;const i=be(e,r);return T(t,i.success?i.data:r)}const n=C(e);return M(n)?{...n._def.unknownKeys==="passthrough"?r:{},...Object.fromEntries(("shape"in n?Object.entries(n.shape):[]).map(([t,i])=>{const s=r[t],l=Ve(i);let d=C(i),h;if(_e(d)&&(h=d._def.defaultValue(),d=d._def.innerType),s===null&&Se(d))return[t,s];if(s==null&&l)return[t,h];if(d){const p=i.safeParse(s);if(p.success)return[t,p.data??h]}if(Ee(d)&&Array.isArray(s)&&s.length){const p=C(d._def.type);if(M(p))return[t,s.map(f=>F(p,f&&typeof f=="object"?f:void 0))]}if(ke(d)&&s){const p=C(d._def.valueType);if(M(p))return[t,Object.keys(s).reduce((f,w)=>(f[w]=F(p,s[w]),f),{})]}return M(d)?[t,F(d,s&&typeof s=="object"?s:h)]:[t,h]}))}:r}const De=(e,r)=>U(e)?ge(e,r):e.safeParseAsync(r),Ne=(e,r)=>U(e)?ne(r):r.format(),Pe=(e,r)=>U(e)?ne(new te(r)):new A(r).format();function Re(e,r,n,u,t){const i=a.ref(),s=a.ref(),l=a.computed(()=>s.value===D.invalid),d=a.ref(),h=a.ref(!1);let p;const f=k=>{const x=F(e,k);if(n?.class){const y=n.class;return new y(x)}return x},w=async(k=d.value,x)=>{if(p=x?.fields,h.value)return!0;const y=await De(e,k);if(!y.success){if(s.value=D.invalid,!p?.size)return i.value=Ne(e,y.error),!1;const E=y.error.issues.filter(R=>p?.has(R.path.join(".")));return E.length?(i.value=Pe(e,E),!1):(i.value=void 0,!0)}return i.value=void 0,s.value=D.valid,d.value=f(y.data),!0},v=()=>{i.value=void 0,s.value=void 0,p=void 0},o=()=>{d.value=f(),v(),s.value=D.reset},c=async k=>h.value||!await w(void 0,k)?!1:(s.value=D.submitting,!0),{ignoreUpdates:m,stop:b}=q.watchIgnorable(d,()=>{s.value=D.updated},{deep:!0,eventFilter:q.throttleFilter(n?.updateThrottle??500)}),O=a.readonly(i),j=a.readonly(s),V=a.defineComponent({name:"VvForm",props:{continuousValidation:{type:Boolean,default:!1},modelValue:{type:Object,default:()=>({})},readonly:{type:Boolean,default:n?.readonly},tag:{type:String,default:"form"},template:{type:[Array,Function],default:void 0},superRefine:{type:Function,default:void 0},validateFields:{type:Array,default:void 0}},emits:["invalid","submit","update:modelValue","update:readonly","valid","reset"],expose:["errors","invalid","readonly","status","submit","tag","template","valid","validate","clear","reset"],slots:Object,setup(k,{emit:x}){return d.value=f(a.toRaw(k.modelValue)),a.watch(()=>k.modelValue,y=>{if(y){const E=a.isProxy(y)?a.toRaw(y):y;if(JSON.stringify(E)===JSON.stringify(a.toRaw(d.value)))return;d.value=typeof E?.clone=="function"?E.clone():JSON.parse(JSON.stringify(E))}},{deep:!0}),a.watch(s,async y=>{if(y===D.invalid){const E=a.toRaw(i.value);x("invalid",E),n?.onInvalid?.(E);return}if(y===D.valid){const E=a.toRaw(d.value);x("valid",E),n?.onValid?.(E),x("update:modelValue",E),n?.onUpdate?.(E);return}if(y===D.submitting){const E=a.toRaw(d.value);x("submit",E),n?.onSubmit?.(E);return}if(y===D.reset){const E=a.toRaw(d.value);x("reset",E),n?.onReset?.(E);return}if(y===D.updated){if((i.value||n?.continuousValidation||k.continuousValidation)&&await w(void 0,{superRefine:k.superRefine,fields:p??new Set(k.validateFields)}),!d.value||!k.modelValue||JSON.stringify(d.value)!==JSON.stringify(k.modelValue)){const E=a.toRaw(d.value);x("update:modelValue",E),n?.onUpdate?.(E)}s.value===D.updated&&(s.value=D.unknown)}}),a.onMounted(()=>{k.readonly!==void 0&&(h.value=k.readonly)}),a.watch(()=>k.readonly,y=>{h.value=y}),a.watch(h,y=>{y!==k.readonly&&x("update:readonly",h.value)}),a.provide(r,{clear:v,errors:O,formData:d,ignoreUpdates:m,invalid:l,readonly:h,reset:o,status:j,stopUpdatesWatch:b,submit:c,validate:w,wrappers:t}),{clear:v,errors:O,formData:d,ignoreUpdates:m,invalid:l,isReadonly:h,reset:o,status:j,stopUpdatesWatch:b,submit:()=>c({superRefine:k.superRefine,fields:new Set(k.validateFields)}),validate:w,wrappers:t}},render(){const k=()=>this.$slots?.default?.({errors:O.value,formData:d.value,invalid:l.value,readonly:h.value,status:j.value,wrappers:t,clear:v,ignoreUpdates:m,reset:o,stopUpdatesWatch:b,submit:c,validate:w})??this.$slots.default;return a.h(this.tag,{onSubmit:a.withModifiers(this.submit,["prevent"]),onReset:a.withModifiers(this.reset,["prevent"])},(this.template??n?.template)&&u?[a.h(u,{schema:this.template??n?.template},{default:k})]:{default:k})}});return{clear:v,errors:i,formData:d,ignoreUpdates:m,invalid:l,readonly:h,reset:o,status:s,wrappers:t,stopUpdatesWatch:b,submit:c,validate:w,VvForm:V}}function K(e){return Array.isArray(e)}function Te(e){return!1}function le(e){return e===null}function ue(e){return typeof e=="object"}function ce(e){return typeof e=="string"}function Z(e){return typeof e>"u"}const $e=/^[0-9]+$/,ze=["__proto__","prototype","constructor"];function $(e,r,n){const u=Te()?n:void 0;if(!ue(e)||!ce(r))return u;const t=fe(r);if(t.length!==0){for(const i of t){if(i==="*")continue;const s=function(l){return l.map(d=>Z(d)||le(d)?d:K(d)?s(d):d[i])};if(K(e)&&!$e.test(i)?e=s(e):e=e[i],Z(e)||le(e))break}return Z(e)?u:e}}function L(e,r,n){if(!ue(e)||!ce(r))return;const u=fe(r);if(u.length===0)return;const t=u.length;for(let i=0;i<t;i++){const s=u[i];if(i===t-1){e[s]=n;return}if(s==="*"&&K(e)){const l=u.slice(i+1).join(".");for(const d of e)L(d,l,n);return}Z(e[s])&&(e[s]={}),e=e[s]}}function fe(e){const r=e.split(/[.]|(?:\[(\d|\*)\])/).filter(n=>!!n);return r.some(n=>ze.indexOf(n)!==-1)?[]:r}function Ae(e,r,n,u){return a.defineComponent({name:"VvFormField",props:{type:{type:String,validator:t=>Object.values(S).includes(t),default:S.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(t,{slots:i,emit:s}){const{props:l,name:d}=a.toRefs(t),h=a.useId(),p=a.inject(r,void 0);p&&p.fields.value.set(h,t.name);const f=a.inject(e),w=a.computed({get(){if(f?.formData)return $(new Object(f.formData.value),String(t.name))},set(y){f?.formData&&(L(new Object(f.formData.value),String(t.name),y),s("update:modelValue",{newValue:w.value,formData:f?.formData}))}});a.onMounted(()=>{w.value===void 0&&t.defaultValue!==void 0&&(w.value=t.defaultValue)}),a.onBeforeUnmount(()=>{p&&p.fields.value.delete(h)});const v=a.computed(()=>{if(f?.errors.value)return $(f.errors.value,String(t.name))}),o=a.computed(()=>v.value?._errors),c=a.computed(()=>v.value!==void 0),m=a.watch(c,y=>{if(y){s("invalid",v.value),p&&p.errors.value.set(String(t.name),v.value);return}s("valid",w.value),p&&p.errors.value.delete(t.name)}),b=a.watch(()=>f?.formData,()=>{s("update:formData",f?.formData)},{deep:!0});a.onBeforeUnmount(()=>{m(),b()});const O=y=>{y instanceof InputEvent&&(y=y.target.value),w.value=y},j=a.computed(()=>{let y=l.value;return typeof y=="function"&&(y=y(f?.formData)),Object.keys(y).reduce((E,R)=>(E[R]=a.unref(y[R]),E),{})}),V=a.computed(()=>f?.readonly.value||p?.readonly.value?!0:j.value.readonly??t.readonly),k=a.computed(()=>({...j.value,name:j.value.name??t.name,invalid:c.value,valid:t.showValid?!!(!c.value&&w.value):void 0,type:(y=>{if([S.color,S.date,S.datetimeLocal,S.email,S.month,S.number,S.password,S.search,S.tel,S.text,S.time,S.url,S.week].includes(y))return y})(t.type),invalidLabel:o.value,modelValue:w.value,readonly:V.value,"onUpdate:modelValue":O}));return a.provide(n,{name:a.readonly(d),errors:a.readonly(v)}),{component:a.computed(()=>{if(t.type===S.custom)return{render(){return i.default?.({errors:v.value,formData:f?.formData.value,formErrors:f?.errors.value,invalid:c.value,invalidLabel:o.value,modelValue:w.value,readonly:V.value,onUpdate:O,submit:f?.submit,validate:f?.validate})??i.default}};if(!(u?.lazyLoad??t.lazyLoad)){let y;switch(t.type){case S.select:y=a.resolveComponent("VvSelect");break;case S.checkbox:y=a.resolveComponent("VvCheckbox");break;case S.radio:y=a.resolveComponent("VvRadio");break;case S.textarea:y=a.resolveComponent("VvTextarea");break;case S.radioGroup:y=a.resolveComponent("VvRadioGroup");break;case S.checkboxGroup:y=a.resolveComponent("VvCheckboxGroup");break;case S.combobox:y=a.resolveComponent("VvCombobox");break;default:y=a.resolveComponent("VvInputText")}if(typeof y!="string")return y;console.warn(`[@volverjs/form-vue]: ${y} not found, the component will be loaded asynchronously. To avoid this warning, please set "lazyLoad" option.`)}return a.defineAsyncComponent(async()=>{switch(u?.sideEffects&&await Promise.resolve(u.sideEffects(t.type)),t.type){case S.textarea:return import("@volverjs/ui-vue/vv-textarea");case S.radio:return import("@volverjs/ui-vue/vv-radio");case S.radioGroup:return import("@volverjs/ui-vue/vv-radio-group");case S.checkbox:return import("@volverjs/ui-vue/vv-checkbox");case S.checkboxGroup:return import("@volverjs/ui-vue/vv-checkbox-group");case S.select:return import("@volverjs/ui-vue/vv-select");case S.combobox:return import("@volverjs/ui-vue/vv-combobox")}return import("@volverjs/ui-vue/vv-input-text")})}),hasProps:k,invalid:c}},render(){return this.is?a.h(this.is,this.hasProps,this.$slots):this.type===S.custom?a.h(this.component,null,this.$slots):a.h(this.component,this.hasProps,this.$slots)}})}function Fe(e,r,n){return a.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(u,{slots:t,emit:i}){const{props:s,names:l,defaultValues:d}=a.toRefs(u),h=a.useId(),p=a.computed(()=>Array.isArray(l.value)?l.value:Object.values(l.value)),f=a.computed(()=>Array.isArray(l.value)?l.value:Object.keys(l.value)),w=a.computed(()=>Array.isArray(l.value)?l.value.reduce((g,_)=>(g[String(_)]=_,g),{}):l.value),v=a.computed(()=>Object.keys(w.value).reduce((g,_)=>(g[String(w.value[_])]=_,g),{})),o=a.inject(r,void 0);o&&p.value.forEach(g=>{o.fields.value.set(`${h}-${g}`,g)});const c=a.inject(e),m=a.computed({get(){return c?.formData?f.value.reduce((g,_)=>(g[_]=$(new Object(c.formData.value),w.value[_]),g),{}):{}},set(g){c?.formData&&(f.value.forEach(_=>{L(new Object(c.formData.value),w.value[_],g?.[_])}),i("update:modelValue",{newValue:m.value,formData:c?.formData}))}});a.onMounted(()=>{d.value&&p.value.forEach(g=>{d.value?.[g]!==void 0&&m.value[g]===void 0&&(m.value={...m.value,[g]:d.value?.[g]})})}),a.onBeforeUnmount(()=>{o&&p.value.forEach(g=>{o.fields.value.delete(`${h}-${g}`)})});const b=a.computed(()=>{if(!c?.errors.value)return;const g=p.value.reduce((_,P)=>{if(!c.errors.value)return _;const pe=$(c.errors.value,String(P));return pe===void 0||(_[String(P)]=pe),_},{});if(Object.keys(g).length!==0)return g}),O=a.computed(()=>{if(!b.value)return;const g=Object.keys(b.value).reduce((_,P)=>(b.value?.[P]&&(_[v.value[P]]=b.value[P]._errors),_),{});if(Object.keys(g).length!==0)return g}),j=a.computed(()=>b.value!==void 0),V=a.computed(()=>f.value.reduce((g,_)=>(g[_]=!!b.value?.[v.value[_]],g),{})),k=a.watch(j,()=>{if(j.value){i("invalid",b.value),o&&p.value.forEach(g=>{if(!b.value?.[g]){o.errors.value.delete(g);return}o.errors.value.set(g,b.value?.[g])});return}i("valid",m.value),o&&p.value.forEach(g=>{o.errors.value.delete(g)})}),x=a.watch(()=>c?.formData,()=>{i("update:formData",c?.formData)},{deep:!0});a.onBeforeUnmount(()=>{k(),x()});const y=g=>{m.value=g},E=(g,_)=>{_ instanceof InputEvent&&(_=_.target.value),f.value.includes(g)&&(m.value={...m.value,[g]:_})},R=a.computed(()=>{let g=s.value;return typeof g=="function"&&(g=g(c?.formData)),Object.keys(g).reduce((_,P)=>(_[P]=a.unref(g[P]),_),{})}),de=a.computed(()=>c?.readonly.value?!0:R.value.readonly??u.readonly),Be=a.computed(()=>f.value.reduce((g,_)=>(g[`onUpdate:${_}`]=P=>{E(_,P)},g),{"onUpdate:modelValue":y})),Ge=a.computed(()=>({...Be.value,...R.value,...m.value,modelValue:m.value,names:R.value.name??p.value,invalid:j.value,invalids:V.value,valid:u.showValid?!!(!j.value&&m.value):void 0,invalidLabels:O.value,readonly:de.value}));return a.provide(n,{names:a.readonly(l),errors:a.readonly(b)}),{component:a.computed(()=>({render(){return t.default?.({errors:b.value,formData:c?.formData.value,formErrors:c?.errors.value,invalid:j.value,invalids:V.value,invalidLabels:O.value,modelValue:m.value,onUpdate:y,onUpdateField:E,readonly:de.value,submit:c?.submit,validate:c?.validate})??t.default}})),hasProps:Ge,invalid:j}},render(){return this.is?a.h(this.is,this.hasProps,this.$slots):a.h(this.component,null,this.$slots)}})}function Je(e,r){return a.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:u}){const t=a.inject(e),i=a.inject(r,void 0),s=a.ref(new Map),l=a.ref(new Map),{name:d}=a.toRefs(n),h=a.computed(()=>t?.invalid.value?l.value.size>0:!1);a.watch(h,o=>{if(o){u("invalid");return}u("valid")});const p=a.computed(()=>t?.readonly.value||n.readonly),f={name:a.readonly(d),errors:l,invalid:a.readonly(h),readonly:a.readonly(p),fields:s};a.provide(r,f);const w=a.computed(()=>new Map(s.value));a.watch(w,(o,c)=>{i?.fields&&(c.forEach((m,b)=>{o.has(b)||i?.fields.value.delete(b)}),o.forEach((m,b)=>{i?.fields.value.has(b)||i?.fields.value.set(b,m)}))},{deep:!0}),a.watch(l,o=>{i?.errors&&s.value.forEach(c=>{if(o.has(c)||i.errors.value.delete(c),o.has(c)){const m=o.get(c);m&&i.errors.value.set(c,m)}})},{deep:!0}),a.onMounted(()=>{if(!t?.wrappers||!d.value){console.warn("[@volverjs/form-vue]: Invalid wrapper registration state");return}if(t.wrappers.has(d.value)){console.warn(`[@volverjs/form-vue]: wrapper name "${d.value}" is already used`);return}t.wrappers.set(d.value,f)}),a.onBeforeUnmount(()=>{t?.wrappers&&d.value&&t.wrappers.delete(d.value)});const v=()=>t?.validate(void 0,{fields:new Set(s.value.values())})??Promise.resolve(!0);return{errors:t?.errors,fields:s,fieldsErrors:l,formData:t?.formData,invalid:h,readonly:p,clear:t?.clear,reset:t?.reset,submit:t?.submit,validate:t?.validate,validateWrapper:v}},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?a.h(this.tag,null,{default:n}):n()}})}function Me(e,r){const n=a.defineComponent({name:"VvFormTemplate",props:{schema:{type:[Array,Function],required:!0},scope:{type:Object,default:()=>({})}},slots:Object,setup(u,{slots:t}){const i=a.inject(e);if(i?.formData)return()=>{const s=typeof u.schema=="function"?u.schema(i,u.scope):u.schema;let l;const d=s.reduce((h,p)=>{const f=typeof p=="function"?p(i,u.scope):p,{vvIs:w,vvName:v,vvSlots:o,vvChildren:c,vvIf:m,vvElseIf:b,vvType:O,vvDefaultValue:j,vvShowValid:V,vvContent:k,...x}=f;if(m!==void 0){if(typeof m=="string"?l=!!$(new Object(i.formData.value),m):typeof m=="function"?l=a.unref(m(i)):l=a.unref(m),!l)return h}else if(b!==void 0&&l!==void 0){if(l||(typeof b=="string"?l=!!$(new Object(i.formData.value),b):typeof b=="function"?l=a.unref(b(i)):l=a.unref(b),!l))return h}else l=void 0;let y;return c&&(typeof w=="string"?y=a.h(n,{schema:c}):y={default:E=>a.h(n,{schema:c,scope:E})}),v?(h.push(a.h(r,{name:v,is:w,type:O,defaultValue:j,showValid:V,props:x},o??y??k)),h):w?(h.push(a.h(w,x,o??y??k)),h):(y&&("default"in y?h.push(y.default(u.scope)):h.push(y)),h)},[]);return d.push(t?.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})),d}}});return n}function B(e,r={}){const n=Symbol("formInjectionKey"),u=Symbol("formWrapperInjectionKey"),t=Symbol("formFieldInjectionKey"),i=Symbol("formFieldsGroupInjectionKey"),s=Je(n,u),l=Ae(n,u,t,r),d=Fe(n,u,i),h=Me(n,l),p=new Map,{clear:f,errors:w,formData:v,ignoreUpdates:o,invalid:c,readonly:m,reset:b,status:O,stopUpdatesWatch:j,submit:V,validate:k,VvForm:x}=Re(e,n,r,h,p);return{clear:f,errors:w,formData:v,formFieldInjectionKey:t,formInjectionKey:n,formWrapperInjectionKey:u,ignoreUpdates:o,invalid:c,readonly:m,reset:b,status:O,stopUpdatesWatch:j,submit:V,validate:k,wrappers:p,VvForm:x,VvFormField:l,VvFormFieldsGroup:d,VvFormTemplate:h,VvFormWrapper:s}}const W=Symbol("pluginInjectionKey");function Ce(e){let r={};return e.schema&&(r=B(e.schema,e)),{...r,install(n,{global:u=!1}={}){n.provide(W,e),u&&(n.config.globalProperties.$vvForm=e,r?.VvForm&&n.component("VvForm",r.VvForm),r?.VvFormWrapper&&n.component("VvFormWrapper",r.VvFormWrapper),r?.VvFormField&&n.component("VvFormField",r.VvFormField),r?.VvFormFieldsGroup&&n.component("VvFormFieldsGroup",r.VvFormFieldsGroup),r?.VvFormTemplate&&n.component("VvFormTemplate",r.VvFormTemplate))}}}const G=new Map;function Ue(e,r={}){if(r.scope&&G.has(r.scope))return G.get(r.scope);if(!a.getCurrentInstance()){const u=B(e,r);return r.scope&&G.set(r.scope,u),u}const n=B(e,{...a.inject(W,{}),...r});return r.scope&&G.set(r.scope,n),n}function Ze(e,r={}){return B(e,r)}N.FormFieldType=S,N.createForm=Ce,N.defaultObjectBySchema=F,N.formType=Ze,N.pluginInjectionKey=W,N.useForm=Ue,Object.defineProperty(N,Symbol.toStringTag,{value:"Module"})});
1
+ (function(I,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@vueuse/core"),require("zod/v3"),require("zod/v4/core"),require("zod/v4"),require("ts-dot-prop")):typeof define=="function"&&define.amd?define(["exports","vue","@vueuse/core","zod/v3","zod/v4/core","zod/v4","ts-dot-prop"],e):(I=typeof globalThis<"u"?globalThis:I||self,e(I["@volverjs/form-vue"]={},I.Vue,I.VueUseCore,I.zodV3,I.zodV4Core,I.zodV4,I.tsDotProp))})(this,function(I,e,L,P,N,J,k){"use strict";var h=(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))(h||{}),F=(t=>(t.invalid="invalid",t.valid="valid",t.submitting="submitting",t.reset="reset",t.updated="updated",t.unknown="unknown",t))(F||{});const U=t=>t._def.typeName==="ZodObject",H=t=>t._def.typeName==="ZodDefault",Q=t=>t._def.typeName==="ZodNullable",X=t=>t._def.typeName==="ZodRecord",Y=t=>t._def.typeName==="ZodArray",M=t=>t._def.typeName==="ZodEffects",K=t=>t._def.typeName==="ZodOptional",Z=t=>{let r=t;for(;M(r);)r=r.innerType();return K(r)&&(r=r._def.innerType),r},ee=t=>{let r=t;for(;M(r);)r=r.innerType();return!!K(r)};function te(t){return Array.isArray(t)?"array":t===null?"null":typeof t}function re(t,r){const o=te(t);return r.type?r.type===o||r.type==="integer"&&o==="number"&&Number.isInteger(t):!0}function B(t,r){if(t.anyOf&&Array.isArray(t.anyOf)){if(r!==void 0){for(const l of t.anyOf)if(re(r,l))return B(l,r);for(const l of t.anyOf){const d=l;if(!d.type||d.type==="object")return B(d,r)}}return B(t.anyOf[0],r)}if(t.type!=="object"||!t.properties)switch(t.type){case"string":return typeof r=="string"?r:t.default;case"number":case"integer":return typeof r=="number"?r:t.default;case"boolean":return typeof r=="boolean"?r:t.default;case"null":return r===null?r:t.default;case"array":return Array.isArray(r)&&t.items?r.map(l=>B(t.items,l)):t.default;default:return t.default}const o=t.properties,a=r&&typeof r=="object"&&!Array.isArray(r)?r:void 0,i={};for(const l in o){const d=a?.[l];i[l]=B(o[l],d)}if(a&&t.additionalProperties!==!1){const l=new Set(Object.keys(o));for(const[d,s]of Object.entries(a))l.has(d)||(i[d]=s)}return i}const z=t=>"_zod"in t;function G(t,r={}){if(z(t)){const a=J.toJSONSchema(t);if(a.type!=="object"||!a.properties)return r;const i=N.safeParse(t,r);return B(a,i.success?i.data:r)}const o=Z(t);return U(o)?{...o._def.unknownKeys==="passthrough"?r:{},...Object.fromEntries(("shape"in o?Object.entries(o.shape):[]).map(([a,i])=>{const l=r[a],d=ee(i);let s=Z(i),c;if(H(s)&&(c=s._def.defaultValue(),s=s._def.innerType),l===null&&Q(s))return[a,l];if(l==null&&d)return[a,c];if(s){const f=i.safeParse(l);if(f.success)return[a,f.data??c]}if(Y(s)&&Array.isArray(l)&&l.length){const f=Z(s._def.type);if(U(f))return[a,l.map(m=>G(f,m&&typeof m=="object"?m:void 0))]}if(X(s)&&l){const f=Z(s._def.valueType);if(U(f))return[a,Object.keys(l).reduce((m,V)=>(m[V]=G(f,l[V]),m),{})]}return U(s)?[a,G(s,l&&typeof l=="object"?l:c)]:[a,c]}))}:r}const ae=(t,r)=>z(t)?N.safeParseAsync(t,r):t.safeParseAsync(r),ne=(t,r)=>z(t)?N.formatError(r):r.format(),oe=(t,r)=>z(t)?N.formatError(new N.$ZodError(r)):new P.ZodError(r).format();function le(t,r,o,j,a){const i=e.ref(),l=e.ref(),d=e.computed(()=>l.value===F.invalid),s=e.ref(),c=e.ref(!1);let f;const m=g=>{const D=G(t,g);if(o?.class){const n=o.class;return new n(D)}return D},V=async(g=s.value,D)=>{if(f=D?.fields,c.value)return!0;const n=await ae(t,g);if(!n.success){if(l.value=F.invalid,!f?.size)return i.value=ne(t,n.error),!1;const w=n.error.issues.filter(C=>f?.has(C.path.join(".")));return w.length?(i.value=oe(t,w),!1):(i.value=void 0,!0)}return i.value=void 0,l.value=F.valid,s.value=m(n.data),!0},S=()=>{i.value=void 0,l.value=void 0,f=void 0},O=()=>{s.value=m(),S(),l.value=F.reset},v=async g=>c.value||!await V(void 0,g)?!1:(l.value=F.submitting,!0),{ignoreUpdates:p,stop:b}=L.watchIgnorable(s,()=>{l.value=F.updated},{deep:!0,eventFilter:L.throttleFilter(o?.updateThrottle??500)}),E=e.readonly(i),R=e.readonly(l),A=e.defineComponent({name:"VvForm",props:{continuousValidation:{type:Boolean,default:!1},modelValue:{type:Object,default:()=>({})},readonly:{type:Boolean,default:o?.readonly},tag:{type:String,default:"form"},template:{type:[Array,Function],default:void 0},superRefine:{type:Function,default:void 0},validateFields:{type:Array,default:void 0}},emits:["invalid","submit","update:modelValue","update:readonly","valid","reset"],expose:["errors","invalid","readonly","status","submit","tag","template","valid","validate","clear","reset"],slots:Object,setup(g,{emit:D}){return s.value=m(e.toRaw(g.modelValue)),e.watch(()=>g.modelValue,n=>{if(n){const w=e.isProxy(n)?e.toRaw(n):n;if(JSON.stringify(w)===JSON.stringify(e.toRaw(s.value)))return;s.value=typeof w?.clone=="function"?w.clone():JSON.parse(JSON.stringify(w))}},{deep:!0}),e.watch(l,async n=>{if(n===F.invalid){const w=e.toRaw(i.value);D("invalid",w),o?.onInvalid?.(w);return}if(n===F.valid){const w=e.toRaw(s.value);D("valid",w),o?.onValid?.(w),D("update:modelValue",w),o?.onUpdate?.(w);return}if(n===F.submitting){const w=e.toRaw(s.value);D("submit",w),o?.onSubmit?.(w);return}if(n===F.reset){const w=e.toRaw(s.value);D("reset",w),o?.onReset?.(w);return}if(n===F.updated){if((i.value||o?.continuousValidation||g.continuousValidation)&&await V(void 0,{superRefine:g.superRefine,fields:f??new Set(g.validateFields)}),!s.value||!g.modelValue||JSON.stringify(s.value)!==JSON.stringify(g.modelValue)){const w=e.toRaw(s.value);D("update:modelValue",w),o?.onUpdate?.(w)}l.value===F.updated&&(l.value=F.unknown)}}),e.onMounted(()=>{g.readonly!==void 0&&(c.value=g.readonly)}),e.watch(()=>g.readonly,n=>{c.value=n}),e.watch(c,n=>{n!==g.readonly&&D("update:readonly",c.value)}),e.provide(r,{clear:S,errors:E,formData:s,ignoreUpdates:p,invalid:d,readonly:c,reset:O,status:R,stopUpdatesWatch:b,submit:v,validate:V,wrappers:a}),{clear:S,errors:E,formData:s,ignoreUpdates:p,invalid:d,isReadonly:c,reset:O,status:R,stopUpdatesWatch:b,submit:()=>v({superRefine:g.superRefine,fields:new Set(g.validateFields)}),validate:V,wrappers:a}},render(){const g=()=>this.$slots?.default?.({errors:E.value,formData:s.value,invalid:d.value,readonly:c.value,status:R.value,wrappers:a,clear:S,ignoreUpdates:p,reset:O,stopUpdatesWatch:b,submit:v,validate:V})??this.$slots.default;return e.h(this.tag,{onSubmit:e.withModifiers(this.submit,["prevent"]),onReset:e.withModifiers(this.reset,["prevent"])},(this.template??o?.template)&&j?[e.h(j,{schema:this.template??o?.template},{default:g})]:{default:g})}});return{clear:S,errors:i,formData:s,ignoreUpdates:p,invalid:d,readonly:c,reset:O,status:l,wrappers:a,stopUpdatesWatch:b,submit:v,validate:V,VvForm:A}}function ie(t,r,o,j){return e.defineComponent({name:"VvFormField",props:{type:{type:String,validator:a=>Object.values(h).includes(a),default:h.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(a,{slots:i,emit:l}){const{props:d,name:s}=e.toRefs(a),c=e.useId(),f=e.inject(r,void 0);f&&f.fields.value.set(c,a.name);const m=e.inject(t),V=e.computed({get(){if(m?.formData)return k.get(new Object(m.formData.value),String(a.name))},set(n){m?.formData&&(k.set(new Object(m.formData.value),String(a.name),n),l("update:modelValue",{newValue:V.value,formData:m?.formData}))}});e.onMounted(()=>{V.value===void 0&&a.defaultValue!==void 0&&(V.value=a.defaultValue)}),e.onBeforeUnmount(()=>{f&&f.fields.value.delete(c)});const S=e.computed(()=>{if(m?.errors.value)return k.get(m.errors.value,String(a.name))}),O=e.computed(()=>S.value?._errors),v=e.computed(()=>S.value!==void 0),p=e.watch(v,n=>{if(n){l("invalid",S.value),f&&f.errors.value.set(String(a.name),S.value);return}l("valid",V.value),f&&f.errors.value.delete(a.name)}),b=e.watch(()=>m?.formData,()=>{l("update:formData",m?.formData)},{deep:!0});e.onBeforeUnmount(()=>{p(),b()});const E=n=>{n instanceof InputEvent&&(n=n.target.value),V.value=n},R=e.computed(()=>{let n=d.value;return typeof n=="function"&&(n=n(m?.formData)),Object.keys(n).reduce((w,C)=>(w[C]=e.unref(n[C]),w),{})}),A=e.computed(()=>m?.readonly.value||f?.readonly.value?!0:R.value.readonly??a.readonly),g=e.computed(()=>({...R.value,name:R.value.name??a.name,invalid:v.value,valid:a.showValid?!!(!v.value&&V.value):void 0,type:(n=>{if([h.color,h.date,h.datetimeLocal,h.email,h.month,h.number,h.password,h.search,h.tel,h.text,h.time,h.url,h.week].includes(n))return n})(a.type),invalidLabel:O.value,modelValue:V.value,readonly:A.value,"onUpdate:modelValue":E}));return e.provide(o,{name:e.readonly(s),errors:e.readonly(S)}),{component:e.computed(()=>{if(a.type===h.custom)return{render(){return i.default?.({errors:S.value,formData:m?.formData.value,formErrors:m?.errors.value,invalid:v.value,invalidLabel:O.value,modelValue:V.value,readonly:A.value,onUpdate:E,submit:m?.submit,validate:m?.validate})??i.default}};if(!(j?.lazyLoad??a.lazyLoad)){let n;switch(a.type){case h.select:n=e.resolveComponent("VvSelect");break;case h.checkbox:n=e.resolveComponent("VvCheckbox");break;case h.radio:n=e.resolveComponent("VvRadio");break;case h.textarea:n=e.resolveComponent("VvTextarea");break;case h.radioGroup:n=e.resolveComponent("VvRadioGroup");break;case h.checkboxGroup:n=e.resolveComponent("VvCheckboxGroup");break;case h.combobox:n=e.resolveComponent("VvCombobox");break;default:n=e.resolveComponent("VvInputText")}if(typeof n!="string")return n;console.warn(`[@volverjs/form-vue]: ${n} not found, the component will be loaded asynchronously. To avoid this warning, please set "lazyLoad" option.`)}return e.defineAsyncComponent(async()=>{switch(j?.sideEffects&&await Promise.resolve(j.sideEffects(a.type)),a.type){case h.textarea:return import("@volverjs/ui-vue/vv-textarea");case h.radio:return import("@volverjs/ui-vue/vv-radio");case h.radioGroup:return import("@volverjs/ui-vue/vv-radio-group");case h.checkbox:return import("@volverjs/ui-vue/vv-checkbox");case h.checkboxGroup:return import("@volverjs/ui-vue/vv-checkbox-group");case h.select:return import("@volverjs/ui-vue/vv-select");case h.combobox:return import("@volverjs/ui-vue/vv-combobox")}return import("@volverjs/ui-vue/vv-input-text")})}),hasProps:g,invalid:v}},render(){return this.is?e.h(this.is,this.hasProps,this.$slots):this.type===h.custom?e.h(this.component,null,this.$slots):e.h(this.component,this.hasProps,this.$slots)}})}function se(t,r,o){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(j,{slots:a,emit:i}){const{props:l,names:d,defaultValues:s}=e.toRefs(j),c=e.useId(),f=e.computed(()=>Array.isArray(d.value)?d.value:Object.values(d.value)),m=e.computed(()=>Array.isArray(d.value)?d.value:Object.keys(d.value)),V=e.computed(()=>Array.isArray(d.value)?d.value.reduce((u,y)=>(u[String(y)]=y,u),{}):d.value),S=e.computed(()=>Object.keys(V.value).reduce((u,y)=>(u[String(V.value[y])]=y,u),{})),O=e.inject(r,void 0);O&&f.value.forEach(u=>{O.fields.value.set(`${c}-${u}`,u)});const v=e.inject(t),p=e.computed({get(){return v?.formData?m.value.reduce((u,y)=>(u[y]=k.get(new Object(v.formData.value),V.value[y]),u),{}):{}},set(u){v?.formData&&(m.value.forEach(y=>{k.set(new Object(v.formData.value),V.value[y],u?.[y])}),i("update:modelValue",{newValue:p.value,formData:v?.formData}))}});e.onMounted(()=>{s.value&&f.value.forEach(u=>{s.value?.[u]!==void 0&&p.value[u]===void 0&&(p.value={...p.value,[u]:s.value?.[u]})})}),e.onBeforeUnmount(()=>{O&&f.value.forEach(u=>{O.fields.value.delete(`${c}-${u}`)})});const b=e.computed(()=>{if(!v?.errors.value)return;const u=f.value.reduce((y,x)=>{if(!v.errors.value)return y;const q=k.get(v.errors.value,String(x));return q===void 0||(y[String(x)]=q),y},{});if(Object.keys(u).length!==0)return u}),E=e.computed(()=>{if(!b.value)return;const u=Object.keys(b.value).reduce((y,x)=>(b.value?.[x]&&(y[S.value[x]]=b.value[x]._errors),y),{});if(Object.keys(u).length!==0)return u}),R=e.computed(()=>b.value!==void 0),A=e.computed(()=>m.value.reduce((u,y)=>(u[y]=!!b.value?.[S.value[y]],u),{})),g=e.watch(R,()=>{if(R.value){i("invalid",b.value),O&&f.value.forEach(u=>{if(!b.value?.[u]){O.errors.value.delete(u);return}O.errors.value.set(u,b.value?.[u])});return}i("valid",p.value),O&&f.value.forEach(u=>{O.errors.value.delete(u)})}),D=e.watch(()=>v?.formData,()=>{i("update:formData",v?.formData)},{deep:!0});e.onBeforeUnmount(()=>{g(),D()});const n=u=>{p.value=u},w=(u,y)=>{y instanceof InputEvent&&(y=y.target.value),m.value.includes(u)&&(p.value={...p.value,[u]:y})},C=e.computed(()=>{let u=l.value;return typeof u=="function"&&(u=u(v?.formData)),Object.keys(u).reduce((y,x)=>(y[x]=e.unref(u[x]),y),{})}),T=e.computed(()=>v?.readonly.value?!0:C.value.readonly??j.readonly),me=e.computed(()=>m.value.reduce((u,y)=>(u[`onUpdate:${y}`]=x=>{w(y,x)},u),{"onUpdate:modelValue":n})),pe=e.computed(()=>({...me.value,...C.value,...p.value,modelValue:p.value,names:C.value.name??f.value,invalid:R.value,invalids:A.value,valid:j.showValid?!!(!R.value&&p.value):void 0,invalidLabels:E.value,readonly:T.value}));return e.provide(o,{names:e.readonly(d),errors:e.readonly(b)}),{component:e.computed(()=>({render(){return a.default?.({errors:b.value,formData:v?.formData.value,formErrors:v?.errors.value,invalid:R.value,invalids:A.value,invalidLabels:E.value,modelValue:p.value,onUpdate:n,onUpdateField:w,readonly:T.value,submit:v?.submit,validate:v?.validate})??a.default}})),hasProps:pe,invalid:R}},render(){return this.is?e.h(this.is,this.hasProps,this.$slots):e.h(this.component,null,this.$slots)}})}function ue(t,r){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(o,{emit:j}){const a=e.inject(t),i=e.inject(r,void 0),l=e.ref(new Map),d=e.ref(new Map),{name:s}=e.toRefs(o),c=e.computed(()=>a?.invalid.value?d.value.size>0:!1);e.watch(c,O=>{if(O){j("invalid");return}j("valid")});const f=e.computed(()=>a?.readonly.value||o.readonly),m={name:e.readonly(s),errors:d,invalid:e.readonly(c),readonly:e.readonly(f),fields:l};e.provide(r,m);const V=e.computed(()=>new Map(l.value));e.watch(V,(O,v)=>{i?.fields&&(v.forEach((p,b)=>{O.has(b)||i?.fields.value.delete(b)}),O.forEach((p,b)=>{i?.fields.value.has(b)||i?.fields.value.set(b,p)}))},{deep:!0}),e.watch(d,O=>{i?.errors&&l.value.forEach(v=>{if(O.has(v)||i.errors.value.delete(v),O.has(v)){const p=O.get(v);p&&i.errors.value.set(v,p)}})},{deep:!0}),e.onMounted(()=>{if(!a?.wrappers||!s.value){console.warn("[@volverjs/form-vue]: Invalid wrapper registration state");return}if(a.wrappers.has(s.value)){console.warn(`[@volverjs/form-vue]: wrapper name "${s.value}" is already used`);return}a.wrappers.set(s.value,m)}),e.onBeforeUnmount(()=>{a?.wrappers&&s.value&&a.wrappers.delete(s.value)});const S=()=>a?.validate(void 0,{fields:new Set(l.value.values())})??Promise.resolve(!0);return{errors:a?.errors,fields:l,fieldsErrors:d,formData:a?.formData,invalid:c,readonly:f,clear:a?.clear,reset:a?.reset,submit:a?.submit,validate:a?.validate,validateWrapper:S}},render(){const o=()=>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:o}):o()}})}function de(t,r){const o=e.defineComponent({name:"VvFormTemplate",props:{schema:{type:[Array,Function],required:!0},scope:{type:Object,default:()=>({})}},slots:Object,setup(j,{slots:a}){const i=e.inject(t);if(i?.formData)return()=>{const l=typeof j.schema=="function"?j.schema(i,j.scope):j.schema;let d;const s=l.reduce((c,f)=>{const m=typeof f=="function"?f(i,j.scope):f,{vvIs:V,vvName:S,vvSlots:O,vvChildren:v,vvIf:p,vvElseIf:b,vvType:E,vvDefaultValue:R,vvShowValid:A,vvContent:g,...D}=m;if(p!==void 0){if(typeof p=="string"?d=!!k.get(new Object(i.formData.value),p):typeof p=="function"?d=e.unref(p(i)):d=e.unref(p),!d)return c}else if(b!==void 0&&d!==void 0){if(d||(typeof b=="string"?d=!!k.get(new Object(i.formData.value),b):typeof b=="function"?d=e.unref(b(i)):d=e.unref(b),!d))return c}else d=void 0;let n;return v&&(typeof V=="string"?n=e.h(o,{schema:v}):n={default:w=>e.h(o,{schema:v,scope:w})}),S?(c.push(e.h(r,{name:S,is:V,type:E,defaultValue:R,showValid:A,props:D},O??n??g)),c):V?(c.push(e.h(V,D,O??n??g)),c):(n&&("default"in n?c.push(n.default(j.scope)):c.push(n)),c)},[]);return s.push(a?.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})),s}}});return o}function W(t,r={}){const o=Symbol("formInjectionKey"),j=Symbol("formWrapperInjectionKey"),a=Symbol("formFieldInjectionKey"),i=Symbol("formFieldsGroupInjectionKey"),l=ue(o,j),d=ie(o,j,a,r),s=se(o,j,i),c=de(o,d),f=new Map,{clear:m,errors:V,formData:S,ignoreUpdates:O,invalid:v,readonly:p,reset:b,status:E,stopUpdatesWatch:R,submit:A,validate:g,VvForm:D}=le(t,o,r,c,f);return{clear:m,errors:V,formData:S,formFieldInjectionKey:a,formInjectionKey:o,formWrapperInjectionKey:j,ignoreUpdates:O,invalid:v,readonly:p,reset:b,status:E,stopUpdatesWatch:R,submit:A,validate:g,wrappers:f,VvForm:D,VvFormField:d,VvFormFieldsGroup:s,VvFormTemplate:c,VvFormWrapper:l}}const $=Symbol("pluginInjectionKey");function fe(t){let r={};return t.schema&&(r=W(t.schema,t)),{...r,install(o,{global:j=!1}={}){o.provide($,t),j&&(o.config.globalProperties.$vvForm=t,r?.VvForm&&o.component("VvForm",r.VvForm),r?.VvFormWrapper&&o.component("VvFormWrapper",r.VvFormWrapper),r?.VvFormField&&o.component("VvFormField",r.VvFormField),r?.VvFormFieldsGroup&&o.component("VvFormFieldsGroup",r.VvFormFieldsGroup),r?.VvFormTemplate&&o.component("VvFormTemplate",r.VvFormTemplate))}}}const _=new Map;function ce(t,r={}){if(r.scope&&_.has(r.scope))return _.get(r.scope);if(!e.getCurrentInstance()){const j=W(t,r);return r.scope&&_.set(r.scope,j),j}const o=W(t,{...e.inject($,{}),...r});return r.scope&&_.set(r.scope,o),o}function ve(t,r={}){return W(t,r)}I.FormFieldType=h,I.createForm=fe,I.defaultObjectBySchema=G,I.formType=ve,I.pluginInjectionKey=$,I.useForm=ce,Object.defineProperty(I,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@volverjs/form-vue",
3
3
  "type": "module",
4
- "version": "1.1.0-beta.3",
4
+ "version": "1.1.0-beta.4",
5
5
  "description": "Vue 3 Forms with @volverjs/ui-vue",
6
6
  "author": "8 Wave S.r.l.",
7
7
  "license": "MIT",
@@ -52,24 +52,24 @@
52
52
  "peerDependencies": {
53
53
  "@volverjs/ui-vue": "^0.0.9",
54
54
  "@vueuse/core": "^13.0.0",
55
- "ts-dot-prop": "^2.1.4",
56
- "vue": "^3.5.13",
55
+ "ts-dot-prop": "^2.1.0",
56
+ "vue": "^3.5.0",
57
57
  "zod": "^3.25.0 || ^4.0.0"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@antfu/eslint-config": "^5.0.0",
61
- "@nabla/vite-plugin-eslint": "^2.0.5",
61
+ "@nabla/vite-plugin-eslint": "^2.0.6",
62
62
  "@playwright/experimental-ct-vue": "^1.54.1",
63
63
  "@testing-library/vue": "^8.1.0",
64
- "@vitejs/plugin-vue": "^6.0.0",
65
- "@volverjs/style": "^0.1.20",
64
+ "@vitejs/plugin-vue": "^6.0.1",
65
+ "@volverjs/style": "^0.1.21",
66
66
  "@volverjs/ui-vue": "^0.0.9",
67
67
  "@vue/compiler-sfc": "^3.5.18",
68
68
  "@vue/runtime-core": "^3.5.18",
69
69
  "@vue/test-utils": "^2.4.6",
70
- "@vueuse/core": "^13.5.0",
70
+ "@vueuse/core": "^13.6.0",
71
71
  "copy": "^0.3.2",
72
- "eslint": "^9.31.0",
72
+ "eslint": "^9.32.0",
73
73
  "happy-dom": "^18.0.1",
74
74
  "ts-dot-prop": "^2.1.4",
75
75
  "typescript": "^5.8.3",
@@ -78,7 +78,7 @@
78
78
  "vite-plugin-externalize-deps": "^0.9.0",
79
79
  "vitest": "^3.2.4",
80
80
  "vue": "^3.5.18",
81
- "zod": "^4.0.10"
81
+ "zod": "^4.0.14"
82
82
  },
83
83
  "scripts": {
84
84
  "lint": "eslint .",