logaretm/vee-validate Tags: prev: 1.0.0-beta.10, next-edge: 4.5.0-alpha.2, edge: 4.5.0-alpha.6 References: Docs API Changes This section documents version-specific API changes for vee-validate v4.x — prioritize these over legacy patterns. - BREAKING: support disabled by default in v4.10.0 for performance; enable via or per-field source - NEW: introduced in v4.9.0 — replaces and for cleaner Composition API integration source - DEPRECATED: Reactive initial values deprecated in v4.12.0; use non-reactive objects or getters to prevent unintended sync source - NEW: exposed in v4.14.0 for accessing…

),\n lastName: z.string().regex('^[A-zÀ-ž]+

logaretm/vee-validate Tags: prev: 1.0.0-beta.10, next-edge: 4.5.0-alpha.2, edge: 4.5.0-alpha.6 References: Docs API Changes This section documents version-specific API changes for vee-validate v4.x — prioritize these over legacy patterns. - BREAKING: support disabled by default in v4.10.0 for performance; enable via or per-field source - NEW: introduced in v4.9.0 — replaces and for cleaner Composition API integration source - DEPRECATED: Reactive initial values deprecated in v4.12.0; use non-reactive objects or getters to prevent unintended sync source - NEW: exposed in v4.14.0 for accessing…

)\n })\n);\n```\n\nSimple as. However we want to be able to add or remove potential people from a list, not just be able to add one at a time. So we now have the following:\n\n```javascript\nconst schema = toTypedSchema(\n z.array(\n z.object({\n firstName: z.string().regex('^[A-zÀ-ž]+

logaretm/vee-validate Tags: prev: 1.0.0-beta.10, next-edge: 4.5.0-alpha.2, edge: 4.5.0-alpha.6 References: Docs API Changes This section documents version-specific API changes for vee-validate v4.x — prioritize these over legacy patterns. - BREAKING: support disabled by default in v4.10.0 for performance; enable via or per-field source - NEW: introduced in v4.9.0 — replaces and for cleaner Composition API integration source - DEPRECATED: Reactive initial values deprecated in v4.12.0; use non-reactive objects or getters to prevent unintended sync source - NEW: exposed in v4.14.0 for accessing…

),\n lastName: z.string().regex('^[A-zÀ-ž]+

logaretm/vee-validate Tags: prev: 1.0.0-beta.10, next-edge: 4.5.0-alpha.2, edge: 4.5.0-alpha.6 References: Docs API Changes This section documents version-specific API changes for vee-validate v4.x — prioritize these over legacy patterns. - BREAKING: support disabled by default in v4.10.0 for performance; enable via or per-field source - NEW: introduced in v4.9.0 — replaces and for cleaner Composition API integration source - DEPRECATED: Reactive initial values deprecated in v4.12.0; use non-reactive objects or getters to prevent unintended sync source - NEW: exposed in v4.14.0 for accessing…

)\n })\n ).nonempty()\n);\n```\n\nWe now attach this to the `useForm` composable:\n\n```javascript\nconst { errors } = useForm({\n validationSchema: schema,\n validateOnMount: false, // initial values will have empty key value pairs on mount\n initialValues: {\n people: [{ firstName: null, lastName: null }]\n }\n});\n```\n\n...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1715,"content_sha256":"82d3d142619480dfb9ec143f674039fc7ee363d6c417297a97383e2e08c3c433"},{"filename":"references/discussions/discussion-4871.md","content":"---\nnumber: 4871\ntitle: validateField on an object\ncategory: \"Q&A\"\ncreated: 2024-09-26\nurl: \"https://github.com/logaretm/vee-validate/discussions/4871\"\nupvotes: 2\ncomments: 0\nanswered: false\n---\n\n# validateField on an object\n\nIs it possible to validate a nested object? i have a form like this:\n```ts\nexport const FreeSubmissionProduct = object({\n type: literal('free')\n})\n\nexport const PremiumSubmissionProduct = object({\n type: literal('premium'),\n location_id: string()\n})\n\nexport const SubmissionProduct = discriminatedUnion('type', [FreeSubmissionProduct, PremiumSubmissionProduct])\n\nconst formSchema = z.object({\n submission: SubmissionProduct\n})\n```\nwith a lot of other fields, but after they fill in the submission fields i want to validate only that part of the form.\nIt works when i do `validateField('submission.type')` but i actually want to validate the whole submission object at once with `validateField('submission')` but that will return 0 errors even if its an empty object.\n\nif you v...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1009,"content_sha256":"fdee90ab891319733cc0a1fd02325a85c540cd74403c30669acf7ef6b7092a71"},{"filename":"references/discussions/discussion-4883.md","content":"---\nnumber: 4883\ntitle: \"Q: Best Practices for custom inputs\"\ncategory: \"Q&A\"\ncreated: 2024-10-10\nurl: \"https://github.com/logaretm/vee-validate/discussions/4883\"\nupvotes: 2\ncomments: 0\nanswered: false\n---\n\n# Q: Best Practices for custom inputs\n\nWhat would be the best approach to using forms with custom inputs, even 3rd party inputs like vuetify or quasar and so on? Do you advise to use `defineField` at the form/parent level or `useField` in the input wrapper around those inputs? What makes the most sense?\nAnd if I use `useForm` and `useField` which one is in charge of the value?","content_type":"text/markdown; charset=utf-8","language":"markdown","size":586,"content_sha256":"dfe96b3e2a3298b7c3fcaef26e4f456b5dd54901580c951ec019a8b08a21355b"},{"filename":"references/discussions/discussion-4896.md","content":"---\nnumber: 4896\ntitle: \"useField vs defineField -> validateOnBlur\"\ncategory: \"Q&A\"\ncreated: 2024-10-15\nurl: \"https://github.com/logaretm/vee-validate/discussions/4896\"\nupvotes: 1\ncomments: 1\nanswered: false\n---\n\n# useField vs defineField -> validateOnBlur\n\nIs there a reason why useField does not share the same options as defineField in regards to its configuration on when to validate? @logaretm \n\n---\n\n## Top Comments\n\n**@logaretm** [maintainer]:\n\nThey serve two different purposes.\n\n- `useField` creates a field that optionally integrates with a form and is meant to be used to build components.\n- `defineField` creates a field that is always hooked to a form and is meant to be integrated via props with HTML elements or components.\n\nI can see `useField` offering similar binds to `defineField` to make them more alike and enhances the experience of `useField` a little. I don't think it is a huge effort either.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":918,"content_sha256":"2013a9d931794c8bc8037713ac012d3a0e4d575762b9910fb9ba45c7e23e7dff"},{"filename":"references/discussions/discussion-4898.md","content":"---\nnumber: 4898\ntitle: \"useForm and `\u003cform>` and how fields are found by name\"\ncategory: \"Q&A\"\ncreated: 2024-10-18\nurl: \"https://github.com/logaretm/vee-validate/discussions/4898\"\nupvotes: 1\ncomments: 1\nanswered: false\n---\n\n# useForm and `\u003cform>` and how fields are found by name\n\nI have a general question on how `useForm` actually works. It seems it maybe is just looking for inputs and for the `name` attribute of inputs. That would mean, form tags would not be necessary at all to have an actual form and also it would never work with the html submit and such.\nNow how do I separate forms from each other? Lets say I have a useForm on a search with some searchoptions and as a child component I have a result wrapper that allows filter options also with useForm to organize that input. What will happen? And how to find out if I crossed some scope/context boundries?\n\n---\n\n## Top Comments\n\n**@logaretm** [maintainer]:\n\nHey there.\n\nYou are correct, the `useForm` composables provides a context object with Vue's `provide()` API, each field that is created with `useField` or `\u003cField />` component injects that context with `inject()` and registers itself with the context API.\n\nThat means that vee-validate's API doesn't care about elements or their tag names. This is why it is UI agnostic, all it cares about is `useForm` and `useField` and by extension, `\u003cForm />` and `\u003cField />` components.\n\n> Now how do I separate forms from each other?\n\nNot sure what do you mean, can you elaborate? Typically calling `us...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1519,"content_sha256":"1cedd287992aec1f20336f1c65288618a008df61d340f53a8c6ccece13e9a904"},{"filename":"references/discussions/discussion-4903.md","content":"---\nnumber: 4903\ntitle: \"Q: Hot to validate ONLY on explicit form submit?\"\ncategory: \"Q&A\"\ncreated: 2024-10-21\nurl: \"https://github.com/logaretm/vee-validate/discussions/4903\"\nupvotes: 2\ncomments: 0\nanswered: false\n---\n\n# Q: Hot to validate ONLY on explicit form submit?\n\nI am new to VeeValidate, so please bear with me.\n\nI am using composition (`useForm`) to implement form validation and I want to validate fields ONLY when I explicitly click on the submit button. I don't want fields validated on input, on blur, or on change - only on explicit submit.\n\nHow can I achieve that?","content_type":"text/markdown; charset=utf-8","language":"markdown","size":580,"content_sha256":"dbbf9edf9c0ffe5f1e04166be513a5bd1865d11c97acb074924bd0e0ba00fcc8"},{"filename":"references/discussions/discussion-4907.md","content":"---\nnumber: 4907\ntitle: Set configuration validate on useForm();\ncategory: \"Q&A\"\ncreated: 2024-10-23\nurl: \"https://github.com/logaretm/vee-validate/discussions/4907\"\nupvotes: 2\ncomments: 0\nanswered: false\n---\n\n# Set configuration validate on useForm();\n\nHi all, is there any way to set validation configurations, e.g. validateOnValueUpdate, via useForm() composable?\nSomething like this:\n\n```javascript\nconst { handleSubmit } = useForm\u003cFormPayload>({\n validationSchema: // your schema validation,\n validateOnValueUpdate: false, // set this prop globally\n});\n```","content_type":"text/markdown; charset=utf-8","language":"markdown","size":563,"content_sha256":"163ef4959732010c8e941298b391e38fb30de7d2dd0b44efc56171bbc73ff85f"},{"filename":"references/discussions/discussion-4950.md","content":"---\nnumber: 4950\ntitle: useFieldArray validation issue + upgrade problem with form.handleSubmit\ncategory: \"Q&A\"\ncreated: 2024-11-22\nurl: \"https://github.com/logaretm/vee-validate/discussions/4950\"\nupvotes: 2\ncomments: 1\nanswered: false\n---\n\n# useFieldArray validation issue + upgrade problem with form.handleSubmit\n\nHi everyone,\n\nUsing vee-validate 4.13.2, I'm having an issue with the validations using `useFieldArray`. When I have two rows of inputs and I delete the 1st row, validation errors don't show, but however they do show when I delete the 2nd row instead of the 1st one. Looks like a reactivity problem with the indexes. Anyone encountered this issue? Here's some relevant snippets:\n\n\n```\n\u003cdiv v-for=\"(powerInverter, index) in fields\" :key=\"`${props.name}[${index}]`\">\n ...\n \u003ctext-box\n v-model=\"powerInverter.value.brand\"\n :max-length=\"35\"\n :name=\"`${props.name}[${index}].brand`\"\n :placeholder=\"t('prosumerDeclaration.installation.brand')\"\n required\n />\n ...\n \u003cButton\n :label=\"t('common.remove')\"\n icon=\"fas fa-trash\"\n is-icon\n size=\"md\"\n @click=\"removePowerInverter(index)\"\n />\n```...\n\n---\n\n## Top Comments\n\n**@thibautvs**:\n\nHello,\n\nAny idea regarding this problem?\n\nThanks in advance","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1234,"content_sha256":"72ed904f20a72aae85e4b423f95025cbb149853ae39c551b9c2a8eed6e5de5a0"},{"filename":"references/discussions/discussion-4955.md","content":"---\nnumber: 4955\ntitle: \"Why can't we use ref for initialValues in the useForm composable?\"\ncategory: \"Q&A\"\ncreated: 2024-11-28\nurl: \"https://github.com/logaretm/vee-validate/discussions/4955\"\nupvotes: 1\ncomments: 1\nanswered: true\n---\n\n# Why can't we use ref for initialValues in the useForm composable?\n\nAccording to the documentation, it says `initialValues?: MaybeRef\u003cRecord\u003cstring, any>>`. When using `ref` as shown in the screenshot, it results in a TypeScript error.\n\n\n\nIs this discussion related?\n\n---\n\n## Accepted Answer\n\n**@logaretm** [maintainer]:\n\nBecause it brings with it a set of expectations, like what happens when that ref changes? We can update the values then, but what if the user already interacted with the form and changed the values?\n\nSo in order to avoid introducing foot guns and satisfying one use-case over the other, it is recommended that you be explicit and use `resetForm` when you want the changes to reflect.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":942,"content_sha256":"c33d68d5ba5b81623cdc9484665d1339cc177d1910f10c07fa673e01216c9502"},{"filename":"references/discussions/discussion-4980.md","content":"---\nnumber: 4980\ntitle: How could I perform a silent validate? (v4)\ncategory: \"Q&A\"\ncreated: 2025-01-24\nurl: \"https://github.com/logaretm/vee-validate/discussions/4980\"\nupvotes: 2\ncomments: 0\nanswered: false\n---\n\n# How could I perform a silent validate? (v4)\n\nHi,\nI know it was already asked before here, but the answer seems a bit outdated.\n\nHow could I do a silent validation in v4, without touching to `meta` data, to already displayed errors and any other validation data to make the silent validation really \"transparent\"?\n\nThank you for your help!","content_type":"text/markdown; charset=utf-8","language":"markdown","size":553,"content_sha256":"371dac78ef0e237c51478893a72c386f8d3a7b4f57f9dfc9075766985dc9f29a"},{"filename":"references/discussions/discussion-5038.md","content":"---\nnumber: 5038\ntitle: \"useForm, defineFields and resetForm create many meta updates\"\ncategory: \"Q&A\"\ncreated: 2025-05-08\nurl: \"https://github.com/logaretm/vee-validate/discussions/5038\"\nupvotes: 1\ncomments: 1\nanswered: true\n---\n\n# useForm, defineFields and resetForm create many meta updates\n\nI have a regular useForm with schema validation and a lot of fields with defineFields.\nI resetForm when I have the form data response from the api. everything looks ok, except for a single field.\nI get something like\n```\ninitialValue: Reactive\n➤ currentValue: Reactive\n```\nso that the initalValue is not the same as the currentValue.\nI can't figure out why that is. I put a watcher on the inital values for useform and that looked like\n\n```\nundefined\nundefined\n➤ Proxy\n➤ Proxy\n➤ Proxy\n```\n\nI have no idea why it is setting the initial value 6 times when I only have useForm initialization and one resetForm.\nIs there any way to debug into the setting of inital values or something? \n\n---\n\n## Accepted Answer\n\nOk found the error after checking the validation schema. I had a placeholder for that value like `z.object({})` that did show up as empty in the inital values which is probably true if parsed but later the object works as is and it shows as valid but also as dirty.\nafter fixing the schema it shows up correctly as valid and not diry","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1346,"content_sha256":"23582e38085a861a8cd7831ec5e473fec4aa3c68efd12760854efaceae85043a"},{"filename":"references/discussions/discussion-5079.md","content":"---\nnumber: 5079\ntitle: useFieldArray TS types\ncategory: \"Q&A\"\ncreated: 2025-08-23\nurl: \"https://github.com/logaretm/vee-validate/discussions/5079\"\nupvotes: 1\ncomments: 0\nanswered: false\n---\n\n# useFieldArray TS types\n\nHello!\n\nI am new to `vee-validate`.\n\nHow do you get TS `path` checks for `useFieldArray` `name`?\n\nI believe vee-validate is inspired by react-hook-form and their `useFieldArray` has optional `control ` parameter that comes from `useForm` and carries useForm path types to useFieldArray so that you get validation that name exists and fields are of certain type.\n\nHow to achieve something like that?\nI know i can pass generic to useFieldArray but then there's no connection between the type and the name that you pass to useFieldArray and you kind of responsible for keeping the name and ts type in sync.\n\nLove all the work done for vee-validate!","content_type":"text/markdown; charset=utf-8","language":"markdown","size":863,"content_sha256":"332888c858cfd20222bdaea8b7fad111651fa2efea18eb37e30b8b64ef0c28dc"},{"filename":"references/discussions/discussion-5086.md","content":"---\nnumber: 5086\ntitle: How is the support for Zod 4?\ncategory: \"Q&A\"\ncreated: 2025-09-27\nurl: \"https://github.com/logaretm/vee-validate/discussions/5086\"\nupvotes: 2\ncomments: 2\nanswered: false\n---\n\n# How is the support for Zod 4?\n\nI was just using Vee-validate and although it worked the day before, I received this error\n\n```js\n# npm resolution error report\n\nWhile resolving: @vee-validate/[email protected]\nFound: [email protected]\nnode_modules/zod\n zod@\"^4.1.11\" from the root project\n\nCould not resolve dependency:\npeer zod@\"^3.24.0\" from @vee-validate/[email protected]\nnode_modules/@vee-validate/zod\n @vee-validate/zod@\"^4.15.1\" from the root project\n\nConflicting peer dependency: [email protected]\nnode_modules/zod\n peer zod@\"^3.24.0\" from @vee-validate/[email protected]\n node_modules/@vee-validate/zod\n @vee-validate/zod@\"^4.15.1\" from the root project\n\nFix the upstream dependency conflict, or retry\nthis command with --force or --legacy-peer-deps\nto accept an incorrect (and potentially broken) dependency resolution.\n```\n...\n\n---\n\n## Top Comments\n\n**@awacode21**:\n\nI am having the same problem. I saw this issue: https://github.com/logaretm/vee-validate/issues/5027 but it is closed. But don't know why it got closed, it is still not working, isn't it?\n\n**@awacode21**:\n\nIt looks like it should be supported with this version: https://github.com/logaretm/vee-validate/releases/tag/v5.0.0-beta.0","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1380,"content_sha256":"8b41d4baa0408b3a255f28c58cdcc3fc834d871bac2349c07dfdaf509f4fd800"},{"filename":"references/discussions/discussion-5095.md","content":"---\nnumber: 5095\ntitle: Right way to wire Field value into PrimeVue InputNumber component?\ncategory: \"Q&A\"\ncreated: 2025-11-03\nurl: \"https://github.com/logaretm/vee-validate/discussions/5095\"\nupvotes: 1\ncomments: 0\nanswered: false\n---\n\n# Right way to wire Field value into PrimeVue InputNumber component?\n\nConsider the numeric field `count` of a model that I'm building in a `Form` component. The field is rendered as a PrimeVue `InputNumber`.\n\nI have the following solution, which seems to work just fine:\n\n```html\n\u003cForm :initialValues=\"model\" :validation-schema=\"validationSchema\" @submit=\"onSubmit\" >\n ...\n \u003cField name=\"count\" v-slot=\"{ value, handleChange }\">\n \u003cInputNumber :model-value=\"value\" @update:model-value=\"handleChange\" />\n \u003c/Field>\n ...\n\u003c/Form>\n```\n\nHowever, the docs state that you shouldn't wire `value` into `:model-value`, but instead use `v-bind=\"field\"`:\n\n> `value: unknown`\n>\n> The current value of the field, useful to compare and do conditional rendering based on the field value. You should not use ...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1035,"content_sha256":"4e85efdb8a4e71a15d085953efe45e9d0262b26df4aacae891461b4a5886fd40"},{"filename":"references/discussions/discussion-5107.md","content":"---\nnumber: 5107\ntitle: is there a reason why initialErrors in useForm requires all fields?\ncategory: \"Q&A\"\ncreated: 2026-01-10\nurl: \"https://github.com/logaretm/vee-validate/discussions/5107\"\nupvotes: 1\ncomments: 1\nanswered: false\n---\n\n# is there a reason why initialErrors in useForm requires all fields?\n\ni don't understand why useForm's initialErrors property in a typescript context insists on all fields being required. For the life of me i can't convice the useForm composable to treat initialErrors as PARTIAL\n\n```ts\n // form-login.vue\n \n const { defineField, errors, handleSubmit, setErrors } = useForm({\n initialErrors: {}, // TS Error: Type '{}' is missing the following properties.....\n initialValues: { email: \"\", password: \"\" },\n name: \"form-login\",\n validationSchema: FormLoginSchema,\n });\n \n // form-login.schema.ts\n \n import z from \"zod\";\n\n export const FormLoginSchema = z.object({\n email: z.email({ error: \"A valid email address is required.\" }),\n password: NonEmptyString({ error: \"A password is required.\" }),\n });\n```\n\n\n---\n\n## Top Comments\n\n**@ismaildasci**:\n\nthis is because the type definition expects full object. you can fix it by casting:\n\n```ts\nconst { defineField, errors, handleSubmit, setErrors } = useForm({\n initialErrors: {} as Partial\u003cRecord\u003ckeyof z.infer\u003ctypeof FormLoginSchema>, string>>,\n initialValues: { email: \"\", password: \"\" },\n name: \"form-login\",\n validationSchema: FormLoginSchema,\n});\n```\n\nor just dont pass initialErrors if its empty:\n\n```ts\nconst { defineField, errors, handleSubmit, setErrors } = useForm({\n initialValues: { email: \"\", password: \"\" },\n name: \"form-login\",\n validationSchema: FormLoginSchema,\n});\n```\n\n...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1709,"content_sha256":"5b93879c7f0afc04e48b625a37e72fa5747d6227eae71daffc23f08198f4d1db"},{"filename":"references/docs/CHANGELOG.md","content":"# vee-validate-docs\n\n## null\n\n### Patch Changes\n\n- Updated dependencies [9867e59]\n- Updated dependencies [721e980]\n- Updated dependencies [9803aa2]\n- Updated dependencies [546d82e]\n - @vee-validate/[email protected]\n - [email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n\n## null\n\n### Patch Changes\n\n- Updated dependencies [5cba0aa]\n- Updated dependencies [30281f5]\n- Updated dependencies [ec121b1]\n- Updated dependencies [db26a74]\n- Updated dependencies [f92455a]\n - @vee-validate/[email protected]\n - [email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n\n## null\n\n### Patch Changes\n\n- Updated dependencies [be994b4]\n - [email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n\n## null\n\n### Patch Changes\n\n- [email protected]\n- @vee-validate/[email protected]\n- @vee-validate/[email protected]\n- @vee-validate/[email protected]\n\n## null\n\n### Patch Changes\n\n- Updated dependencies [e9f8c88]\n - [email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n\n## null\n\n### Patch Changes\n\n- Updated dependencies [f33974c]\n- Updated dependencies [0991c01]\n- Updated dependencies [ecb540a]\n- Updated dependencies [4f88d85]\n - [email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n\n## null\n\n### Patch Changes\n\n- Updated dependencies [07c27d5]\n - [email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n\n## null\n\n### Patch Changes\n\n- Updated dependencies [f0d4e24]\n - [email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n\n## null\n\n### Patch Changes\n\n- [email protected]\n- @vee-validate/[email protected]\n- @vee-validate/[email protected]\n- @vee-validate/[email protected]\n\n## null\n\n### Patch Changes\n\n- Updated dependencies [f7a4929]\n- Updated dependencies [97cebd8]\n- Updated dependencies [404cf57]\n- Updated dependencies [421ae69]\n - [email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n\n## null\n\n### Patch Changes\n\n- Updated dependencies [afbd0e5]\n - [email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n - @vee-validate/[email protected]\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2314,"content_sha256":"192b8f3c546cf850ed0f456b09ac3e198c6a170ed1cd6c21f580521c52daf980"},{"filename":"references/docs/v4.md","content":"---\ntitle: \"VeeValidate: Painless Vue.js forms\"\nmeta:\n \"og:description\": \"Painless Vue.js forms\"\n \"og:title\": \"VeeValidate: Painless Vue.js forms\"\n \"twitter:description\": \"Painless Vue.js forms\"\n \"twitter:title\": \"VeeValidate: Painless Vue.js forms\"\n description: \"Painless Vue.js forms\"\n---\n\n# **VeeValidate **\n\n**Painless **Vue** forms **\n\nVeeValidate is the most popular Vue.js form library. It takes care of value tracking, validation, errors, submissions and more.\n\n**Get Started ** ** ** **Live Examples ** \n\n### **Flexible**\n\nOffers both declarative components or composable functions API.vee-validate sets up the foundation for you to form in whatever style you prefer.\n\n### **Incremental**\n\nvee-validate can do a lot if you let it. Like tracking values, validation, handling submissions and more. You may opt-in or out to all of these aspects. You are in control of how much form code you write.\n\n### **Great DX**\n\nVue.js devtools support. vee-validate makes debugging forms much easier and less of a wild goose chase every time that form does not submit.\n\n## Works with your favorite UI framework\n\nShadcn Vue\n\nVuetify\n\nListed libraries are ones with official examples, find more UI frameworks and libraries here.\n\n## Sponsors\n\nYou can also help this this project and my other projects by donating one time or by sponsoring via the following link\n\n**Sponsor**\n\n## Features\n\n- Form-level validation\n- Field-level validation\n- Array fields\n- UI Agnostic\n- Higher-order Components\n- Composition API\n- Async validators\n- Backend API errors\n- Form Submissions\n- Flexible validator API\n- State-store friendly\n- Vue Devtools integration\n\n## Do more with less\n\nIn this example, value tracking, validation and submissions are handled in just a few lines of code","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1767,"content_sha256":"7094a13b495e7e4cfee13205b91c3a36a6cd58ccb791faf9cdff943cfc3618e3"},{"filename":"references/issues/_INDEX.md","content":"---\ntotal: 30\nopen: 16\nclosed: 14\n---\n\n# Issues Index\n\n## Bugs & Regressions (2)\n\n- [#4862](./issue-4862.md): Unable to `autoImport` components in nuxt (+14) [closed] (2024-09-16)\n- [#2638](./issue-2638.md): Multiple v-models/values inside validation provider gives infinite loop (+11) [closed] (2020-02-17)\n\n## Documentation (3)\n\n- [#2849](./issue-2849.md): [v4] - Migration Guide (+26) [closed] (2020-08-04)\n- [#2783](./issue-2783.md): Docs v2 not working (+18) [closed] (2020-06-08)\n- [#4895](./issue-4895.md): Build a Form Generator Tutorial Composition API (+1) (2024-10-15)\n\n## Other (22)\n\n- [#5027](./issue-5027.md): Support for Zod 4 (+25) [closed] (2025-04-18)\n- [#4978](./issue-4978.md): Dev tools memory leak in prod builds - consider make devtools opt-in? (+14) [closed] (2025-01-22)\n- [#4863](./issue-4863.md): @vue/devtools-api/lib/cjs/index.js' does not provide an export named 'setupDevtoolsPlugin' (at vee-validate.esm.js:7:10) (+11) [closed] (2024-09-17)\n- [#4721](./issue-4721.md): The types for the errors when using useFieldArray are incorrect (+12) (2024-04-02)\n- [#5047](./issue-5047.md): Allow multiple useForm | provide unique id to useForm (+8) (2025-05-23)\n- [#5013](./issue-5013.md): FieldArray doesn't work nicely with radio inputs (+7) (2025-03-25)\n- [#4866](./issue-4866.md): Type errors on vee-validate components after Vue 3.5 update (+7) (2024-09-23)\n- [#5074](./issue-5074.md): Types issues when using `setFieldValue` with arrays (+5) (2025-08-06)\n- [#4966](./issue-4966.md): Dirty check doesn't work when resetForm values contains optional field (+6) [closed] (2024-12-22)\n- [#5043](./issue-5043.md): Add `useFieldMeta()` (+5) (2025-05-14)\n- [#4424](./issue-4424.md): Maximum recursive updates exceeded when using `useField` (+8) [closed] (2023-08-18)\n- [#4995](./issue-4995.md): Support Custom Validations for FieldArray fields (+5) (2025-02-26)\n- [#4624](./issue-4624.md): Issue with dynamic validation schema when initial schema is undefined (+7) (2024-01-03)\n- [#4672](./issue-4672.md): Error message localization is not reactive (`setLocale`, `@vee-validate/i18n`, and `vue-i18n`) (+6) [closed] (2024-02-21)\n- [#4835](./issue-4835.md): Extend meta object from useForm with meta state per field (+5) (2024-08-09)\n- [#4697](./issue-4697.md): The meta.dirty value always true when you use initialValues parameter in useForm() (+5) (2024-03-12)\n- [#2486](./issue-2486.md): Chrome autofill leave form as invalid (+11) [closed] (2019-11-12)\n- [#4630](./issue-4630.md): useForm - meta.valid false even tho there are no errors? (+5) (2024-01-12)\n- [#5021](./issue-5021.md): Breaking Change in `useField` Behavior After v4.11.8 - meta object no longer syncs (+3) (2025-04-10)\n- [#4997](./issue-4997.md): initial-values + zod validation-schema behaves strangely in multi-step form (+3) (2025-03-04)\n- [#4684](./issue-4684.md): in Production error context not accessible in shared components across nuxt modules or layers (+4) (2024-03-05)\n- [#4960](./issue-4960.md): toTypedSchema makes handleSubmit.withControlled include all values (+3) (2024-12-12)\n\n## Feature Requests (3)\n\n- [#2191](./issue-2191.md): VeeValidate v3.0 (+26) [closed] (2019-07-29)\n- [#2248](./issue-2248.md): Add a way to get all errors to ValidationObserver (+16) [closed] (2019-08-27)\n- [#4490](./issue-4490.md): Expose useFormContext composable (+6) [closed] (2023-10-04)\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":3378,"content_sha256":"1220b049d5eb8386b27069b9524c39ce142173fbce70d70af39036a14b636f11"},{"filename":"references/issues/issue-2191.md","content":"---\nnumber: 2191\ntitle: VeeValidate v3.0 \ntype: feature\nstate: closed\ncreated: 2019-07-29\nurl: \"https://github.com/logaretm/vee-validate/issues/2191\"\nreactions: 26\ncomments: 34\nlabels: \"[ feature, discussion, breaking]\"\n---\n\n# VeeValidate v3.0 \n\n# VeeValidate 3.0\n\nThis is a draft implementation for version 3.0, which is mostly breaking in many ways but we will try to make it easier to migrate. The changes mostly affect directive usage and will have minimal effects on validation providers.\n\nThis document details all the changes done in `v3`.\n\n> You can follow the implementation PR here #2153\n\n> You can test the `v3` release with the `vee-validate-edge` npm package.\n\n## Goals\n\nThe goals of this release are as following:\n\n- Rewrite in TypeScript.\n- `v-validate` directive deprecation.\n- Overhaul the custom-rules/extension API.\n- Overhaul the localization API.\n\n### TypeScript\n\nVeeValidate has been TypeScript-friendly for a very long time, but it had its shortcomings. Since it was maintained by contributors - a big shout out to you all - it often wasn't in sync with the actual code. Also, some typings were confusing because they were intended to be internal.\n\nA TypeScript codebase will not only give us more confidence, but it will also communicate the intent of this library APIs clearly to TypeScript/JavaScript users.\n\nSome aspects of vee-validate are impossible to Typecheck properly like the injected `errors` and `fields`. This is touched upon later.\n\n### Directive Deprecation\n\nThis is the biggest breaking change and will certainly have some backlash against it, the directive, after all, has been the primary way to use vee-validate since `x.0` releases. Even `vee-validate` name is a pun for the `v-validate` directive.\n\nBut to list the directive problems:\n\n- Requires global installation, tightly coupled to the rest of the library.\n- Directives do not have props, so to pass stuff around we use `data-vv-*` attributes which aren't reactive, are repetitive and will add clutter your template. \n- Forces injected state `errors` and `fields` to be present.\n- `v-if` and `v-for` caveats which aren't apparent to the developer at first glance.\n- Validation Scope is limited within a single...\n\n---\n\n## Top Comments\n\n**@logaretm** [maintainer] (+6):\n\nvee-validate is out, looking forward to your feedback!\n\n**@logaretm** [maintainer]:\n\n@fessacchiotto You could use multiple observers and have them under one parent observer, which would give you what you need as you could check the whole state of the forms or individual tabs by checking each observer.\n\nI will include this use-case in the docs as I think its fairly common.\n\nYou can use the current Provider/Observer components as they didn't change a lot in `v3`. Probably I will skip a beta version since I'm confident in `v3` production readiness.\n\n**@Loremaster** (+4):\n\n@logaretm is migration guide to version 3 available anywhere? I couldn't find it.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2929,"content_sha256":"b0ac45a8ec39046dae613d398d6ce9a3d1fe311892837a85d83d442b8742ce4c"},{"filename":"references/issues/issue-2248.md","content":"---\nnumber: 2248\ntitle: Add a way to get all errors to ValidationObserver\ntype: feature\nstate: closed\ncreated: 2019-08-27\nurl: \"https://github.com/logaretm/vee-validate/issues/2248\"\nreactions: 16\ncomments: 15\nlabels: \"[ enhancement, request]\"\n---\n\n# Add a way to get all errors to ValidationObserver\n\n**Is your feature request related to a problem? Please describe.**\nI really like the changes in v3. It's solved a lot of the issues with componentizing forms (no more inject!) and displaying errors, etc. However, I keep wanting to have some concise way to get all the errors on the page. Either for debugging or for displaying the first error on submit or scrolling the form back up to the error message, etc.\n\n**Describe the solution you'd like**\nAdd `getErrors` or some other interface to `ValidationObserver` to get some sort of error list. `validate` and `setErrors` already exists so it would seem natural to add a `getErrors`.\n\n**Describe alternatives you've considered**\nThe `validate` method could return more than true/false but that seems a bit kludgy. An `error-model` or something similar could be used to store errors based on events.\n\n\n\n---\n\n## Top Comments\n\n**@logaretm** [maintainer] (+5):\n\nCurrently, you can get the errors from the slot scope of the observer. Or using `$refs.observerRef.ctx.errors`.\n\nBut I will think of a better way to get it soon.\n\n**@d3radicated** (+9):\n\nIf you would like to get errors after validation,\n\n```\nthis.$refs.observerRef.validate().then(() => {\n console.log(this.$refs.observerRef.errors);\n})\n```\n\n**@rafaelrenanpacheco** (+8):\n\nCurrent workaround until a better way is published:\n\n```js\nthis.notifications = Object.values(this.$refs.observer.ctx.errors).flat();\n```\n\nThis will ignore the `_vee_n` keys and will flat their values (validation messages) into a final array.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1826,"content_sha256":"d2628b94ebf644338b602114039538a906cfae146cb1057cf16cd8d226146ffb"},{"filename":"references/issues/issue-2486.md","content":"---\nnumber: 2486\ntitle: Chrome autofill leave form as invalid\ntype: other\nstate: closed\ncreated: 2019-11-12\nurl: \"https://github.com/logaretm/vee-validate/issues/2486\"\nreactions: 11\ncomments: 15\n---\n\n# Chrome autofill leave form as invalid\n\n**Versions**\n\n- vee-validate: 3.0.11\n- vue: 2.6.10\n\n**Describe the bug**\nWhen chrome autofill form, vee validate still thinks form is invalid, while all fields are valid. Errors are empty. Touched is true, pristine is false but invalid is true, while it should be false\n\n**To reproduce**\nOpen repro link click login - enter anything. click login. save chrome creds. Reload page open again\n\n**Expected behavior**\nform is valid after chrome autofill.\n\n\n**Demo link**\nhttps://1hqj7.sse.codesandbox.io/\nhttps://codesandbox.io/s/codesandbox-nuxt-1hqj7\n\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":789,"content_sha256":"0eebbdbc32780b5a339f5ae01807ee32ee19ff033af260f0614a929ba53a33f3"},{"filename":"references/issues/issue-2638.md","content":"---\nnumber: 2638\ntitle: Multiple v-models/values inside validation provider gives infinite loop\ntype: bug\nstate: closed\ncreated: 2020-02-17\nurl: \"https://github.com/logaretm/vee-validate/issues/2638\"\nreactions: 11\ncomments: 20\nlabels: \"[ bug, In PR]\"\n---\n\n# Multiple v-models/values inside validation provider gives infinite loop\n\n**Versions**\n- vee-validate: 3.2.1\n- vue: 2.6.10\n\n**Describe the bug**\nThis is a copy of #2587 that got closed. I've attached a better demo.\n\nIt seems that when using a component with multiple v-models inside a validation provider the application hangs with an infinite loop.\n\n**To reproduce**\nSteps to reproduce the behavior:\n1. Go to demo link\n2. The Demo.vue-component contains a validation provider with a component inside.\n3. As soon as a v-model is added to the component the loop starts.\n\n**Demo link**\nhttps://codesandbox.io/s/codesandbox-mlioh\n\n**Desktop (please complete the following information):**\n - OS: win10\n - Browser chrome \n - Version latest","content_type":"text/markdown; charset=utf-8","language":"markdown","size":992,"content_sha256":"a6d0eb202997d5a6dc9c82034aaaa9d10d922b390b4c21321700530ce47de92d"},{"filename":"references/issues/issue-2783.md","content":"---\nnumber: 2783\ntitle: Docs v2 not working\ntype: docs\nstate: closed\ncreated: 2020-06-08\nurl: \"https://github.com/logaretm/vee-validate/issues/2783\"\nreactions: 18\ncomments: 2\nlabels: \"[ docs]\"\n---\n\n# Docs v2 not working\n\n**Versions**\n\n- vee-validate: 2.x\n\n**Describe the bug**\nThe v2 documentation (indexed in the v3 docs) is not available\n\n**Demo link**\nhttps://vee-validate.logaretm.com/v2\n\n\n---\n\n## Top Comments\n\n**@logaretm** [maintainer]:\n\nSorry about that, was moving stuff to netlify over last week. Should be up and running now","content_type":"text/markdown; charset=utf-8","language":"markdown","size":535,"content_sha256":"07ec087e974ef2919c770bcffc1b7a910f613f19988842e285b465dd19706d2f"},{"filename":"references/issues/issue-2849.md","content":"---\nnumber: 2849\ntitle: \"[v4] - Migration Guide\"\ntype: docs\nstate: closed\ncreated: 2020-08-04\nurl: \"https://github.com/logaretm/vee-validate/issues/2849\"\nreactions: 26\ncomments: 26\nlabels: \"[ docs, v4.0]\"\n---\n\n# [v4] - Migration Guide\n\nIs there a migration guide, explaining the changes upgrading from 3.3 to 4.0? \n\n\n---\n\n## Top Comments\n\n**@logaretm** [maintainer] (+8):\n\nI plan to release a few posts on the changes and maybe collect them in a guide but there is no direct upgrade route as the API is completely different, plus it does not support Vue 2.\n\n**@logaretm** [maintainer] (+2):\n\n@ux-engineer I already use `vue-demi` for another lib (villus) which works fine there, however for `vee-validate` it will be tricky as a large portion of the code base depends on the new VNode API which wouldn't work. So basically `Field` and `Form` components won't work.\n\nAnother reason is that some of the internals of vee-validate now relies on adding/removing properties at runtime, which means the old reactivity caveats still apply and won't work well with `v4`, that means limited feature support for `useField` and `useForm` and edge cases will be more apparent and confusing in Vue 2.\n\n**@logaretm** [maintainer] (+4):\n\n@bodograumann I thought about that initially, but aside from how hard is it to find a new name, I think it is better to build on the existing popularity of vee-validate especially not everyone who used vee-validate will switch to the new package and I would be gettings tons of requests for Vue 3 support.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1528,"content_sha256":"70b6a9def64399354e1ecd095cd23d2321a11118850c31babe5c386dbb651538"},{"filename":"references/issues/issue-4424.md","content":"---\nnumber: 4424\ntitle: Maximum recursive updates exceeded when using `useField`\ntype: other\nstate: closed\ncreated: 2023-08-18\nurl: \"https://github.com/logaretm/vee-validate/issues/4424\"\nreactions: 8\ncomments: 2\n---\n\n# Maximum recursive updates exceeded when using `useField`\n\n### What happened?\n\nHello. First of all, thank you for amazing library.\n\nI got warn `[Vue warn]: Maximum recursive updates exceeded in component \u003cApp>. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.` when editing child component which use `useField()` function. \n\nI also tried to modify element of `rules` array like so:\n\n```\nconst setCertificate = useSetFieldValue\u003cCertificate>(\n () => `rules[${props.index}].certificate`\n);\n```\n\nIt's actually works but got another warn `[Vue warn]: [vee-validate]: Could not set value for unknown field with path \"rules[0].certificate\"`\n\n\nMaybe I am doing something wrong with array fields? How can I manage it from child component? \n\n### Reproduction steps\n\n1. Change something in `rule-row.vue`.\n2. Check devtools console for the warning.\n...\n\n\n### Version\n\nVue.js 3.x and vee-validate 4.x\n\n### What browsers are you seeing the problem on?\n\n- [X] Firefox\n- [X] Chrome\n- [ ] Safari\n- [ ] Microsoft Edge\n\n### Relevant log output\n\n```shell\n[Vue warn]: Maximum recursive updates exceeded in component \u003cApp>. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.\n```\n\n\n### Demo link\n\n...\n\n---\n\n## Top Comments\n\n**@viT-1** (+1):\n\nHave same problem with `Maximum recursive updates exceeded` in script setup (any console.log) with my component form since I start to use useField for custom input.\n\nSome investigation:\nrecursive render starts as soon as I use my custom reactive variable with meta (in custom input component), such as\n```js\nconst { meta: veeMeta } = useField(() => params.id, val => !!val, { syncVModel: true });\n\nconst state = reactive({\nisValid: params.required ? false : true,\nisAccepted: params.required ? veeMeta.valid && veeMeta.touched : undefined,\n});\n```\n\n\n**@logaretm** [maintainer]:\n\nThanks for reporting this, I'm investigating it.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2404,"content_sha256":"8cad39024c05d1687ae8b088ce195f57efb8a8c42a3a34bf2fae7bfe7617f104"},{"filename":"references/issues/issue-4490.md","content":"---\nnumber: 4490\ntitle: Expose useFormContext composable\ntype: feature\nstate: closed\ncreated: 2023-10-04\nurl: \"https://github.com/logaretm/vee-validate/issues/4490\"\nreactions: 6\ncomments: 3\nlabels: \"[ enhancement]\"\n---\n\n# Expose useFormContext composable\n\n**Is your feature request related to a problem? Please describe.**\n\nIn cases where multiple form context elements are required, such as utility functions to manage state of reset/submit buttons depending on several factors within form context, it would be nice to have access to the form context via a composable.\n\nFor example, consider a sample function that checks whether a cancel button should be disabled or not. It checks multiple aspects of form context, which would be annoying to both get and pass in individually every time this is used . Instead, passing in `FormContext` allows calling the function and directly passing form context for ease of use.\n\n```ts\n/**\n * Disable cancel buttons when form is submitting or empty/unsubmitted\n *\n * @param form - Form state (potentially from injected reference)\n * @param allowWhenEmpty - Allow cancelling (reset) when empty/unsubmitted (useful in dialogs, etc)\n */\nexport const shouldDisableCancel = (form: FormContext\u003cFieldValues>, allowWhenEmpty = false) => {\n const isSubmittingOrValidating = form.isSubmitting.value || form.isValidating.value;\n\n // Some locations may allow cancelling when empty/unsubmitted (ie. dialogs)\n if (allowWhenEmpty) return isSubmittingOrValidating;\n\n // Must include submit count to allow resetting field after invalid submission attempt\n return isSubmittingOrValidating || (!form.meta.value.dirty && !form.submitCount.value);\n};\n```\n\n**Describe the solution you'd like**\n\nE...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1731,"content_sha256":"c89f752171885819ed1809d2445e5a38e3cc7452fe968e4d38fb0388e954df2c"},{"filename":"references/issues/issue-4624.md","content":"---\nnumber: 4624\ntitle: Issue with dynamic validation schema when initial schema is undefined\ntype: other\nstate: open\ncreated: 2024-01-03\nurl: \"https://github.com/logaretm/vee-validate/issues/4624\"\nreactions: 7\ncomments: 0\n---\n\n# Issue with dynamic validation schema when initial schema is undefined\n\n### What happened?\n\nI am encountering a peculiar behavior when using a computed property for the form validation schema. I'm trying to build a form that takes a dynamic validation schema, which is defined as a computed property. This setup generally functions well, with one notable exception.\n\n**Observed Behavior:**\n\n**Functional state with defined initial schema**: When the validation schema is initially defined (i.e., it has an initial value when the form is first rendered), the form and its validation work as expected. \n\n**Problematic state with undefined initial schema:** When the initial validation schema is not defined (i.e., the schema starts as undefined), the validation behaves differently compared to when the schema is initially set. \n\n**Non-triggering of validation on schema change:** When the validation schema is changed from an **undefined** state to a **defined** one, the form's validation does not trigger automatically. This is in contrast to the behavior observed when the **initial** schema is **defined**, where validation triggers as expected when the schema changes.\n\nAlso, this behavior occurs without any typing errors, warnings, or apparent issues in the console, making it quite difficult to diagnose the problem. It took me some time to figure this out. I assume this is not expected behaviour?\n\nIt's probably easier to check the reproduction link:\n\n**Reproduction Link:** I have created a minimal reproduction of this issue: [StackBlitz Repro...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1786,"content_sha256":"8abce8e2cc76968aa3b30781ecb7fa95516ba7e1deac9d72219fe11078b081c3"},{"filename":"references/issues/issue-4630.md","content":"---\nnumber: 4630\ntitle: useForm - meta.valid false even tho there are no errors?\ntype: other\nstate: open\ncreated: 2024-01-12\nurl: \"https://github.com/logaretm/vee-validate/issues/4630\"\nreactions: 5\ncomments: 14\nlabels: \"[v5]\"\n---\n\n# useForm - meta.valid false even tho there are no errors?\n\n### What happened?\n\nI got multiple Forms that get shown one after the other. If I am at step 5 or whatever and I get back to a previous step like step 2 the form of step 2 gets shown but it's no longer valid even tho it was before.\n\nEven if I then change the values of the form again the meta.valid state doesn't get updated while the errors get set correctly.\n\n\n```ts\ninterface SchadenursacheData {\n schadenursache: SchadenursacheTypes;\n valid: boolean;\n}\n\nconst { handleSubmit, meta, values, errors } = useForm\u003cSchadenursacheData>({\n validationSchema: object({\n schadenursache: string().required(\"Bitte angeben\"),\n }),\n});\n```\n\nThis is the \"failed state\" after returning to the form: \n\n\n\n\n### Reproduction steps\n\nSorry I don't have reliable repro steps outside our codebase.\n\n### Version\n\nVue.js 3.x and vee-validate 4.x\n\n### What browsers are you seeing the problem on?\n\n- [X] Firefox\n- [X] Chrome\n- [X] Safari\n- [ ] Microsoft Edge\n\n### Relevant log output\n\n_No response_\n\n### Demo link\n\n-\n\n### Code of Conduct\n\n- [X] I agree to follow this project's [Code of Conduct](CONDUCT.md)","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1381,"content_sha256":"b52097592f5303f642c16387f4be0e73755626f8dc0f70fb4ee42071b24717ff"},{"filename":"references/issues/issue-4672.md","content":"---\nnumber: 4672\ntitle: Error message localization is not reactive (`setLocale`, `@vee-validate/i18n`, and `vue-i18n`)\ntype: other\nstate: closed\ncreated: 2024-02-21\nurl: \"https://github.com/logaretm/vee-validate/issues/4672\"\nreactions: 6\ncomments: 12\n---\n\n# Error message localization is not reactive (`setLocale`, `@vee-validate/i18n`, and `vue-i18n`)\n\n### What happened?\n\nError messages are not reactive to locale changes like they used to be in v2. We need this functionality because we have a global locale selector button that changes the app locale. When the form is dirty and they change the locale, we need to still show the validation error messages without resetting the validation state.\n\nThere was a similar closed issue: https://github.com/logaretm/vee-validate/issues/3876 , but I don't agree with the conclusion that it's a rare scenario and our application needs this as per our product's requirements.\n\nIt would be ideal if there was a way to pass the reactive `locale` from `vue-i18n` or any source really and have `vee-validate` watch that ref for changes, and when it changes it would switch locales. Currently, the `setLocale` function from `@vee-validate/i18n` does not suffice.\n\n### Reproduction steps\n\n1. Install dependencies\n**dependencies**: `@vee-validate/i18n`, `@vee-validate/rules`, `vue`, `vue-i18n`, `vee-validate`\n**devDependencies**: `@vitejs/plugin-vue`, `typescript`, `vite`, `vue-tsc`\n\n2. main.ts\n ```ts\n import { createApp } from 'vue';\n import { configure, defineRule } from 'vee-validate';\n import * as rules from '@vee-validate/rules';\n import { localize } from '@vee-validate/i18n';\n import { setLocale } from '@vee-validate/i18n';\n import en from '@vee-validate/i18n/dist/locale/en.json';\n import es from '@vee-validate/i18n/dist/locale/es.json';\n import App from './App.vue';\n import i18n from './i18n';\n \n defineRule('required', rules.required);\n \n configure({\n generateMessage: localize({\n en,\n es,\n }),\n });\n \n setLocale('en');\n \n const app = createApp(App);\n app.use(i18n);\n \n app.mount('#app');\n ```...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2144,"content_sha256":"57ad2640cdc776cbd74eb0d0308a75510a3ba405732f8b22334f923d445e2900"},{"filename":"references/issues/issue-4684.md","content":"---\nnumber: 4684\ntitle: in Production error context not accessible in shared components across nuxt modules or layers\ntype: other\nstate: open\ncreated: 2024-03-05\nurl: \"https://github.com/logaretm/vee-validate/issues/4684\"\nreactions: 4\ncomments: 2\n---\n\n# in Production error context not accessible in shared components across nuxt modules or layers\n\n### What happened?\n\nWe are using nuxt-layers and nuxt modules in conjunction with vee-validate.\n\nOur shared component has a fieldwrapper that displays a field label, and shows any error messages below the field by using a field name prop. Currently we are using the provided ErrorMessage component to do this, but we have also tried the composition helpers. `\u003cErrorMessage name=\"fieldName\" />`\n\nOn local everything works as expected.\n\nin production errors in shared components are undefined\n\u003cimg width=\"385\" alt=\"image\" src=\"https://github.com/logaretm/vee-validate/assets/9349874/1e15e0a9-3630-4c4e-9d73-904a01c0816e\">\n\n\nIn production builds the errors are always undefined. It doesn't work when the component is provided either by a nuxt-layer, or by our validation module, it only wo...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1142,"content_sha256":"fc25f1b869379241ec19195c2d98005c120c8da611ace1ec7d966099680c6ecc"},{"filename":"references/issues/issue-4697.md","content":"---\nnumber: 4697\ntitle: The meta.dirty value always true when you use initialValues parameter in useForm()\ntype: other\nstate: open\ncreated: 2024-03-12\nurl: \"https://github.com/logaretm/vee-validate/issues/4697\"\nreactions: 5\ncomments: 1\n---\n\n# The meta.dirty value always true when you use initialValues parameter in useForm()\n\n### What happened?\n\nFor example, I have this form:\n\n```\ninterface EditVersionModalForm {\n name: string\n name2: string\n name3: string\n}\n\nconst useFormOptions = {\n validationSchema: {\n name: requiredField,\n },\n initialValues: {\n name: props.tariff.name,\n name2: props.tariff.name2,\n name3: props.tariff.name3,\n },\n}\n\nconst { defineField, handleSubmit, errors, meta, handleReset } =\n useForm\u003cEditVersionModalForm>(useFormOptions)\n```\n\nIn this case, I am trying to disable the submit button, when values are didn't change at all. But I get always `meta.dirty` value as `true`\n\nI think useForm considers initialValues as \"updated values\". But if we will think from UX side, it seems should be `false`, when you give initial values. And only set to `true`, when initial values are changed.\n\n### Reproduction steps\n\n1. Create form using `useForm()` composable.\n2. Set `initialValues` parameter\n3. Always get a `meta.dirty` value as `true`\n\n\n### Version\n\nVue.js 3.x and vee-validate 4.x\n\n### What browsers are you seeing the problem on?\n\n- [ ] Firefox\n- [x] Chrome\n- [ ] Safari\n- [ ] Microsoft Edge\n\n### Relevant log output\n\n_No response_\n\n### Demo link\n\nI can't. But I think I explained well\n\n### Code of Conduct\n\n- [x] I agree to follow this project's [Code of Conduct](CONDUCT.md)","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1622,"content_sha256":"611f476c6b026c94581fee5282cd11aa2e0b933a441b156120304290f02fd5a0"},{"filename":"references/issues/issue-4721.md","content":"---\nnumber: 4721\ntitle: The types for the errors when using useFieldArray are incorrect\ntype: other\nstate: open\ncreated: 2024-04-02\nurl: \"https://github.com/logaretm/vee-validate/issues/4721\"\nreactions: 12\ncomments: 4\nlabels: \"[ TypeScript]\"\n---\n\n# The types for the errors when using useFieldArray are incorrect\n\n### What happened?\n\n```javascript\nconst {\n handleSubmit,\n values,\n errors,\n} = useForm(\n {\n validationSchema: toTypedSchema(schema),\n initialValues: {\n people:[{name: 'John'}]\n }\n })\n```\nAccording to the types the errors should be \n```javascript\n\u003cinput ... :error-messages=\"errors[`people.${index}.name`]\" />\n```\nBut in reality it is\n```javascript\nerrors: {\n \"people[0].name\": \"Required\",\n \"people[1].name\": \"Required\"\n}\n```\nyet writing this gives me a typescript error\n```\n\u003cinput ... :error-messages=\"errors[`people[${index}].name`]\" />\n```\n\n```\nElement implicitly has an 'any' type because expression of type '`people[${number}].businessName`' can't be used to index type 'Partial\u003cRecord\u003c\"people\" | `people.${number}` | `people.${number}.name` | `people.${number}.businessName` | `people.${number}.country` | `people.${number}.contactEmail` | `people.${number}.contactPerson` | `people.${number}....'.ts(7053)\n```\n\n\n\n### Reproduction steps\n\n1.\n2.\n3.\n...\n\n\n### Version\n\nVue.js 3.x and vee-validate 4.x\n\n### What browsers are you seeing the problem on?\n\n- [X] Firefox\n- [X] Chrome\n- [X] Safari\n- [X] Microsoft Edge\n\n### Relevant log output\n\n_No response_\n\n### Demo link\n\n...\n\n### Code of Conduct\n\n- [X] I agree to follow this project's [Code of Conduct](CONDUCT.md)\n\n---\n\n## Top Comments\n\n**@ArtemDehteruk** (+1):\n\n@gukandrew Hello.\nI haven't fixed it.\nI found that the vee-validate.d.ts file of the vee-validate package dependency is different from the one I get after building that package, and if I use the new file, It fixes errors.\n\n**@Janibek6119**:\n\n@ArtemDehteruk thanks a lot! Apparently the commit where the types were fixed 721e9802d3ef6d94a080f1976463c895db8048eb happened just after the current release tag [v4.15.0](215e27a7d988f3a5ef9b81a67cfa5277cd268d9a)\n\n...\n\n**@ArtemDehteruk**:\n\nHello.\nI did some research and found that the vee-validate has a different context for the vee-validate.d.ts file than the file created using the npm package menager. When I use the created file, it fixes the array path error.\n@logaretm Please check.\nThanks.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2394,"content_sha256":"9861fd94b88aa97296e45e53ffe48055b7d63e0ef18b517d87f45c1e3cba02d6"},{"filename":"references/issues/issue-4835.md","content":"---\nnumber: 4835\ntitle: Extend meta object from useForm with meta state per field\ntype: other\nstate: open\ncreated: 2024-08-09\nurl: \"https://github.com/logaretm/vee-validate/issues/4835\"\nreactions: 5\ncomments: 0\n---\n\n# Extend meta object from useForm with meta state per field\n\n**Is your feature request related to a problem? Please describe.**\n\nWhen building a form, it's a good UX practice to show the validation state of a field as indeterminate _until_ the user has finished typing. Currently, this is not possible when using `useForm`, because the meta object only contains the dirty and touched states for the _entire_ form.\n\nThis is also inconsistent with `useForm`s objects `values` and `errors`, which are objects with keys of each field.\n\n**Describe the solution you'd like**\n\nI propose to be able to do the following:\n\n```\nconst { meta } = useForm({\n firstName: string().required(),\n lastName: string().required()\n})\n```\n\nWhich would give me the state for the form as a whole _plus_ the meta for each field included:\n\n```\nconst meta = {\n dirty: true,\n pending: false,\n touched: true,\n valid: false,\n // keys with the meta for each field\n firstName: {\n dirty: true,\n pending: false,\n touched: true,\n valid: true,\n },\n lastName: {\n dirty: false,\n pending: false,\n touched: false,\n valid: false,\n },\n };\n```\n\nThis solution would allow me to pass specific meta details to each field's component, without having to rely on `useField`, making the code more compact.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1540,"content_sha256":"3c7e16ea36ff993b778918e765b63d064e03c9485bbcab6efcca0fc23b6e69ef"},{"filename":"references/issues/issue-4862.md","content":"---\nnumber: 4862\ntitle: Unable to `autoImport` components in nuxt\ntype: bug\nstate: closed\ncreated: 2024-09-16\nurl: \"https://github.com/logaretm/vee-validate/issues/4862\"\nreactions: 14\ncomments: 19\nlabels: \"[ bug]\"\n---\n\n# Unable to `autoImport` components in nuxt\n\n### What happened?\n\nWhen integrating with nuxt, setting `autoImport: true` doesn't seem to work correctly.\n\nAn error is thrown:\n\n```sh\nThe requested module '/_nuxt/node_modules/.pnpm/[email protected][email protected]/node_modules/vee-validate/dist/vee-validate.js?v=b2471b49' does not provide an export named 'Form' \n```\n\n### Reproduction steps\n\n1. Add nuxt module\n2. Try to use `\u003cForm>`\n\n### Version\n\nVue.js 3.x and vee-validate 4.x\n\n### What browsers are you seeing the problem on?\n\n- [X] Firefox\n- [X] Chrome\n- [X] Safari\n- [X] Microsoft Edge\n\n### Relevant log output\n\n```shell\nThe requested module '/_nuxt/node_modules/.pnpm/[email protected][email protected]/node_modules/vee-validate/dist/vee-validate.js?v=b2471b49' does not provide an export named 'Form'\n```\n\n\n### Demo link\n\nhttps://stackblitz.com/edit/github-kdegep\n\n### Code of Conduct\n\n- [X] I agree to follow this project's [Code of Conduct](CONDUCT.md)\n\n---\n\n## Top Comments\n\n**@luc122c** (+2):\n\nI'm also having a similar issue (`The requested module '[...]vee-validate.js' does not provide an export named 'Field'`). Pinning Nuxt to 3.12.4 seems to be a good workaround for now.\n\n**@genu**:\n\nYou don't have to downgrade nuxt to workaround this issue. You can simply import the component manually from `vee-validate`\n\n**@luc122c**:\n\n> You don't have to downgrade nuxt to workaround this issue. \n\nI know, but I have a lot of components importing `Field`, I don't fancy adding manual imports to them all. It's easier for me to pin Nuxt until the auto-import issue is resolved. ","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1794,"content_sha256":"3e3323670f4a57a19446517b66808cbb4ad20cd5da7d6e1b0bf8d24c8f394c40"},{"filename":"references/issues/issue-4863.md","content":"---\nnumber: 4863\ntitle: \"@vue/devtools-api/lib/cjs/index.js' does not provide an export named 'setupDevtoolsPlugin' (at vee-validate.esm.js:7:10)\"\ntype: other\nstate: closed\ncreated: 2024-09-17\nurl: \"https://github.com/logaretm/vee-validate/issues/4863\"\nreactions: 11\ncomments: 8\n---\n\n# @vue/devtools-api/lib/cjs/index.js' does not provide an export named 'setupDevtoolsPlugin' (at vee-validate.esm.js:7:10)\n\n### What happened?\n\nThere is an error in console:\n\n```\nUncaught SyntaxError: The requested module '/_nuxt/@fs/Users/x/Code/y-frontend/node_modules/.pnpm/@[email protected]/node_modules/@vue/devtools-api/lib/cjs/index.js' does not provide an export named 'setupDevtoolsPlugin' (at vee-validate.esm.js:7:10)Understand this error\n```\n\nI see further information here:\n\nhttps://github.com/nuxt/nuxt/issues/27544#issuecomment-2168194904\n\n\n\n### Reproduction steps\n\n1. Use latest nuxt\n2. Use latest vee-validate\n3.\n\n### Version\n\nVue.js 3.x and vee-validate 4.x\n\n### What browsers are you seeing the problem on?\n\n- [ ] Firefox\n- [X] Chrome\n- [ ] Safari\n- [ ] Microsoft Edge\n\n### Relevant log output\n\n_No response_\n\n### Demo link\n\nn/a\n\n### Code of Conduct\n\n- [X] I agree to follow this project's [Code of Conduct](CONDUCT.md)\n\n---\n\n## Top Comments\n\n**@logaretm** [maintainer]:\n\nI pushed a possible fix by defining `export` fields in `package.json`. I will verify if it works then update this issue.\n\n**@logaretm** [maintainer]:\n\nSeems fixed against the linked issue in Nuxt repo with vee-validate `v4.14.0`. Let me know if this isn't the case.\n\nChange was in 97cebd83ad23e7eeb1fdf69acabd8e42814e1755\n\n**@murshex** (+2):\n\nI have same problem. Using pnpm","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1655,"content_sha256":"6cb3bf94d1a6683e38a607e2a0788416524f1eb0b48e8813f49066609d4fd9d3"},{"filename":"references/issues/issue-4866.md","content":"---\nnumber: 4866\ntitle: Type errors on vee-validate components after Vue 3.5 update\ntype: other\nstate: open\ncreated: 2024-09-23\nurl: \"https://github.com/logaretm/vee-validate/issues/4866\"\nreactions: 7\ncomments: 1\nlabels: \"[ TypeScript]\"\n---\n\n# Type errors on vee-validate components after Vue 3.5 update\n\n### What happened?\n\nAfter the Vue 3.5 upgrade, we get type errors about private types from the ErrorMessage or Field components.:\n- Default export of the module has or is using private name 'FieldSlotProps'\n- Default export of the module has or is using private name 'ErrorMessageSlotProps'\n\nDue to these errors we get serialization errors in TypeScript which cascades through the whole project.\nThe issue did not occur before we upgraded to Vue 3.5 but only happens for the vee-validate package.\n\n### Reproduction steps\n\n1. Install vee-validate in a new Vue project (using vue-create)\n2. Create a new (.ts) file defining a component:\n```typescript\n\nimport { ErrorMessage, Field, Form } from 'vee-validate'\nimport { defineComponent } from 'vue'\n\nexport default defineComponent({\n components: {\n ErrorMessage,\n Field,\n Form\n }\n})\n\n```\n\n3. Observe the type errors on ErrorMessage and Field components:\n\n\n\n### Version\n\nVue.js 3.x and vee-validate 4.x\n\n### What browsers are you seeing the problem on?\n\n- [ ] Firefox\n- [ ] Chrome\n- [ ] Safari\n- [ ] Microsoft Edge\n\n### Relevant log output\n\n_No response_\n\n### Demo link\n\nhttps://github.com/leondeklerkfenetre/vee-validate-playground\n\n### Code of Conduct\n\n- [X] I agree to follow this project's [Code of Conduct](CONDUCT.md)\n\n---\n\n## Top Comments\n\n**@rs3d**:\n\nI had the same issue.\n\nAfter changing this **tsconfig.json** line \n\n```\"composite\": true,``` => ```\"// composite\": true,```\n\n\nthe error is gone.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1765,"content_sha256":"b8ea226baad16473ea1730030c25c28dc8e716d7610dcb82e9e23eac3478f963"},{"filename":"references/issues/issue-4895.md","content":"---\nnumber: 4895\ntitle: Build a Form Generator Tutorial Composition API\ntype: docs\nstate: open\ncreated: 2024-10-15\nurl: \"https://github.com/logaretm/vee-validate/issues/4895\"\nreactions: 1\ncomments: 0\nlabels: \"[ docs]\"\n---\n\n# Build a Form Generator Tutorial Composition API\n\nIt would be greate if this could be translated to composition api\n\nhttps://github.com/logaretm/vee-validate/blob/f290933462db3e3499e158eef136bb30e5bc3942/docs/src/pages/tutorials/dynamic-form-generator.mdx?plain=1#L11","content_type":"text/markdown; charset=utf-8","language":"markdown","size":491,"content_sha256":"6ccc5f1fdb920160a37f402b51bdf3becb1ba68454191a3134e5f5b2da0ed850"},{"filename":"references/issues/issue-4960.md","content":"---\nnumber: 4960\ntitle: toTypedSchema makes handleSubmit.withControlled include all values\ntype: other\nstate: open\ncreated: 2024-12-12\nurl: \"https://github.com/logaretm/vee-validate/issues/4960\"\nreactions: 3\ncomments: 0\n---\n\n# toTypedSchema makes handleSubmit.withControlled include all values\n\n### What happened?\n\nFirst of all, love the project!\n\nI think i may have found a minor issue, but it may also be me just misunderstanding and doing something wrong.\n\nGiven a setup like this:\n```js\nconst validationSchema = toTypedSchema(\n yup.object({\n name: yup.string().required(),\n })\n)\n\nconst initialValues = {\n name: '',\n deletedAt: null, // no input exists for this\n}\n\nconst { handleSubmit, controlledValues } = useForm({ validationSchema, initialValues })\n```\nIf I have a single child input component with `useField('name')`, I find that `controlledValues` only contains name, but the `values` argument provided in `handleSubmit.withControlled` contains both name and deletedAt.\n\nNot sure if this is intended, but if I don't use a validation schema, or if I use a sch...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1077,"content_sha256":"b75d0dfd17520547062c3026da05d52e63c4d32102c6509071ef5ed800d3f9e1"},{"filename":"references/issues/issue-4966.md","content":"---\nnumber: 4966\ntitle: Dirty check doesn't work when resetForm values contains optional field\ntype: other\nstate: closed\ncreated: 2024-12-22\nurl: \"https://github.com/logaretm/vee-validate/issues/4966\"\nreactions: 6\ncomments: 7\n---\n\n# Dirty check doesn't work when resetForm values contains optional field\n\n### What happened?\n\nConsider a use case where user types something in the form and then moves to some other page but forgets to save. In this case it would be nice to show a confirmation dialog to the user to verify if they want to leave the page without saving.\n\nIn order to do this, I'm using `meta` object `dirty` value to check if at least one field's value has been changed. When the user lands on the page then initial data is fetched from the backend server. I'm using `resetForm` to update the values and reset meta state just like it's described in here https://vee-validate.logaretm.com/v4/guide/composition-api/handling-forms/#setting-initial-values-asynchronously. This works for most fields but sometimes there's no \"dirty check\" for some other fields.\n\n### Reproduction steps\n\nOpen stackblitz demo link\n\n1. Type something in the 3rd field. - \"Dirty check\" works as expected.\n2. Press `Reset` button. - This mimics API request, sets values and resets meta state.\n3. Type something in the 3rd field. - \"Dirty check\" doesn't work at all.\n\nI've observed that when `field1` is `undefined` then the last field's \"dirty check\" doesn't work. When `field1` is something else than `undefined` then \"dirty check\" works for all fields. I've also observed that when the order of `formSchema`'s `field2` and `field3` is changed, then `field2` dirty check doesn't work anymore but `field3` dirty check works.\n\n### Version\n\nVue.js 3.x and vee-validate 4.x\n\n### What browsers are you...\n\n---\n\n## Top Comments\n\n**@vonBrax** (+3):\n\nI just stumbled upon this exact same issue today and I spent a few hours unsuccessfully trying to reproduce it until I found this issue, so thank you @sander96 for the demo link.\n\nI have exactly the same use case as the author, which is a schema with some optional fields and async data that is set using `resetForm`, which caused the `dirty` check to stop working.\n\nLooking at the source code, the problem seems to be on this line inside the `isEqual` function:\n\nhttps://github.com/logaretm/vee-validate/blob/f8a82fc4f84a98f7881cb73a023f59a8051d69ab/packages/vee-validate/src/utils/assertions....\n\n**@metalsadman** (+1):\n\nI'm also having this same issue, also spent hours wondering why it's doing this, the problem is we have plenty of forms that rely on this, but now most of them are not detecting dirty states on some fields. My current workaround/hack is similar to @vonBrax solution which is a \"dirty\" (pun intended) solution atm. I hope @logaretm takes notice of this ticket. This use to work we just noticed started happening when our QA reported these issues.\n\n**@joakimriedel**:\n\n> Hi, any ETA on the release?\n\nWhile waiting for an official release, what I did was to build vee-validate locally, put the compressed package in my source in a folder \"local-packages\" and refer to it as:\n\n```\n\"vee-validate\": \"file:local-packages/vee-validate-4.15.1-beta.tgz\"\n```\n\n... in my package.json. Not optimal but works well.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":3255,"content_sha256":"3cf628cd4c818eca98b91a14c5a91b46f2c55cad5236a5576ed0c52647edb4aa"},{"filename":"references/issues/issue-4978.md","content":"---\nnumber: 4978\ntitle: Dev tools memory leak in prod builds - consider make devtools opt-in?\ntype: other\nstate: closed\ncreated: 2025-01-22\nurl: \"https://github.com/logaretm/vee-validate/issues/4978\"\nreactions: 14\ncomments: 7\n---\n\n# Dev tools memory leak in prod builds - consider make devtools opt-in?\n\n### What happened?\n\nHi we have recently had a major memory leak in our production Nuxt SSR application and after many hours debugging the culprit turned out to be vee-validate. See our application memory usage before and after fixing the vee-validate issue below.\n\n\u003cimg width=\"810\" alt=\"Image\" src=\"https://github.com/user-attachments/assets/a41081a9-b5cb-4827-a371-cbed38d43802\" />\n\nI have seen a few other issues related to this such as https://github.com/logaretm/vee-validate/issues/4963 and https://github.com/logaretm/vee-validate/issues/4972 which seem to suggest the issue was fixed in the latest 4.15 but it doesn't seem to be the case. \n\nIn our specific case we did not have the environment variable NODE_ENV=production set at runtime so vee-validate was still running it's devtools specific code creating the DEVTOOLS_FORMS object that references thousands of components causing the leak. \n\nFor anyone else experiencing this issue, **make sure you have NODE_ENV=production** set at runtime. \n\nPersonally I think the dev tools integration should be opt-in to avoid this. We didn't have NODE_ENV=production set because doing so causes `pnpm i` to skip installing dev dependencies when Railway builds our Nuxt app, and its not clear from the documentation that this is very important env var to set if you don't want issues.\n\nI think a better solution would be to only instantiate the devtools integration if NODE_ENV=dev or something similar. What do you think?\n\n\n\n\n### Reproduction steps\n\n...\n\n---\n\n## Top Comments\n\n**@logaretm** [maintainer]:\n\nAFAIK `NODE_ENV!=production` check is a standard across the JS ecosystem, you can find it in most packages like Pinia. \n\n> DEVTOOLS_FORMS object that references thousands of components causing the leak.\n\nPerhaps we can drop the registration logic when the app is running in SSR since it is not useful there anyways. I will see what I can do.\n\n**@fs-public**:\n\n@logaretm Adding my two cents here, this vee-validate issue completely breaks builds on Netlify with latest Nuxt. See https://github.com/nuxt/nuxt/issues/30798 and related. Adding `NODE_ENV` to environment variables on a serverless SaaS is non-standard to fix IMHO.\n\n**@PatrikBird** (+1):\n\nDear @logaretm \n\nThere is a workaround, but a release that fixes the memory leak would be very helpful for users, if it’s not too much trouble. Thanks for all your work ","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2681,"content_sha256":"c847adc151d256310eb483893ff6c8bc5f0ac87fda6d37b0da5f8906b7b370b8"},{"filename":"references/issues/issue-4995.md","content":"---\nnumber: 4995\ntitle: Support Custom Validations for FieldArray fields\ntype: other\nstate: open\ncreated: 2025-02-26\nurl: \"https://github.com/logaretm/vee-validate/issues/4995\"\nreactions: 5\ncomments: 1\n---\n\n# Support Custom Validations for FieldArray fields\n\nAs of this moment, custom validator functions do not work with field arrays.\n\n```\nconst validationSchema = {\n 'fieldArray.*': validatorFn\n}\n\nconst { meta, errors, setErrors, handleSubmit, setFieldValue } = useForm({\n validationSchema\n})\n```\n\nThe upper passage does not work.\n\nI tried to work around this by just returning an array of `[null, null, 'Error here!']`, but the `errors` property returned by `useForm()` returns the first element/does not return the array at all:\n\n```\nfunction validateFieldArray(value) {\n let result = []\n\n for (let i = 0; i \u003c value.length; i++) {\n if (!value[i].trim().length) {\n result[i] = 'This field is required!'\n }\n }\n\n console.log(result) // [empty, empty, 'This field is required!']\n\n // returning true means no error\n return !result.length ? true : result\n}\n\nconst validationSchema = {\n fieldArray: validateFieldArray,\n}\n\n// errors object comes back empty {}\n```\n\nRequested Solution: implement support for custom validator functions (no yup/zod) for field arrays, or let `errors` object pass arrays as error messages\n\n\n\n---\n\n## Top Comments\n\n**@Snurppa**:\n\nAnd `initialValue`! \n\nWas surprised that it was not available — background story is big migration where using `useField`s as drop-in for old field components. We've been able to reduce some effort getting state for fields via `initialValue` in field level as form level initialValues is not currently possible and forced to do the migration bottom-top.\n\nAlso the custom validation functions would be great during this kind of migration.\n\nSo couple of views with repeating field have been slightly tricky to migrate as initialValue is missing from `useFieldArray`.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":2007,"content_sha256":"7e9923bf5a381b73f6d703b12a21729a929efdabfce75dc2fea56b04c0c806f5"},{"filename":"references/issues/issue-4997.md","content":"---\nnumber: 4997\ntitle: initial-values + zod validation-schema behaves strangely in multi-step form\ntype: other\nstate: open\ncreated: 2025-03-04\nurl: \"https://github.com/logaretm/vee-validate/issues/4997\"\nreactions: 3\ncomments: 0\n---\n\n# initial-values + zod validation-schema behaves strangely in multi-step form\n\n### What happened?\n\nI have this example using yup: https://stackblitz.com/edit/vee-validate-v4-hoc-multi-step-form-eky2u2as?file=src%2FApp.vue\n\nAnd this using zod: https://stackblitz.com/edit/vee-validate-v4-hoc-multi-step-form-meu1mnvu?file=src%2FApp.vue\n\nYou will see that both examples are exactly the same. However the value for the zod example only contains the values in the first step but the yup one contains all values.\n\nZod is the validation tool I'm using in my project\n\nLocally I have had varying behaviour. With some form configurations the value contains all of the initial values and other only the values from the first step. I can't figure out the specifics but managed to get this example to reproduce it.\n\n...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1041,"content_sha256":"61cbe75f8e6b6d728410dc79f20ef68d0a70b0cb36246cbb9fd342afb7312b10"},{"filename":"references/issues/issue-5013.md","content":"---\nnumber: 5013\ntitle: FieldArray doesn't work nicely with radio inputs\ntype: other\nstate: open\ncreated: 2025-03-25\nurl: \"https://github.com/logaretm/vee-validate/issues/5013\"\nreactions: 7\ncomments: 0\n---\n\n# FieldArray doesn't work nicely with radio inputs\n\n### What happened?\n\nWhen using FieldArray I get unexpected behavior while using radio buttons. When deleting indexes the browser seems to lose the checked state on radio buttons sometimes. I have added reproduction steps and a code example below.\n\nI have found that the issue lies in the usage of indexes as names, this seems to confuse the browser. Much more than that I do not know\n\n### Reproduction steps\n\n1. Add a total of three items. \n2. On index 0, check the first radio. \n3. On index 1, check the second radio. \n4. On index 2, check the first radio. \n5. Remove index 0. \n6. Notice that the old index 1 item becomes index 0, but its radio checked state is gone, while the HTML input element still has the attribute `checked`.\n\n### Version\n\nVue.js 3.x and vee-validate 4.x\n\n### What browsers are you seeing the problem on?\n\n- [ ] Firefox\n- [x] Chrome\n- [ ] Safari\n- [ ] Microsoft Edge\n\n\n### Demo link\n\nhttps://codesandbox.io/p/devbox/7zqprr\n\n### Code of Conduct\n\n- [x] I agree to follow this project's [Code of Conduct](CONDUCT.md)","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1302,"content_sha256":"473f90ffbe2c69f41162a0359cf4f730ecc1881876705c9f77898117a261ac4c"},{"filename":"references/issues/issue-5021.md","content":"---\nnumber: 5021\ntitle: Breaking Change in `useField` Behavior After v4.11.8 - meta object no longer syncs\ntype: other\nstate: open\ncreated: 2025-04-10\nurl: \"https://github.com/logaretm/vee-validate/issues/5021\"\nreactions: 3\ncomments: 0\n---\n\n# Breaking Change in `useField` Behavior After v4.11.8 - meta object no longer syncs\n\n### What happened?\n\nSince upgrading from version `4.11.8` to any later version (`>= 4.12.x`), a breaking change has occurred in the behavior of `useField`. Specifically, when encapsulating an input within a parent component—such as handling generic UI states like error messages—calling `useField(\"fieldname\")` separately in both parent and child components now returns two separate `meta` objects which are no longer synchronized.\n\nIn previous versions (`\u003c= 4.11.8`), interacting with a field (e.g., touching the field) would correctly update both the child and parent component `meta` states simultaneously. In newer versions, the child component's `meta` updates independently, while the parent's `meta` remains unchanged, causing inconsistent validation state management.\n\n...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1111,"content_sha256":"e53cf382f936eb0083dbc89aadf1e0b8a7c2594f210bae99eda0ce60ba2b3057"},{"filename":"references/issues/issue-5027.md","content":"---\nnumber: 5027\ntitle: Support for Zod 4\ntype: other\nstate: closed\ncreated: 2025-04-18\nurl: \"https://github.com/logaretm/vee-validate/issues/5027\"\nreactions: 25\ncomments: 5\n---\n\n# Support for Zod 4\n\n> I'm posting this issue to all the libraries currently listed in the Ecosystem section of Zod's README. Apologies for the spam! Zod 4 is a big release and it's important to get as much of the ecosystem migrated as possible! \n\n## Zod 4 is now in beta\n\nHello! Colin here, creator of Zod. Thank you for contributing this package to the Zod ecosystem! \n\nFYI, the first beta of Zod 4 has been released. It will be in beta for 4 weeks to allow time for ecosystem libraries (such as yours) to implement support before the first stable version is released. The first stable release will be in mid-May. Keep an eye on this PR to track progress: https://github.com/colinhacks/zod/pull/4074 \n\nAnnouncement post: https://v4.zod.dev/v4\nMigration guide: https://v4.zod.dev/v4/changelog\n\n **Note** — To avoid confusion and outdated information, the Ecosystem page for Zod 4 is starting from scratch. You'll need to implement support for Zod 4 (guidance below). Once you've done that, submit a PR adding yourself to this file: https://github.com/colinhacks/zod/blob/v4/packages/docs/components/ecosystem.tsx\n\n### Migration \n\nThere have been some significant changes.\n\n- A new library `@zod/mini` has been released with a treeshakable/functional API that mirrors Zod's\n- To facilitate code sharing between `zod` and `@zod/mini`, they both have a dependency on a new common core library `@zod/core`. \n- This new package implements the schema subclasses that are then extended by `zod` and `@zod/mini` (and potentially future libraries). It makes it easy to support all these libraries simultaneously, with just one peerDependency on your end. There is little reason for any framework/library to depend directly on `zod` anymore. \n\n```\npnpm install @zod/core@^0.0.1\n```\n\nThis page is intended as a jumping-off point with some guidance for library authors: `@zod/core` docs\n\nDon't hesitate to reach out for help/guidance! \n\n...\n\n---\n\n## Top Comments\n\n**@awacode21** (+39):\n\nWe would like to update to zod 4 but we are using vee validate which currently is preventing us from updating as it does not support zod 4. When will the support be available?\n\n**@colinhacks** (+17):\n\nHere's a dedicated guide for library authors that answers some common questions: https://v4.zod.dev/library-authors\n\n1. Best practices around peer dependencies\n2. How to support Zod v3 and Zod v4 simultaneously\n3. How to support Zod & Zod Mini without extra work\n\nNote that the `@zod/core` package has been abandoned in favor of a subpath: `zod/v4/core`. This makes it much easier for libraries with build on top of Zod with a single peer dependency on `\"zod\"`. The reasons for this change are explained in more detail in the beta announcement: https://v4.zod.dev/v4 \n\n...\n\n**@hyshka** (+17):\n\nZod 4 is now stable. We can update the title of this issue to reflect that.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":3027,"content_sha256":"2220e0db82c3ce8371d49e8573c8f023a7eca8d356f310a9cf0b086b33e35b5a"},{"filename":"references/issues/issue-5043.md","content":"---\nnumber: 5043\ntitle: Add `useFieldMeta()`\ntype: other\nstate: open\ncreated: 2025-05-14\nurl: \"https://github.com/logaretm/vee-validate/issues/5043\"\nreactions: 5\ncomments: 1\n---\n\n# Add `useFieldMeta()`\n\n**Is your feature request related to a problem? Please describe.**\n\nI created a collection of form components, and I want to style the required fields differently.\nI can tell which fields are required by looking at `meta.required`, but `meta` is currently only available through `useField()`.\n\n**Describe the solution you'd like**\n\nI suggest adding `useFieldMeta()` to return the field's meta.\n\n**Describe alternatives you've considered**\n\nI tried `useField()`, but it causes issues when the field needs options (such as `{type:\"checkbox\"}`) because it alters the field's behavior.\n\nAdding `useFieldRequired()`/`useIsFieldRequired()` would also be a suitable solution to my issue, but I noticed that the documentation never mentions `meta.required`, so I assume this property isn't always available.\n\n\n\n---\n\n## Top Comments\n\n**@bblanchon** (+1):\n\nAccording to the migration guide, `meta.required` will stop working in v5:\n\n> Resolving `required` meta flag is no longer supported from schemas.\n\nThis forces me to mark required fields at the component level so I won't need `useFieldMeta()` after all.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1302,"content_sha256":"5c462b363983be820f9fe9634fae64caa5632d931aed99e480ab8d553abd7a7b"},{"filename":"references/issues/issue-5047.md","content":"---\nnumber: 5047\ntitle: Allow multiple useForm | provide unique id to useForm\ntype: other\nstate: open\ncreated: 2025-05-23\nurl: \"https://github.com/logaretm/vee-validate/issues/5047\"\nreactions: 8\ncomments: 1\n---\n\n# Allow multiple useForm | provide unique id to useForm\n\n**Is your feature request related to a problem? Please describe.**\n\nCurrently there is not way to have multiple `useForm` in the same component. (#4550 , #3270)\n\nLet's imagine a scenario where on a page, you have a filters on a sidebar and a top bar form. We might want to separate the validation for both components, and maybe also access the values from formA in formB.\n\n**Describe the solution you'd like**\n\nI was thinking of providing a `key` or `id` property to `useForm` (or `useFormContext` but it's not documented currently).\n\nIt would be used for the provide/inject pattern currently in place.\n\n\n**Describe alternatives you've considered**\n\nThe only alternative we have currently is using a single `useForm` wrapping all our fields.\n\nMaybe i'm missing something ?\nThanks !\n\n\n\n---\n\n## Top Comments\n\n**@ojvribeiro**:\n\nYeah, I tried to do this for a multi-step form for password changing:\n\n\n\nThe second `useForm` work just fine, but the form for email stopped working.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1244,"content_sha256":"1b61195c5adc9b64f62222f773e6bec18f02fad52784f04ceaa1286311ce4a80"},{"filename":"references/issues/issue-5074.md","content":"---\nnumber: 5074\ntitle: Types issues when using `setFieldValue` with arrays\ntype: other\nstate: open\ncreated: 2025-08-06\nurl: \"https://github.com/logaretm/vee-validate/issues/5074\"\nreactions: 5\ncomments: 0\n---\n\n# Types issues when using `setFieldValue` with arrays\n\n### What happened?\n\nWhen using path containing arrays notation (`array[${0}].something`) with `setFieldValue` value type is always set to `never`. \n\nEverything works as expected, it's just a typing issue.\n\n### Reproduction steps\n\n1. Create a dummy test component like: \n ```vue\n \u003cscript lang=\"ts\" setup>\n import * as z from 'zod'\n import { useForm } from 'vee-validate'\n \n const schema = z.object({\n value: z.string(),\n\n // will test on this array\n array: z.array(z.object({\n name: z.string(),\n })),\n })\n \n const { setFieldValue, values } = useForm({\n validationSchema: schema,\n })\n \n function doSomething() {\n // this resolves to `string` as expected\n setFieldValue(`value`, 'foobar')\n \n // this resolves to `{ name: string }[]` as expected\n setFieldValue(`array`, [{ name: 'foo' }])\n \n // this types resolve to `never`, whereas it should resolve to `{ name: string }`\n setFieldValue(`array[${0}]`, { name: 'qux' })\n \n // this types resolve to `never`, whereas it should resolve to `string`\n setFieldValue(`array[${2}].name`, 'baz')\n }\n \u003c/script>\n \n \u003ctemplate>\n \u003cdiv>\n \u003cbutton @click=\"doSomething\">\n Do something\n \u003c/button>\n \u003cpre>{{ values }}\u003c/pre>\n \u003c/div>\n \u003c/template>\n ```\n \n2. Clicking on \"Do something\" button should resolve as expected:\n ```json\n {\n \"value\": \"foobar\",\n \"array\": [\n {\n \"name\": \"qux\"\n },\n null,\n {\n \"name\": \"baz\"\n }\n ]\n }\n ```...","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1815,"content_sha256":"431ebfd26d8927a101b536585c867190a092f1360d59a372a46e2c0472e6a9b3"},{"filename":"references/releases/_INDEX.md","content":"---\ntotal: 20\nlatest: [email protected]\n---\n\n# Releases Index\n\n- [[email protected]](./[email protected]): [email protected] (2021-02-07)\n- [[email protected]](./[email protected]): [email protected] (2021-02-07)\n- [[email protected]](./[email protected]): [email protected] (2021-02-06)\n- [[email protected]](./[email protected]): [email protected] (2021-02-01)\n- [[email protected]](./[email protected]): [email protected] (2021-01-26)\n- [[email protected]](./[email protected]): [email protected] (2021-01-19)\n- [[email protected]](./[email protected]): [email protected] (2021-01-17)\n- [[email protected]](./[email protected]): [email protected] (2021-01-13)\n- [[email protected]](./[email protected]): [email protected] (2021-01-13)\n- [[email protected]](./[email protected]): [email protected] (2021-01-12)\n- [[email protected]](./[email protected]): [email protected] (2021-01-11)\n- [[email protected]](./[email protected]): [email protected] (2021-01-05)\n- [[email protected]](./[email protected]): [email protected] (2021-01-04)\n- [[email protected]](./[email protected]): [email protected] (2021-01-02)\n- [[email protected]](./[email protected]): [email protected] (2020-12-26)\n- [[email protected]](./[email protected]): [email protected] (2020-12-18)\n- [[email protected]](./[email protected]): [email protected] (2020-12-18) **[MINOR]**\n- [[email protected]](./[email protected]): [email protected] (2020-12-18)\n- [[email protected]](./[email protected]): [email protected] (2020-12-15)\n- [[email protected]](./[email protected]): [email protected] (2020-12-12)\n\n## Changelog\n\n- [CHANGELOG.md](./CHANGELOG.md)\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1766,"content_sha256":"7b500513901a3b404f2b998a0b8a13de3526ebff0563a8b788ac742d4a8a1317"},{"filename":"references/releases/CHANGELOG.md","content":"# Change Log\n\n## 4.15.1\n\n### Patch Changes\n\n- 721e980: Align FormErrors type with its actual structure at runtime.\n- 546d82e: fix: normalize objects before equality checks closes #5006\n\n## 4.15.0\n\n### Patch Changes\n\n- 30281f5: fix: lazy load the devtools dep to force it out of production bundle\n- ec121b1: fix: skip loading devtools if in SSR\n\n## 4.14.7\n\n### Patch Changes\n\n- be994b4: fix: show uncontrolled field info in devtools closes #4914\n\n## 4.14.6\n\n## 4.14.5\n\n### Patch Changes\n\n- e9f8c88: fix: force loading the mjs module when using nuxt\n\n## 4.14.4\n\n### Patch Changes\n\n- f33974c: fix(types): expose field and form slot prop types closes #4900\n- 0991c01: fix: devtools crashing when a field name is defined as getter\n- ecb540a: fix: handle getter field names properly closes #4877\n- 4f88d85: fix: specify module type on package.json\n\n## 4.14.3\n\n### Patch Changes\n\n- 07c27d5: fix: remove rogue console.log\n\n## 4.14.2\n\n### Patch Changes\n\n- f0d4e24: fix: upgrade vue devtools dependency version closes #4863\n\n## 4.14.1\n\n## 4.14.0\n\n### Minor Changes\n\n- 404cf57: chore: bump release\n\n### Patch Changes\n\n- f7a4929: feat: expose useFormContext closes #4490\n- 97cebd8: chore: add 'exports' field in package.json for all packages\n- 421ae69: \"fix(types): export component internal types\"\n\n## 4.13.2\n\n### Patch Changes\n\n- afbd0e5: feat: support valibot 0.33.0\n\n## 4.13.1\n\n## 4.13.0\n\n### Minor Changes\n\n- 454bc45: fix: force resetForm should not merge values closes #4680 closes #4729\n- 27fe5c8: feat: provide form values as context for yup closes #4753\n\n### Patch Changes\n\n- ae3772a: feat: expose setValue on Field instance and slot props closes #4755\n- fd008c1: feat: added ResetFormOpts arg to useResetForm closes #4707\n\n## 4.12.8\n\n### Patch Changes\n\n- f8bab9c: \"fix: field-level validation not working with typed scheams closes #4744\"\n\n## 4.12.7\n\n### Patch Changes\n\n- 1376794: fix: handle meta.required for single field schemas closes #4738\n- 1376794: fix: add try-catch for schema description logic across all major schema providers\n- c4415f8: fix: ensure meta.required is reactive whenever the schema changes closes #4738\n\n## 4.12.6\n\n### Patch Changes\n\n- 07d01fd: fix: re-apply errors to avoid race conditions\n\n## 4.12.5\n\n### Patch Changes\n\n- d779980: fix: make sure removePathState removes the correct path state\n- 9eda544: \"fix: remove event arg from define field handlers for component compat closes #4637\"\n\n## 4.12.4\n\n### Patch Changes\n\n- 2a09a58: \"fix: check if both source and target objects are POJOs\"\n\n## 4.12.3\n\n### Patch Changes\n\n- 72e4379: fix: remove deep data mutation warning closes #4597\n- a18c19f: feat: allow path meta querying for nested fields closes #4575\n- e2171f8: feat: expose some state on form instance\n\n## 4.12.2\n\n### Patch Changes\n\n- b2203c8e: fix: apply schema casts when submitting closes #4565\n- ec8a4d7e: fix: defineField should respect global validateOnModelUpdate closes #4567\n\n## 4.12.1\n\n### Patch Changes\n\n- 36f6b9e6: fix: reset form and field behaviors for unspecified values closes #4564\n- c1c6f399: fix: unref initial values when initializing the form closes #4563\n\n## 4.12.0\n\n### Minor Changes\n\n- bbecc973: feat: deprecate reactive initial values closes #4402\n\n### Patch Changes\n\n- f9a95843: feat: add label support to defineField closes #4530\n- f688896f: fix: avoid overriding paths and destroy path on remove closes #4476 closes #4557\n- 2abb8966: fix: clone values before reset closes #4536\n- e370413b: fix: handle hoisted paths overriding one another\n- 95b701f7: feat: allow getters for field arrays\n\n## 4.11.8\n\n### Patch Changes\n\n- d1b5b855: fix: avoid triggering extra model value events closes #4461\n- 78c4668e: feat: allow null as a valid Form prop type closes #4483\n\n## 4.11.7\n\n### Patch Changes\n\n- a1414f6a: fix: export ModelessBinds type closes #4478\n\n## 4.11.6\n\n### Patch Changes\n\n- f683e909: fix(types): infer the model value prop name correctly\n\n## 4.11.5\n\n### Patch Changes\n\n- 27c9ef24: feat(types): stronger define component bind types closes #4421\n- 804ec6fa: fix: use flags to avoid validating during reset #4404 #4467\n\n## 4.11.4\n\n### Patch Changes\n\n- 4d8ed7eb: feat: added reset opts to force values closes #4440\n- b53400e2: fix: silent validation should not mark a field as validated\n- 8f680bf1: fix: clone the schema object before validating closes #4459\n- 5231f439: fix: respect validate on model update configuration closes #4451, closes #4467\n\n## 4.11.3\n\n## 4.11.2\n\n### Patch Changes\n\n- 2ff045c1: fix: do not warn if a form or a field was resolved closes #4399\n- 73219b40: feat: expose all internal types\n- 4947e88f: feat: expose BaseInputBinds and BaseComponentBinds interfaces #4409\n- ecbb690d: feat: query fields meta state\n\n## 4.11.1\n\n### Patch Changes\n\n- 5e23dcb9: fix: add support for parsing range inputs\n\n## 4.11.0\n\n### Minor Changes\n\n- 2d8143f9: feat: added composition setter functions\n\n## 4.10.9\n\n### Patch Changes\n\n- c02337f3: fix: correct the setErrors type to allow for string[]\n\n## 4.10.8\n\n### Patch Changes\n\n- a9a473b4: feat(perf): improve performance setFieldError and setFieldValue closes #4382\n\n## 4.10.7\n\n### Patch Changes\n\n- 9290f5a9: fix: clone values inserted into field arrays closes #4372\n- 93f8001a: fix: do not warn if the validation is for removed paths closes #4368\n\n## 4.10.6\n\n### Patch Changes\n\n- 40ce7a91: feat: expose normalizeRules closes #4348\n- e9b215a7: fix: resetForm should cast typed schema values closes #4347\n- 4e11ff95: fix: validate form values on setValues by default closes #4359\n- e354a13a: fix: Normalize error paths to use brackets for indices closes #4211\n- 68080d28: feat: use silent validation when field is initialized closes #4312\n\n## 4.10.5\n\n### Patch Changes\n\n- 6a1dc9bd: fix: component blur event and respect model update config closes #4346\n\n## 4.10.4\n\n### Patch Changes\n\n- 2f9ca91c: fix(types): remove deep readonly type for now\n\n## 4.10.3\n\n### Patch Changes\n\n- 32537e14: fix: less strict object checks for undefined and missing keys closes #4341\n- c3698f07: fix: respect model modifiers when emitting the value closes #4333\n\n## 4.10.2\n\n### Patch Changes\n\n- 1660048e: fix: define binds not respecting config events\n\n## 4.10.1\n\n### Patch Changes\n\n- fc416918: fix: handle NaN when parsing number inputs closes #4328\n- 435e7857: fix: reset present values after all path mutation\n- 273cca74: fix: reset field should not validate closes #4323\n\n## 4.10.0\n\n### Minor Changes\n\n- 7a548f42: chore: require vue 3.3 and refactor types\n- 7ce9d671: feat(breaking): disable v-model support by default closes #4283\n- bfd6b00a: \"feat: allow custom models for defineComponentBinds\"\n- d4fafc95: \"feat: allow handleBlur to run validations\"\n- 05d957ec: feat: mark form values as readonly closes #4282\n\n### Patch Changes\n\n- 77345c42: fix: reset form should merge values closes #4320\n- f1dc1359: fix: use event value if no checked value for checkbox/radio closes #4308\n- 3e4a7c13: feat(dx): make `syncVModel` accept the model propName\n- 2cf0eec9: feat: allow multiple messages in a validator fn closes #4322 #4318\n- ed208918: fix: trigger validation with setFieldValue by default closes #4314\n- 6a3f9f15: fix: parse native number fields closes #4313\n\n## 4.9.6\n\n### Patch Changes\n\n- b138282a: fix(types): export SetFieldValueOptions interface closes #4290\n- 6e074f77: fix: handleBlur should respect blur validate config closes #4285\n\n## 4.9.5\n\n### Patch Changes\n\n- 7356c102: fix: setFieldError should set meta.valid closes #4274\n\n## 4.9.4\n\n### Patch Changes\n\n- f4ea2c05: fix: exclude undefined and null from initial values closes #4139\n\n## 4.9.3\n\n### Patch Changes\n\n- 09d5596b: fix: run validation on value change closes #4251\n- 9bfbfaaf: feat: added isValidating to useForm\n- 48b45d91: fix: hoist nested errors path to the deepest direct parent closes #4063\n\n## 4.9.2\n\n### Patch Changes\n\n- 31090e0d: avoid double unset path with field array remove\n- 9046308b: fixed validations running for unmounted fields\n- fe322a07: batch unsets and sort paths unset order for safer unsets closes #4115\n\n## 4.9.1\n\n### Patch Changes\n\n- 681bbab4: Added type-fest to core package dependencies\n\n## 4.9.0\n\n### Minor Changes\n\n- 41b5d39b: Implemented path types into various form API functions\n- 95409080: Added component and input binds helpers\n\n### Patch Changes\n\n- 7554d4a6: fix field array triggering validation when an item is removed\n- 298577b7: setValues does not delete unspecified fields values\n\n## 4.8.6\n\n### Patch Changes\n\n- 6e0b0557: Introduced official nuxt module package\n\n## 4.8.5\n\n### Patch Changes\n\n- 9048a238: fixed zod union issues not showing up as errors closes #4204\n\nAll notable changes to this project will be documented in this file.\nSee Conventional Commits for commit guidelines.\n\n## 4.8.4 (2023-03-24)\n\n### Bug Fixes\n\n- make initial values partial closes #4195 (eeccd0c)\n- properly unref the schema before checking for default values closes #4196 (8e3663d)\n\n### Features\n\n- allow name ref to be a lazy function (8fb543a)\n\n## 4.8.3 (2023-03-15)\n\n**Note:** Version bump only for package vee-validate\n\n## 4.8.2 (2023-03-14)\n\n### Bug Fixes\n\n- do not use name as a default label for useField closes #4164 (d5acff7)\n\n## 4.8.1 (2023-03-12)\n\n### Bug Fixes\n\n- make sure to have a fallback for undefined casts closes #4186 (9f1c63b)\n\n### Features\n\n- expose errorBag to slot props (371744e)\n\n# 4.8.0 (2023-03-12)\n\n### Bug Fixes\n\n- finally handicap yup schema resolution (303b1fb)\n- initial sync with v-model if enabled closes #4163 (1040643)\n- properly aggregrate nested errors for yup (7f90bbc)\n- remove console.log from devtools integration (3c2d51c)\n- remove yup schema type and rely on assertions (5cbb913)\n- render zod multiple errors in nested objects closes #4078 (f74fb69)\n- run silent validation after array mutations closes #4096 (044b4b4)\n- type inference fix (ac0383f)\n- watch and re-init array fields if form data changed closes #4153 (6e784cc)\n\n### Features\n\n- Better Yup and Zod typing with output types and input inference (#4064) (3820a5b)\n- export type `FieldState` (#4159) (69c0d12)\n\n## 4.7.4 (2023-02-07)\n\n### Bug Fixes\n\n- pass the field label as a seperate value closes #4097 (89f8689)\n\n### Features\n\n- **#4117:** add resetField on Form/useForm (#4120) (87c4278), closes #4117\n- expose state getters on the form instance via template refs (#4121) (7f1c39c)\n\n## 4.7.3 (2022-11-13)\n\n### Bug Fixes\n\n- use cloned value when setting field value closes #3991 (90b61fc)\n\n## 4.7.2 (2022-11-02)\n\n### Bug Fixes\n\n- don't mutate validated meta when silent validation closes #3981 closes #3982 (6652a22)\n\n## 4.7.1 (2022-10-23)\n\n### Bug Fixes\n\n- clean up single group value after unmount closes #3963 (#3972) (8ccfd2b)\n- correctly mutate deep field array item and trigger validation (#3974) (267736f)\n- mark slot prop field value as any closes #3969 (#3973) (70ddc5b)\n\n# 4.7.0 (2022-10-09)\n\n### Features\n\n- allow passing form control to useField closes #3204 (#3923) (4c59d63)\n- expose controlled values on useForm (#3924) (2517319)\n\n## 4.6.10 (2022-09-30)\n\n### Bug Fixes\n\n- use ssr safe file check (56663aa)\n\n## 4.6.9 (2022-09-19)\n\n### Bug Fixes\n\n- perform field reset before all values reset closes #3934 (1c016d9)\n\n## 4.6.8 (2022-09-19)\n\n### Bug Fixes\n\n- ensure validation if we skip checkbox value setting #3927 (#3930) (82d05db)\n- extend is equal with file comparison logic #3911 (#3932) (c7c806c)\n- handle nested value change validation #3926 (#3929) (771e7f2)\n\n### Features\n\n- expose RuleExpression type closes #3913 (cdaf22d)\n\n## 4.6.7 (2022-08-27)\n\n### Bug Fixes\n\n- allow generics for generic function type (91e97aa)\n- handle validation races for async validations (#3908) (8c82079)\n\n## 4.6.6 (2022-08-16)\n\n### Bug Fixes\n\n- return value if no model modifiers are defined closes #3895 (#3896) (6ab40df)\n\n## 4.6.5 (2022-08-11)\n\n### Bug Fixes\n\n- reset the original value when resetField is called #3891 (#3892) (7113dcc)\n\n## 4.6.4 (2022-08-07)\n\n### Bug Fixes\n\n- make sure to deep watch created models by useFieldModel (fbe273c)\n\n## 4.6.3 (2022-08-07)\n\n### Features\n\n- Expose InvalidSubmissionHandler and GenericValidateFunction types (#3853) (3ccf27d)\n\n## 4.6.2 (2022-07-17)\n\n### Bug Fixes\n\n- avoid toggling field array checkboxes values closes #3844 (fffad4b)\n\n### Features\n\n- expose field and form options closes #3843 (7437612)\n\n## 4.6.1 (2022-07-12)\n\n### Bug Fixes\n\n- pass onInvalidSubmit prop to submitForm closes #3841 (b6cf543)\n\n# 4.6.0 (2022-07-11)\n\n### Bug Fixes\n\n- added existing undefined path fallback closes #3801 (fd0500c)\n- avoid inserting value binding for file type inputs closes #3760 (3c76bb2)\n- avoid validating when field instance exists (3759df2)\n- compare form meta.dirty based on original values than staged initials closes #3782 (f3ffd3c)\n- expose ValidationOptions type closes #3825 (9854865)\n- exposed component APIs to their TS defs with refs closes #3292 (ae59d0f)\n- fast equal before deciding value was changed closes #3808 (3d582ec)\n- use multiple batch queues for both validation modes closes #3783 (6156603)\n\n### Features\n\n- **4.6:** Allow mutating field array iterable's value property (#3618) (#3759) (c3c40e5)\n- add move to FieldArray (a52f133)\n- added unsetValueOnUnmount config (#3815) (e6e1c1d)\n- added useFieldModel to useForm API (26c828e)\n- allow keep values config to be reactive (5009bd8)\n- better normalization for native input file events (2751552)\n- Remove yup type dependency (#3704) (e772f9a)\n- Sync useField with component v-model (#3806) (0ef7582)\n\n## 4.5.11 (2022-04-10)\n\n### Bug Fixes\n\n- ignore validation of removed array elements closes #3748 (3d49faa)\n\n### Features\n\n- chain of GenericValidateFunction in useField (#3725) (#3726) (8db4077)\n\n## 4.5.10 (2022-03-08)\n\n**Note:** Version bump only for package vee-validate\n\n## 4.5.9 (2022-02-22)\n\n### Bug Fixes\n\n- mark fields validated via form validate as validated (ad9fa9d)\n\n## 4.5.8 (2022-01-23)\n\n### Bug Fixes\n\n- clear old error path error when changing field name closes #3664 (f736e62)\n- field array swap not working when falsy values are present at paths (40afbd9)\n\n## 4.5.7 (2021-12-07)\n\n### Bug Fixes\n\n- always attach model update event closes #3583 (6a53e80)\n\n## 4.5.6 (2021-11-17)\n\n### Bug Fixes\n\n- corrected the typing for the resetField function closes #3568 (4e9460e)\n- new devtools typings (f288ca5)\n- use watchEffect to compute form meta closes #3580 (e8729dc)\n\n## 4.5.5 (2021-11-01)\n\n### Bug Fixes\n\n- prevent toggle checkboxes when form resets closes #3551 (cad12ba)\n\n## 4.5.4 (2021-10-20)\n\n**Note:** Version bump only for package vee-validate\n\n## 4.5.3 (2021-10-17)\n\n### Features\n\n- added slot typings for components closes #3534 (#3537) (52a2a38)\n\n## 4.5.2 (2021-09-30)\n\n### Bug Fixes\n\n- use klona/full mode to handle luxon values closes #3508 (048c9c0)\n\n## 4.5.1 (2021-09-29)\n\n**Note:** Version bump only for package vee-validate\n\n# 4.5.0 (2021-09-26)\n\n**Note:** Version bump only for package vee-validate\n\n## 4.4.11 (2021-09-11)\n\n### Bug Fixes\n\n- dynamic rule forcing validation closes #3485 (d3f0fc0)\n\n## 4.4.10 (2021-08-31)\n\n### Bug Fixes\n\n- added silent validation run after reset closes #3463 (a61f7ab)\n- handle absent model value closes #3468 (2c4a7ff)\n- **types:** remove arguments of PrivateFieldContext.handleReset (2e45d1f)\n- ensure option bound value type is preserved closes #3440 (b144615)\n\n## 4.4.9 (2021-08-05)\n\n### Bug Fixes\n\n- ensure to clone user passed values in setters closes #3428 (a720c24)\n- prioritize the current value if another field of same name is mounted closes #3429 (cf036ec)\n\n## 4.4.8 (2021-07-31)\n\n**Note:** Version bump only for package vee-validate\n\n## 4.4.7 (2021-07-20)\n\n### Bug Fixes\n\n- avoid watching values at the end of reset calls closes #3407 (86f594f)\n\n### Features\n\n- add standalone prop for fields (#3379) (3689437)\n- expose FieldContext type closes #3398 (a6e4c0a)\n- expose form and field injection keys (6034e66)\n\n## 4.4.6 (2021-07-08)\n\n### Bug Fixes\n\n- clean error message for singular fields after unmount (#3385) (4e81cce)\n- quit unsetting path if its already unset (cfe45ba)\n- expose setters in composition API (d79747d)\n\n## 4.4.5 (2021-06-13)\n\n## 4.4.4 (2021-06-05)\n\n### Bug Fixes\n\n- field with pre-register schema errors should be validated on register closes #3342 (61c7359)\n- make sure to create the container path if it exists while null or undefined (79d3779)\n- make sure to create the container path if it exists while null or undefined (79d3779)\n\n### Features\n\n- expose setters in composition API (61f942f)\n\n## 4.4.3 (2021-06-02)\n\n### Bug Fixes\n\n- respect the Field bails option closes #3332 (6679387)\n\n## 4.4.2 (2021-05-28)\n\n### Bug Fixes\n\n- clean up the old values path when fields exchange names fixes #3325 (fe51c12)\n\n## 4.4.1 (2021-05-24)\n\n### Bug Fixes\n\n- forgot adding errors in useValidationForm (d032d3b)\n- re-introduce the errors prop back on the form validation result closes #3317 (b439a73)\n\n# 4.4.0 (2021-05-23)\n\n### Bug Fixes\n\n- seperate model detection from event emitting closes #3312 (5e72852)\n\n# 4.4.0-alpha.2 (2021-05-14)\n\n### Bug Fixes\n\n- avoid clearing all errors before validating schema (51c2e78)\n\n# 4.4.0-alpha.1 (2021-05-14)\n\n### Bug Fixes\n\n- minifier issue when handling await (f206cac)\n\n# 4.4.0-alpha.0 (2021-05-14)\n\n### Bug Fixes\n\n- deprecate handleInput and use handleChange for both events (#3303) (4cb10de)\n\n### Features\n\n- custom values and errors (#3305) (427802b)\n\n## 4.3.6 (2021-05-08)\n\n### Bug Fixes\n\n- added a symbol to detect non passed props with Vue 3.1.x (#3295) (0663539)\n\n## 4.3.5 (2021-05-01)\n\n### Bug Fixes\n\n- priotrize self injections over parent injections closes #3270 (07c1234)\n\n## 4.3.4 (2021-04-27)\n\n### Bug Fixes\n\n- update the valid flag regardless of mode closes #3284 (6594ad1)\n\n## 4.3.3 (2021-04-22)\n\n### Features\n\n- touch all fields on submit (#3278) (fc4e400)\n\n## 4.3.2 (2021-04-21)\n\n### Bug Fixes\n\n- unwrap initial value with useField.resetField fixes #3272 (#3274) (f6e9574)\n\n## 4.3.1 (2021-04-18)\n\n### Bug Fixes\n\n- give error message component a name (b7dcebf)\n- minor perf enhancement by lazy evaulation of slot props (a306b1b)\n\n# 4.3.0 (2021-04-07)\n\n### Features\n\n- added support for reactive schemas (#3238) (295d656)\n- added support for setting multiple field errors closes #3117 (db0a6a0)\n- support v-model.number (#3252) (8f491da)\n\n## 4.2.4 (2021-03-26)\n\n### Bug Fixes\n\n- validation triggered on value change (10549b7)\n\n## 4.2.3 (2021-03-22)\n\n### Bug Fixes\n\n- prevent yup schema from setting non-interacted fields errors closes #3228 (534f8b2)\n\n## 4.2.2 (2021-03-03)\n\n### Bug Fixes\n\n- ensure having a truthy fallback for fields missing in schema (7cd6941)\n- handle pending validation runs during field unmounting (ef5a7cc)\n\n## 4.2.1 (2021-02-26)\n\n### Bug Fixes\n\n- added initial check against the field errors (4288fb6)\n\n# 4.2.0 (2021-02-24)\n\n**Note:** Version bump only for package vee-validate\n\n## 4.1.20 (2021-02-24)\n\n### Bug Fixes\n\n- avoid setting checkbox values before registeration closes #3183 (ab5f821)\n- change errors source to form closes #3177 (7c13c92)\n- use the issues array for zod error aggregation closes #3184 (01b89e4)\n\n## 4.1.19 (2021-02-16)\n\n### Bug Fixes\n\n- use relative imports for shared type (6790545)\n\n### Features\n\n- improve typing for field yup schema (c59f1f0)\n\n## 4.1.18 (2021-02-10)\n\n### Bug Fixes\n\n- avoid unsetting field value if switched with another closes #3166 (f5a79fe)\n\n## 4.1.17 (2021-02-08)\n\n### Bug Fixes\n\n- add a handler for regex object params closes #3073 (7a5e2eb)\n- added emits and onSubmit custom prop (#3115) (8f2c110)\n- array radio fields not switching value correctly closes #3141 (3d4efef)\n- avoid returning undefined for form errors when form does not exist (8cce17a)\n- avoid validating dependencies via watcheffect closes #3156 (a7b91f6)\n- cast radio buttons value correctly closes #3064 (3e0f9a4)\n- clear out initial values for unregistered fields closes #3060 (56206de)\n- correctly set the initial value from the v-model closes #3107 (4bed9a8)\n- export submission types #3112 (3f35167)\n- fill the target rule params for message generators closes #3077 (f5e1bd3)\n- handle formless checkboxes value toggling closes #3105 (504f30b)\n- handle reactive field names and value swaps (cf8051d)\n- missing export for useErrors helpers (28537cc)\n- pass down listeners to the input node closes #3048 (2526a63)\n- prevent default reset behavior with handleReset (a66df13)\n- prevent resetForm from toggling checkbox value #3084 (38778f9)\n- react to validation events changes (078e61b)\n- reset meta correctly with resetField (012658c)\n- resolve component before rendering closes #3014 (f8f481d)\n- resolve path values with global rules closes #3157 (beaf316)\n- set field initial value on the fid lookup closes #3128 (650d5cf)\n- support dynamic labels closes #3053 (31b2238)\n- typing issue from #3134 (29e5cff)\n- use the custom injection fn for initial field values (38cd32b)\n\n### Features\n\n- add submit count state (#3070) (a7fe71e)\n- added context awareness to composition helpers for fields (b59fe88)\n- added context information to validation functions (7e6675d)\n- added test cases and fallbacks for unresolved cases (71bda03)\n- added the useResetForm helper (4c57715)\n- added unchecked-value prop to the field component (af910c3)\n- added useErrors and useField error helpers (4cda2fe)\n- added useIsDirty helpers (6b7e4ab)\n- added useIsSubmitting helper (7a58fd8)\n- added useIsTouched helpers (fdb2d5a)\n- added useIsValid helpers (26fbb29)\n- added useSubmitCount helper (c4a6dea)\n- added useSubmitForm hook (#3101) (d042882)\n- added useValidateField and useValidateForm helpers (62355a8)\n- added validate field function to form and useForm (#3133) (926bed1)\n- added validate method on the form ref instance closes #3030 (ed0faff)\n- added validation trigger config per component closes #3066 (f0e30a2)\n- added value change support for native multi select (#3146) (0601586)\n- added values helpers (e0f16d6)\n- added warnings for non existent fields and allow reactive paths (4182d2f)\n- avoid watching rules when passed as functions (539f753)\n- dont render any tags when no message exists closes #3118 (92eba41)\n- enhance ts typing for form functions (8f7d8e8)\n- enhance useField types (dcb8049)\n- enrich form validation results (0c84c80)\n- export some internal types closes #3065 (b88dffd)\n- field.reset() should reset the field to its initial value (a11f1b7)\n- implement similar reset API for fields (38c3923)\n- new reset API (6983738)\n- rename reset methods to be more consistent (3a0dc4d)\n- update docs (0f5ac98)\n- use internal yup types (#3123) (7554bfc)\n- use resolveDynamicComponent instead (f1b5f89)\n\n### Performance Improvements\n\n- cache field props in a computed property (d266878)\n- cache form slot props in a computed property (49fa2c1)\n\n## 4.1.16 (2021-02-07)\n\n**Note:** Version bump only for package vee-validate\n\n## 4.1.15 (2021-02-07)\n\n### Bug Fixes\n\n- resolve path values with global rules closes #3157 (beaf316)\n\n## 4.1.14 (2021-02-06)\n\n### Bug Fixes\n\n- avoid validating dependencies via watcheffect closes #3156 (a7b91f6)\n\n## 4.1.13 (2021-02-01)\n\n### Features\n\n- added value change support for native multi select (#3146) (0601586)\n\n## 4.1.12 (2021-01-26)\n\n### Bug Fixes\n\n- array radio fields not switching value correctly closes #3141 (3d4efef)\n- clear out initial values for unregistered fields closes #3060 (56206de)\n- typing issue from #3134 (29e5cff)\n\n## 4.1.11 (2021-01-19)\n\n### Features\n\n- added validate field function to form and useForm (#3133) (926bed1)\n\n## 4.1.10 (2021-01-17)\n\n### Bug Fixes\n\n- set field initial value on the fid lookup closes #3128 (650d5cf)\n\n## 4.1.9 (2021-01-13)\n\n### Features\n\n- use internal yup types (#3123) (7554bfc)\n\n## 4.1.8 (2021-01-12)\n\n### Features\n\n- dont render any tags when no message exists closes #3118 (92eba41)\n\n## 4.1.7 (2021-01-12)\n\n### Bug Fixes\n\n- export submission types #3112 (3f35167)\n\n## 4.1.6 (2021-01-11)\n\n### Bug Fixes\n\n- added emits and onSubmit custom prop (#3115) (8f2c110)\n\n## 4.1.5 (2021-01-05)\n\n### Bug Fixes\n\n- correctly set the initial value from the v-model closes #3107 (4bed9a8)\n\n## 4.1.4 (2021-01-04)\n\n### Bug Fixes\n\n- handle formless checkboxes value toggling closes #3105 (504f30b)\n\n## 4.1.3 (2021-01-02)\n\n### Features\n\n- enhance useField types (dcb8049)\n\n## 4.1.2 (2020-12-26)\n\n### Features\n\n- added useSubmitForm hook (#3101) (d042882)\n\n## 4.1.1 (2020-12-18)\n\n### Bug Fixes\n\n- missing export for useErrors helpers (28537cc)\n\n# 4.1.0 (2020-12-18)\n\n### Bug Fixes\n\n- avoid returning undefined for form errors when form does not exist (8cce17a)\n\n### Features\n\n- added context awareness to composition helpers for fields (b59fe88)\n- added test cases and fallbacks for unresolved cases (71bda03)\n- added the useResetForm helper (4c57715)\n- added useErrors and useField error helpers (4cda2fe)\n- added useIsDirty helpers (6b7e4ab)\n- added useIsSubmitting helper (7a58fd8)\n- added useIsTouched helpers (fdb2d5a)\n- added useIsValid helpers (26fbb29)\n- added useSubmitCount helper (c4a6dea)\n- added useValidateField and useValidateForm helpers (62355a8)\n- added values helpers (e0f16d6)\n- added warnings for non existent fields and allow reactive paths (4182d2f)\n- enhance ts typing for form functions (8f7d8e8)\n- enrich form validation results (0c84c80)\n- export some internal types closes #3065 (b88dffd)\n\n## 4.0.7 (2020-12-18)\n\n### Bug Fixes\n\n- react to validation events changes (078e61b)\n\n## 4.0.6 (2020-12-15)\n\n### Bug Fixes\n\n- prevent default reset behavior with handleReset (a66df13)\n- prevent resetForm from toggling checkbox value #3084 (38778f9)\n\n### Features\n\n- added unchecked-value prop to the field component (af910c3)\n\n### Performance Improvements\n\n- cache field props in a computed property (d266878)\n- cache form slot props in a computed property (49fa2c1)\n\n## 4.0.5 (2020-12-12)\n\n### Features\n\n- added validation trigger config per component closes #3066 (f0e30a2)\n\n## 4.0.4 (2020-12-09)\n\n### Bug Fixes\n\n- add a handler for regex object params closes #3073 (7a5e2eb)\n- fill the target rule params for message generators closes #3077 (f5e1bd3)\n\n### Features\n\n- add submit count state (#3070) (a7fe71e)\n\n## 4.0.3 (2020-12-05)\n\n### Bug Fixes\n\n- cast radio buttons value correctly closes #3064 (3e0f9a4)\n- reset meta correctly with resetField (012658c)\n- use the custom injection fn for initial field values (38cd32b)\n\n## 4.0.2 (2020-11-27)\n\n### Bug Fixes\n\n- support dynamic labels closes #3053 (31b2238)\n\n## 4.0.1 (2020-11-25)\n\n### Bug Fixes\n\n- pass down listeners to the input node closes #3048 (2526a63)\n\n# 4.0.0 (2020-11-16)\n\n### Features\n\n- added validate method on the form ref instance closes #3030 (ed0faff)\n- update docs (0f5ac98)\n\n# 4.0.0-beta.19 (2020-11-07)\n\n### Bug Fixes\n\n- resolve component before rendering closes #3014 (f8f481d)\n\n### Features\n\n- field.reset() should reset the field to its initial value (a11f1b7)\n- implement similar reset API for fields (38c3923)\n- new reset API (6983738)\n- rename reset methods to be more consistent (3a0dc4d)\n- use resolveDynamicComponent instead (f1b5f89)\n\n# 4.0.0-beta.18 (2020-11-05)\n\n### Bug Fixes\n\n- handle reactive field names and value swaps (cf8051d)\n\n### Features\n\n- avoid watching rules when passed as functions (539f753)\n\n# 4.0.0-beta.17 (2020-11-04)\n\n### Features\n\n- added context information to validation functions (7e6675d)\n\n# 4.0.0-beta.16 (2020-10-29)\n\n### Features\n\n- initial form meta (#3003) (f7fd407)\n\n# 4.0.0-beta.15 (2020-10-28)\n\n### Features\n\n- add `initialErrors` prop (#3002) (9850b3f)\n\n# 4.0.0-beta.14 (2020-10-26)\n\n### Features\n\n- deprecate the disabled prop (29f4dca)\n- use injection keys to type inject API (79207b2)\n\n# 4.0.0-beta.13 (2020-10-23)\n\n### Features\n\n- `useForm` Field types (#2996) (727f229)\n\n# 4.0.0-beta.12 (2020-10-21)\n\n### Bug Fixes\n\n- upgrade to Vue 3.0.2 and fix broken cases (ede7214)\n\n# 4.0.0-beta.11 (2020-10-18)\n\n### Bug Fixes\n\n- provide yup object schema type to the useForm closes #2988 (29157f7)\n\n# 4.0.0-beta.10 (2020-10-15)\n\n### Bug Fixes\n\n- properly initialize initial values closes #2978 (c0ba699)\n- typos in test descriptions (#2970) (a0132df)\n\n# 4.0.0-beta.9 (2020-10-14)\n\n### Bug Fixes\n\n- improve useForm meta types (#2963) (6b46047)\n\n### Features\n\n- meta setters (#2967) (5036e13)\n\n# 4.0.0-beta.8 (2020-10-12)\n\n### Features\n\n- added handleInput and handleBlur to field scoped slot props (69d5833)\n- expose reset() on the form controller object (3229ee7)\n- new meta tags API (#2958) (7494bfc)\n- remove aria attributes and leave it to userland (365d825)\n- remove valid fields from errors mapping (1eee524)\n\n# 4.0.0-beta.7 (2020-10-10)\n\n### Bug Fixes\n\n- avoid accessing properties in form directly to avoid warninings (c5627af)\n- update the handleSubmit signature (#2954) (d17517d)\n\n# 4.0.0-beta.6 (2020-10-10)\n\n### Features\n\n- form and fields values setters (#2949) (cc2cb41)\n- reactive initial form values (#2946) (ac2c68f)\n\n# 4.0.0-beta.5 (2020-10-08)\n\n### Bug Fixes\n\n- sync model value on input closes #2944 (5f77fa9)\n\n# 4.0.0-beta.4 (2020-10-08)\n\n### Bug Fixes\n\n- prevent recursive re-render model update (#2943) (9fa319f)\n- set falsy initial values (4b29e72)\n- use validateField instead of onChange handler for blur events (636077a)\n\n# 4.0.0-beta.3 (2020-10-06)\n\n### Bug Fixes\n\n- avoid toggling checkbox `checked` attr in `handleChange` (#2937) (b8dafbd)\n\n### Features\n\n- added `validateOnMount` prop to `Field` and `Form` components (#2938) (3a0d878)\n\n# 4.0.0-beta.2 (2020-10-05)\n\n### Features\n\n- field labels (#2933) (513137f)\n\n# 4.0.0-beta.1 (2020-10-02)\n\n### Bug Fixes\n\n- avoid binding the value to file inputs (02a2745)\n\n# 4.0.0-beta.0 (2020-10-01)\n\n### Bug Fixes\n\n- make sure to unwrap initial value (0298a92)\n\n### Features\n\n- validation triggers (#2927) (e725f43)\n\n# 4.0.0-alpha.14 (2020-09-20)\n\n### Bug Fixes\n\n- **core:** in case of radio or checkbox explicitly set initialValue (#2907) (e45ec82)\n\n### Features\n\n- use symbols to avoid provide/inject conflicts (cc80032)\n- workspaces (#2904) (0c05f94)\n\n# 4.0.0-alpha.13 (2020-09-16)\n\n### Features\n\n- nested objects/arrays (#2897) (8d161a1)\n\n# 4.0.0-alpha.12 (2020-09-15)\n\n### Features\n\n- cast single checkboxes values to booleans closes #2889 (7a08184)\n- invoke generateMessage handler for local functions closes #2893 (e9fe773)\n\n# 4.0.0-alpha.11 (2020-09-02)\n\n**Note:** Version bump only for package vee-validate\n\n# 4.0.0-alpha.10 (2020-08-29)\n\n### Bug Fixes\n\n- added temporary fix for #2873 with form meta (6e1bf17)\n\n# 4.0.0-alpha.9 (2020-08-28)\n\n### Bug Fixes\n\n- adapt to the breaking changes in #vue-1682 closes #2873 (05f7df3)\n\n# 4.0.0-alpha.8 (2020-08-13)\n\n### Bug Fixes\n\n- detect initial values from v-model (e566302)\n- handle unmount issue when removed value is falsy for checkboxes (b6393f4)\n- initial array values for checkboxes not populated correctly in form (fb99edc)\n- umounting group of checkbox issues (8c77af5)\n\n### Features\n\n- added basic v-model support (c93d125)\n- merge ctx.attrs to any rendered root node (5c9979c)\n- sync the model value with inner value (57d7923)\n\n# 4.0.0-alpha.7 (2020-08-04)\n\n### Bug Fixes\n\n- avoid removing array value for a non-group field closes #2847 (69f2092)\n- bails affects yup non-object validators (a50645b)\n- initial values on HTML inputs (c4f4eb9)\n\n### Features\n\n- deprecate the skipOptional config (e62f5ea)\n\n# 4.0.0-alpha.6 (2020-07-27)\n\n### Bug Fixes\n\n- render input tags by default for the field component (858c47b)\n\n# 4.0.0-alpha.5 (2020-07-24)\n\n### Bug Fixes\n\n- unregister fields once they are unmounted (0d601cb)\n\n### Features\n\n- **v4:** add checkbox and radio HTML input support (#2835) (ab3d499)\n- render input by default for the field component (81d055d)\n\n# 4.0.0-alpha.4 (2020-07-23)\n\n**Note:** Version bump only for package vee-validate\n\n# 4.0.0-alpha.3 (2020-07-21)\n\n### Features\n\n- automatic injection of the form controller (c039831)\n- remove debounce feature and make it userland (b7263ce)\n\n# 4.0.0-alpha.2 (2020-07-19)\n\n### Features\n\n- always render a from by default (402603a)\n\n# 4.0.0-alpha.1 (2020-07-18)\n\n### Bug Fixes\n\n- added check for cross-fields extraction on unsupported schema (0ff1bad)\n- added errorMessage prop to the field type (f1553d0)\n- added single error message prop to the provider slot props (bc97d0c)\n- added unwrap util function (121bffc)\n- adjust the useField options to be less strict (7ea8263)\n- check if a form is present before accessing its schema (3656181)\n- debouncing not working correctly and move it to hoc only (86280a1)\n- ensure we unwrap the field id if it was reactive (7f91e93)\n- initial validation not respecting the config opts (2443d44)\n- localization default fallback not being interpolated correctly (165e89c)\n- no clue why this isn't building (0d3e7fd)\n- only add novalidate attr if the rendered element is form (3638cea)\n- param mapping causing target names to resolve incorrectly (fb77dc6)\n- set pending back to false earlier in the cycle (a4237a2)\n- temporary fix for the unamed import issue with vue-beta 4 (62d27e9)\n- unwrap flags before sending them to the observer slot (19f7886)\n- use the proper model event name (5704db8)\n- watch target fields once they change (a4184b0)\n\n### Features\n\n- adapt the changes from the v3 master branch (2301c5a)\n- add name resolution from v3 (ba77fdd)\n- add native submit alternative to handleSubmit (bc00888)\n- added 'as' prop to the validation provider (5c8ae9c)\n- added alert role to the error message (714abfe)\n- added aria and a11y improvements (ca74f16)\n- added built-in support for yup validation schema (e436b75)\n- added ErrorMessage component (9570412)\n- added support for custom components (c661c7e)\n- added useField and useForm hooks (c1e9007)\n- allow the as prop to be a component definition (29790d4)\n- allow the observer to render forms and handle submit events (9e0d59b)\n- allow validation schema to accept other expressions (ddeeaea)\n- change default field value to undefiend (00c8754)\n- deprecate names option on validate API (fe90820)\n- deprecate the 'required' flag (283caa0)\n- enable interaction modes and localization APIs (8486aaf)\n- expose errorMessage prop on useField and Provider (04eecaa)\n- expose the form values and pass them to the handleSubmit (de51155)\n- hook up the provider with new observer implementation (4d18a65)\n- implement bails for useField and ValidationProvider (486babd)\n- implement initial values (8239130)\n- implement validation debounce (e294409)\n- implemented disabled prop (88bf28e)\n- make rules watchable (90530cd)\n- make the as prop take priority to determine what to render (d5a033f)\n- new field binding object (a58a84b)\n- new handleSubmit signature (63cbeaf)\n- only export the provider for now (0bf3efe)\n- remove vid from fields (1b9bded)\n- support immediate validation (42cd6ed)\n- support inline rules as functions (3c74681)\n- support yup validation schemas on field-level (0802512)\n- updated vnode utils to handle Vue 3 VNode API (29a4fe8)\n- use defineComponent to type Provider and Observer definitions (80980cf)\n- validate yup form schemas using object validation (bf216dd)\n- validation schema support (523824a)\n- working draft for the vprovider with composition api (b830054)\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":34960,"content_sha256":"eed2a42b87284ac7b8f8cd8978a3e21b266eb96c963bb5e887a4674b08f8825a"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.0.5\npublished: 2020-12-12\n---\n\n# [email protected]\n\n#### New Features\n\n- Added `validateOnInput`, `validateOnUpdate`, `validateOnBlur`, `validateOnModelUpdate` props to the `Field` component to customize validation triggers per field instance #3066 (f0e30a2cc79843040028b7070bc88846f2447c85)","content_type":"text/markdown; charset=utf-8","language":"markdown","size":332,"content_sha256":"3693611a13203d6dcad01138bcf06d3f6002b97238a44f8b558292ee9620b771"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.0.6\npublished: 2020-12-15\n---\n\n# [email protected]\n\n#### New Features\n\n- added `unchecked-value` prop to the `\u003cField />` component to allow creating toggling value fields.\n- minor performance enhancements for `\u003cField />` and `\u003cForm />` components (49fa2c1b4a337149c533c13725d2e71bb2664706) (d2668787d0ffcab5ba2e8be048ee7334d2b0f9e7)\n\n#### Bug Fixes\n\n- fixed an odd behavior where `resetForm` or `handleReset` would toggle checkboxes values each time they are called #3084 (38778f96471b6aa16fb020cfb1bde56b77a19cfb)\n- added a `preventDefault` call on native `reset` events to prevent the browser's default behavior of unchecking the inputs (a66df13c3f39d84984581dc3c0ce368b052b6e8e)\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":724,"content_sha256":"c68695b894911772463c6935d32e9012e5be53a2c8d78862693b9935fde6b405"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.0.7\npublished: 2020-12-18\n---\n\n# [email protected]\n\n#### Bug Fixes\n\n- Allow `validateOnXXX` props to be reactive on the `Field` component","content_type":"text/markdown; charset=utf-8","language":"markdown","size":178,"content_sha256":"003e4d82210f3621498140d1e15f11382eb2605cf559c3ac15413ba7f239054b"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.0\npublished: 2020-12-18\n---\n\n# [email protected]\n\n#### Composition Helpers\n\nAdded (#3055) the following composition API functions, these functions should make it easier to build specific specialized components for your forms (indicators, behaviors, etc...) \n\n- `useResetForm` allows you to reset the form from anywhere in the component tree\n- `useFieldErrors` returns a computed ref to any form field's error message\n- `useFormErrors` returns a computed ref of the entire form's error bag\n- `useIsFieldDirty` returns a computed boolean ref for the field's dirty status\n- `useIsFieldTouched` returns a computed boolean ref for the field's touched status\n- `useIsFormDirty` returns a computed boolean ref for the form's dirty status (if any field is dirty)\n- `useIsFormTouched` returns a computed boolean ref for the form's touched status (if any field is touched)\n- `useIsFieldValid` returns a computed boolean ref for a field's valid status\n- `useIsFormValid` returns a computed boolean ref if the form is valid\n- `useIsSubmitting` returns a computed boolean if the form is submitting\n- `useValidateField` returns a function that validates the specified field\n- `useValidateForm` returns a function that validates the context form\n- `useSubmitCount` returns the submission attempts count done by the user\n- `useFieldValue` returns a specific field's current value\n- `useFormValues` returns the values of the form's fields \n\n#### Breaking Changes\n\n- Changed the return result of `validate()` for the `\u003cForm />` and `useForm()`, instead of a boolean it now returns an object containing `errors` object and `valid` boolean flag, this should make the function more useful.\n\n#### Types\n\n- Exported a few internal Types #3065 (b88dffd)","content_type":"text/markdown; charset=utf-8","language":"markdown","size":1775,"content_sha256":"10c32fd8154d2e9894f59aa4d24064652c8758e4d86e59ea8ad1821b3b038c89"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.1\npublished: 2020-12-18\n---\n\n# [email protected]\n\n- Fixed missing exports for `useFieldError` and `useFormErrors`","content_type":"text/markdown; charset=utf-8","language":"markdown","size":155,"content_sha256":"fef6b0310c02449ec1cf3a3714ac7581fc2f769e95f112f8b4bfd283cd4b2b92"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.10\npublished: 2021-01-17\n---\n\n# [email protected]\n\n#### Bug Fixes\n\n- Fixed an issue where array fields didn't preserve their state if another item were added and they weren't manipulated yet #3128 (650d5cf9f75f9b9247fc813acf2aff4089f05415)","content_type":"text/markdown; charset=utf-8","language":"markdown","size":285,"content_sha256":"565822607eb3c051ee2c9acef3ba89e3867a31633035fff160bc214c7645de1d"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.11\npublished: 2021-01-19\n---\n\n# [email protected]\n\n#### New Features\n\n- Exposed `validateField` function on the `\u003cForm />` slot props and `useForm` return value, previously it was only available as a composable helper function.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":274,"content_sha256":"d61844d8e1ba23df4f11631bb1ad2bb99eb30f4c12e57cb2747f08dffd1c5c12"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.12\npublished: 2021-01-26\n---\n\n# [email protected]\n\n#### Bug Fixes\n\n- Fixed an issue where radio fields in an array were not switching their value correctly when removing previous items #3141 (3d4efef68c63a3b57e2bf14fed913dbf841a7f5e)","content_type":"text/markdown; charset=utf-8","language":"markdown","size":279,"content_sha256":"3a01b29798f2d3c89fcddb00c672675c9d9376e425d184a806e5055c0d5ec98b"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.13\npublished: 2021-02-01\n---\n\n# [email protected]\n\n#### Bug Fixes\n\n- Added partial support for the `select[multiple]` element #3145 (#3146)\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":186,"content_sha256":"7247789dc77720f14696cd389951528729aac7d5eb388b5c7a18467e2a647c4d"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.14\npublished: 2021-02-06\n---\n\n# [email protected]\n\n#### Bug Fixes\n\n- Fixed an issue where fields with global rules that includes cross-field validation will ignore the validation triggers #3156 (a7b91f6e6c38f0b5262e2d4c1814154efa3b78c8)","content_type":"text/markdown; charset=utf-8","language":"markdown","size":282,"content_sha256":"a15d7e3583f54cd5729c245e8e772f8b6e0d368e9fef4d24f67da7ed81626691"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.15\npublished: 2021-02-07\n---\n\n# [email protected]\n\n#### Bug Fixes\n\n- Fixed global rules not resolving nested field value when targetted by another field #3157 (beaf3168490aee585542a19c9a910d9493e78208)","content_type":"text/markdown; charset=utf-8","language":"markdown","size":247,"content_sha256":"8a5e31513183488c12ac87b74b7fe4af4cc77faa2276bb2145929f0c72b3917d"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.16\npublished: 2021-02-07\n---\n\n# [email protected]\n\nThis release has no public changes aside from internal TypeScript enhancements","content_type":"text/markdown; charset=utf-8","language":"markdown","size":173,"content_sha256":"1ee22bd6f8b4440b196dbd594d97fd3a523cc732d1ba4c2afb97c83647046cc2"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.2\npublished: 2020-12-26\n---\n\n# [email protected]\n\n#### New Feature\n\n- added `useSubmitForm` composition API helper that functions similarly to `handleSubmit` but with a composition API style.\n\n```js\nimport { useSubmitForm } from 'vee-validate';\n\nconst submitForm = useSubmitForm((values, actions) => {\n // Send data to your api ...\n alert(JSON.stringify(values, null, 2));\n\n // You can perform any of the form actions using the actions object\n // set a single field value\n actions.setFieldValue('field', 'hello');\n // set multiple fields values\n actions.setValues({ email: 'value', password: 'hi' });\n // set a single field error\n actions.setFieldError('field', 'this field is bad');\n // set multiple fields errors\n actions.setErrors({ email: 'bad email', password: 'bad password' });\n // reset the form\n actions.resetForm();\n});\n```","content_type":"text/markdown; charset=utf-8","language":"markdown","size":890,"content_sha256":"2c2fbd15dab1ea455b3e86a22c2134b17bba4163b2c1d154047479c0dbbe1304"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.3\npublished: 2021-01-02\n---\n\n# [email protected]\n\n#### Types\n\nNow you can provide a value type to `useField`:\n\n```typescript\nconst { value, resetField } = useField\u003cstring>('email', yup.string().email());\n\nvalue.value = 1; // ⛔️ Error\nvalue.value = '[email protected]'; // ✅\n\nresetField({\n value: 1, // ⛔️ Error\n});\nresetField({\n value: '[email protected]', // ✅\n});\n```\n\nIt defaults to `any`, this also fixes the issue where the `value` prop is typed as `any` when it should be `Ref\u003cany>`","content_type":"text/markdown; charset=utf-8","language":"markdown","size":547,"content_sha256":"72cca830eef76d14219f86147bc8c1f6f5bd3f7d44accae3cc60b027dca50a96"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.4\npublished: 2021-01-04\n---\n\n# [email protected]\n\n#### Bugs Fixed\n\nfixed an issue where formless checkboxes created with `\u003cField />` component would fail to toggle their associated `v-model` value #3105 \n\nThis also means can use a group `\u003cField type=\"checkbox\" />` without form as long as they are bound to the same `v-model`, which mirrors the behavior of `v-model` on `input[type=\"checkbox\"]` where it wasn't possible before without a wrapping `\u003cForm />` or `useForm`.\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":515,"content_sha256":"ec591ebfcef6fe29cfb113c2d12929a39e11237afb202c78695deff3b4042e0d"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.5\npublished: 2021-01-05\n---\n\n# [email protected]\n\n#### Fixes\n\nFixed an issue caused by the `4.1.4` release where initial values with `v-model` were not correctly set.","content_type":"text/markdown; charset=utf-8","language":"markdown","size":210,"content_sha256":"ad703afdb7db4c6e1b888e375a981ca3437672e5b2c6a8734930c6f7cca1ee62"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.6\npublished: 2021-01-11\n---\n\n# [email protected]\n\n#### Types\n\n- added `onSubmit` prop on the `Form` component and added `emits` option to allow templates to work well with typescript. #3112 #3114 \n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":241,"content_sha256":"ee9cadf8a63e577179b084bb53d29f0f69b6207b79effcea09ae77c31a2cd53a"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.7\npublished: 2021-01-12\n---\n\n# [email protected]\n\n#### Types\n\n- Exposed a couple of submission types: `SubmissionContext`, `SubmissionHandler` #3112 ","content_type":"text/markdown; charset=utf-8","language":"markdown","size":193,"content_sha256":"b998549cc99efe767951ea22cd1dbdd78ffb79e286e75f80720b4a5f0ce8358f"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.8\npublished: 2021-01-13\n---\n\n# [email protected]\n\n#### Enhancements\n\n- Changed `\u003cErrorMessage />`to not render anything when there are no messages for the associated field #3118 (92eba41)","content_type":"text/markdown; charset=utf-8","language":"markdown","size":231,"content_sha256":"a490f667a175a13eaabf35135f8cd2b9ce59d50c47b8db213510fd8bb113075a"},{"filename":"references/releases/[email protected]","content":"---\ntag: [email protected]\nversion: 4.1.9\npublished: 2021-01-13\n---\n\n# [email protected]\n\n#### \n\n- Updated the types to use `yup` own type information and enhanced the compatibility between generic `useForm` and `object` schemas (#3123)","content_type":"text/markdown; charset=utf-8","language":"markdown","size":240,"content_sha256":"be70c58d8c58c7dcf70e297aa585635c122a07c5f3f216c2ba683c4d43968159"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"logaretm/vee-validate ","type":"text"},{"text":"[email protected]","type":"text","marks":[{"type":"code_inline"}]}]},{"type":"paragraph","content":[{"text":"Tags:","type":"text","marks":[{"type":"strong"}]},{"text":" prev: 1.0.0-beta.10, next-edge: 4.5.0-alpha.2, edge: 4.5.0-alpha.6","type":"text"}]},{"type":"paragraph","content":[{"text":"References:","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"Docs","type":"text","marks":[{"type":"link","attrs":{"href":"./references/docs/_INDEX.md","title":null}}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"API Changes","type":"text"}]},{"type":"paragraph","content":[{"text":"This section documents version-specific API changes for vee-validate v4.x — prioritize these over legacy patterns.","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"BREAKING: ","type":"text"},{"text":"v-model","type":"text","marks":[{"type":"code_inline"}]},{"text":" support disabled by default in v4.10.0 for performance; enable via ","type":"text"},{"text":"configure({ validateOnModelUpdate: true })","type":"text","marks":[{"type":"code_inline"}]},{"text":" or per-field ","type":"text"},{"text":"syncVModel","type":"text","marks":[{"type":"code_inline"}]},{"text":" ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/CHANGELOG.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEW: ","type":"text"},{"text":"defineField","type":"text","marks":[{"type":"code_inline"}]},{"text":" introduced in v4.9.0 — replaces ","type":"text"},{"text":"defineComponentBinds","type":"text","marks":[{"type":"code_inline"}]},{"text":" and ","type":"text"},{"text":"defineInputBinds","type":"text","marks":[{"type":"code_inline"}]},{"text":" for cleaner Composition API integration ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/CHANGELOG.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"DEPRECATED: Reactive initial values deprecated in v4.12.0; use non-reactive objects or getters to prevent unintended sync ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/CHANGELOG.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEW: ","type":"text"},{"text":"useFormContext","type":"text","marks":[{"type":"code_inline"}]},{"text":" exposed in v4.14.0 for accessing form state in deeply nested components without manual injection ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/CHANGELOG.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEW: ","type":"text"},{"text":"setValue","type":"text","marks":[{"type":"code_inline"}]},{"text":" exposed on ","type":"text"},{"text":"Field","type":"text","marks":[{"type":"code_inline"}]},{"text":" instances and slot props in v4.13.0 for manual value updates ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/CHANGELOG.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEW: Composition setter hooks (","type":"text"},{"text":"useSetFieldValue","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"useSetFormValues","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"useSetFormErrors","type":"text","marks":[{"type":"code_inline"}]},{"text":") added in v4.11.0 for external state management ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/CHANGELOG.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEW: ","type":"text"},{"text":"handleBlur","type":"text","marks":[{"type":"code_inline"}]},{"text":" accepts ","type":"text"},{"text":"shouldValidate","type":"text","marks":[{"type":"code_inline"}]},{"text":" parameter since v4.10.0 to control validation triggers on blur events ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/CHANGELOG.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEW: ","type":"text"},{"text":"syncVModel","type":"text","marks":[{"type":"code_inline"}]},{"text":" accepts target model prop name as a string in v4.10.0 for custom model support ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/CHANGELOG.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEW: ","type":"text"},{"text":"isValidating","type":"text","marks":[{"type":"code_inline"}]},{"text":" state added to ","type":"text"},{"text":"useForm","type":"text","marks":[{"type":"code_inline"}]},{"text":" and form slot props in v4.9.3 to track async validation status ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/CHANGELOG.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEW: ","type":"text"},{"text":"move(oldIdx, newIdx)","type":"text","marks":[{"type":"code_inline"}]},{"text":" added to ","type":"text"},{"text":"FieldArray","type":"text","marks":[{"type":"code_inline"}]},{"text":" in v4.6.0 for reordering items within array fields ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/CHANGELOG.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEW: Specialized state hooks (","type":"text"},{"text":"useIsFieldDirty","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"useIsFormValid","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"useFieldValue","type":"text","marks":[{"type":"code_inline"}]},{"text":") added in v4.1.0 for granular state access ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/[email protected]","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"DEPRECATED: ","type":"text"},{"text":"handleInput","type":"text","marks":[{"type":"code_inline"}]},{"text":" deprecated in v4.4.0; use ","type":"text"},{"text":"handleChange","type":"text","marks":[{"type":"code_inline"}]},{"text":" for both input and change events ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/CHANGELOG.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEW: ","type":"text"},{"text":"label","type":"text","marks":[{"type":"code_inline"}]},{"text":" support in ","type":"text"},{"text":"defineField","type":"text","marks":[{"type":"code_inline"}]},{"text":" added in v4.12.0 for consistent error message generation ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/CHANGELOG.md","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"NEW: ","type":"text"},{"text":"ResetFormOpts","type":"text","marks":[{"type":"code_inline"}]},{"text":" with ","type":"text"},{"text":"force","type":"text","marks":[{"type":"code_inline"}]},{"text":" flag added to ","type":"text"},{"text":"useResetForm","type":"text","marks":[{"type":"code_inline"}]},{"text":" in v4.13.0 to clear values without merging ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/releases/CHANGELOG.md","title":null}}]}]}]}]},{"type":"paragraph","content":[{"text":"Also changed:","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"defineComponentBinds","type":"text","marks":[{"type":"code_inline"}]},{"text":" deprecated · ","type":"text"},{"text":"defineInputBinds","type":"text","marks":[{"type":"code_inline"}]},{"text":" deprecated · ","type":"text"},{"text":"useFieldModel","type":"text","marks":[{"type":"code_inline"}]},{"text":" deprecated · ","type":"text"},{"text":"unsetValueOnUnmount","type":"text","marks":[{"type":"code_inline"}]},{"text":" config added · ","type":"text"},{"text":"keepValuesOnUnmount","type":"text","marks":[{"type":"code_inline"}]},{"text":" reactivity improved · ","type":"text"},{"text":"useForm","type":"text","marks":[{"type":"code_inline"}]},{"text":" validate returns object · ","type":"text"},{"text":"useResetForm","type":"text","marks":[{"type":"code_inline"}]},{"text":" hook added · ","type":"text"},{"text":"nested field meta querying","type":"text","marks":[{"type":"code_inline"}]},{"text":" new v4.12.3","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Best Practices","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Prefer ","type":"text"},{"text":"defineField()","type":"text","marks":[{"type":"code_inline"}]},{"text":" for binding components and inputs — returns a ","type":"text"},{"text":"v-model","type":"text","marks":[{"type":"code_inline"}]},{"text":" ref and a props object for clean, non-deprecated binding ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/docs/src/pages/api/use-form.mdx","title":null}}]}]}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"ts"},"content":[{"text":"const [email, emailProps] = defineField('email', {\n validateOnBlur: true,\n props: state => ({ 'aria-invalid': !!state.errors.length })\n});","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Display errors conditionally using ","type":"text"},{"text":"meta.touched","type":"text","marks":[{"type":"code_inline"}]},{"text":" — prevents \"aggressive\" validation where error messages appear before the user interacts with the field ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/docs/src/pages/guide/best-practices.mdx","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"toTypedSchema()","type":"text","marks":[{"type":"code_inline"}]},{"text":" for comprehensive TypeScript safety — wraps Yup, Zod, or Valibot schemas to differentiate between input (UI) and output (submitted) types ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/docs/src/pages/guide/composition-api/typed-schema.mdx","title":null}}]}]}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"ts"},"content":[{"text":"import { toTypedSchema } from '@vee-validate/zod';\nimport * as z from 'zod';\n\nconst { values } = useForm({\n validationSchema: toTypedSchema(z.object({ email: z.string().email() }))\n});","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Mark validation schemas as non-reactive — wrap schemas in ","type":"text"},{"text":"markRaw","type":"text","marks":[{"type":"code_inline"}]},{"text":" or declare them outside of ","type":"text"},{"text":"ref","type":"text","marks":[{"type":"code_inline"}]},{"text":"/","type":"text"},{"text":"reactive","type":"text","marks":[{"type":"code_inline"}]},{"text":" to avoid unnecessary deep reactivity overhead ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/docs/src/pages/guide/best-practices.mdx","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Tree-shake schema validator imports — only import the specific functions you need (e.g., ","type":"text"},{"text":"import { string } from 'yup'","type":"text","marks":[{"type":"code_inline"}]},{"text":") to keep bundle sizes to a minimum ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/docs/src/pages/guide/best-practices.mdx","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Pass reactive field names as getters in ","type":"text"},{"text":"useField","type":"text","marks":[{"type":"code_inline"}]},{"text":" — use a function (e.g., ","type":"text"},{"text":"() => props.name","type":"text","marks":[{"type":"code_inline"}]},{"text":") to ensure vee-validate tracks name changes in dynamic forms ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/docs/src/pages/guide/composition-api/caveats.mdx","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Enable ","type":"text"},{"text":"keepValuesOnUnmount","type":"text","marks":[{"type":"code_inline"}]},{"text":" for multi-step forms — preserves field state when components are hidden via ","type":"text"},{"text":"v-if","type":"text","marks":[{"type":"code_inline"}]},{"text":" or tab switching ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/docs/src/pages/guide/composition-api/nested-objects-and-arrays.mdx","title":null}}]}]}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"ts"},"content":[{"text":"const { values } = useForm({\n keepValuesOnUnmount: true\n});","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Use ","type":"text"},{"text":"field.key","type":"text","marks":[{"type":"code_inline"}]},{"text":" for stable iteration in ","type":"text"},{"text":"v-for","type":"text","marks":[{"type":"code_inline"}]},{"text":" — ","type":"text"},{"text":"useFieldArray","type":"text","marks":[{"type":"code_inline"}]},{"text":" provides unique identifiers that persist through array operations, unlike indices ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/docs/src/pages/guide/composition-api/nested-objects-and-arrays.mdx","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Escape field names with ","type":"text"},{"text":"[]","type":"text","marks":[{"type":"code_inline"}]},{"text":" to disable automatic nesting — wrap names (e.g., ","type":"text"},{"text":"[user.name]","type":"text","marks":[{"type":"code_inline"}]},{"text":") to treat dots as literal characters rather than object paths ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/docs/src/pages/guide/composition-api/nested-objects-and-arrays.mdx","title":null}}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Filter submission values with ","type":"text"},{"text":"handleSubmit.withControlled()","type":"text","marks":[{"type":"code_inline"}]},{"text":" — ensures only fields explicitly registered via ","type":"text"},{"text":"useField","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"defineField","type":"text","marks":[{"type":"code_inline"}]},{"text":" are included in the payload ","type":"text"},{"text":"source","type":"text","marks":[{"type":"link","attrs":{"href":"./references/docs/src/pages/api/use-form.mdx","title":null}}]}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"vee-validate-skilld","author":"@skillopedia","source":{"stars":165,"repo_name":"vue-ecosystem-skills","origin_url":"https://github.com/harlan-zw/vue-ecosystem-skills/blob/HEAD/skills/vee-validate-skilld/SKILL.md","repo_owner":"harlan-zw","body_sha256":"658bc4fb72bd7790b867e3fd65e93eea391cdfd4a14a849fa05b84ed9718854b","cluster_key":"bd6a78dee9e8a341dde448a1decbbc155304f5ee26a6937a172a9e61f052edc5","clean_bundle":{"format":"clean-skill-bundle-v1","source":"harlan-zw/vue-ecosystem-skills/skills/vee-validate-skilld/SKILL.md","attachments":[{"id":"1df35215-72ea-595b-ab68-240fd2b6df5b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1df35215-72ea-595b-ab68-240fd2b6df5b/attachment.md","path":"references/discussions/_INDEX.md","size":2110,"sha256":"067ac06adef911f6344998ec0558de7929c05b7337f5f665d12b3444ab928060","contentType":"text/markdown; charset=utf-8"},{"id":"81f2f1f4-535a-526a-bd2b-7534d55d5730","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/81f2f1f4-535a-526a-bd2b-7534d55d5730/attachment.md","path":"references/discussions/discussion-4794.md","size":386,"sha256":"317f05363987503ffc7e80c212d7e799fb901aa1b18a8af5f2441314aecef50d","contentType":"text/markdown; charset=utf-8"},{"id":"2d9ba021-57ac-5d8b-8372-ff318b53ec23","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2d9ba021-57ac-5d8b-8372-ff318b53ec23/attachment.md","path":"references/discussions/discussion-4799.md","size":1238,"sha256":"1febbde512e5a765d0239f1ac2de4670fc4995f86db9766f354f1bd3a72fe506","contentType":"text/markdown; charset=utf-8"},{"id":"85bd782f-68f0-5a31-843c-2cc24677b9dd","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/85bd782f-68f0-5a31-843c-2cc24677b9dd/attachment.md","path":"references/discussions/discussion-4818.md","size":505,"sha256":"40b30a3db9a9fae1827cafa5542aad30bef2c71d8cf7c1fb9acec3dd8d40f07f","contentType":"text/markdown; charset=utf-8"},{"id":"3271b8c5-6f38-556b-b3cc-d00e3f5d9121","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3271b8c5-6f38-556b-b3cc-d00e3f5d9121/attachment.md","path":"references/discussions/discussion-4819.md","size":885,"sha256":"9eca6414065487663375e1732f98d95593f5b69b0fcd5d70871c07cf9571743a","contentType":"text/markdown; charset=utf-8"},{"id":"e13b0893-4d23-56ff-b9c0-7b0234399bc2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e13b0893-4d23-56ff-b9c0-7b0234399bc2/attachment.md","path":"references/discussions/discussion-4838.md","size":989,"sha256":"3fd5a5c01533c106937e3fca52db41e3a3171aa86248a22cc3f8bfa8a834d5de","contentType":"text/markdown; charset=utf-8"},{"id":"dc4ff52b-787b-5022-a8a5-fba2f612f43e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/dc4ff52b-787b-5022-a8a5-fba2f612f43e/attachment.md","path":"references/discussions/discussion-4839.md","size":1715,"sha256":"82d3d142619480dfb9ec143f674039fc7ee363d6c417297a97383e2e08c3c433","contentType":"text/markdown; charset=utf-8"},{"id":"7272bb94-c33e-515c-b698-bf3394391cbd","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7272bb94-c33e-515c-b698-bf3394391cbd/attachment.md","path":"references/discussions/discussion-4871.md","size":1009,"sha256":"fdee90ab891319733cc0a1fd02325a85c540cd74403c30669acf7ef6b7092a71","contentType":"text/markdown; charset=utf-8"},{"id":"4e87e1b0-580a-5375-a860-b5442b71b8cf","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4e87e1b0-580a-5375-a860-b5442b71b8cf/attachment.md","path":"references/discussions/discussion-4883.md","size":586,"sha256":"dfe96b3e2a3298b7c3fcaef26e4f456b5dd54901580c951ec019a8b08a21355b","contentType":"text/markdown; charset=utf-8"},{"id":"79d50f72-5c53-5817-abf2-adeb5c22e0c2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/79d50f72-5c53-5817-abf2-adeb5c22e0c2/attachment.md","path":"references/discussions/discussion-4896.md","size":918,"sha256":"2013a9d931794c8bc8037713ac012d3a0e4d575762b9910fb9ba45c7e23e7dff","contentType":"text/markdown; charset=utf-8"},{"id":"7a54ae59-28e5-5dc5-a4ef-651305cc9cf0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7a54ae59-28e5-5dc5-a4ef-651305cc9cf0/attachment.md","path":"references/discussions/discussion-4898.md","size":1519,"sha256":"1cedd287992aec1f20336f1c65288618a008df61d340f53a8c6ccece13e9a904","contentType":"text/markdown; charset=utf-8"},{"id":"ff41bce7-3021-5d97-a24b-44205114c115","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ff41bce7-3021-5d97-a24b-44205114c115/attachment.md","path":"references/discussions/discussion-4903.md","size":580,"sha256":"dbbf9edf9c0ffe5f1e04166be513a5bd1865d11c97acb074924bd0e0ba00fcc8","contentType":"text/markdown; charset=utf-8"},{"id":"9ffad273-c5a9-5297-9b62-e141ca4b5f74","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9ffad273-c5a9-5297-9b62-e141ca4b5f74/attachment.md","path":"references/discussions/discussion-4907.md","size":563,"sha256":"163ef4959732010c8e941298b391e38fb30de7d2dd0b44efc56171bbc73ff85f","contentType":"text/markdown; charset=utf-8"},{"id":"b46d7268-f074-5ede-98de-606cdd473c91","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b46d7268-f074-5ede-98de-606cdd473c91/attachment.md","path":"references/discussions/discussion-4950.md","size":1234,"sha256":"72ed904f20a72aae85e4b423f95025cbb149853ae39c551b9c2a8eed6e5de5a0","contentType":"text/markdown; charset=utf-8"},{"id":"919fa964-1a05-51a2-9058-4d43ded5376f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/919fa964-1a05-51a2-9058-4d43ded5376f/attachment.md","path":"references/discussions/discussion-4955.md","size":942,"sha256":"c33d68d5ba5b81623cdc9484665d1339cc177d1910f10c07fa673e01216c9502","contentType":"text/markdown; charset=utf-8"},{"id":"5e1e5aff-6506-584b-a2ef-e308ce398781","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5e1e5aff-6506-584b-a2ef-e308ce398781/attachment.md","path":"references/discussions/discussion-4980.md","size":553,"sha256":"371dac78ef0e237c51478893a72c386f8d3a7b4f57f9dfc9075766985dc9f29a","contentType":"text/markdown; charset=utf-8"},{"id":"47decc38-c76a-5388-98e6-e8f4b35c4bdb","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/47decc38-c76a-5388-98e6-e8f4b35c4bdb/attachment.md","path":"references/discussions/discussion-5038.md","size":1346,"sha256":"23582e38085a861a8cd7831ec5e473fec4aa3c68efd12760854efaceae85043a","contentType":"text/markdown; charset=utf-8"},{"id":"c7f6c818-4df8-56d2-b8f0-551c037e8ce9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c7f6c818-4df8-56d2-b8f0-551c037e8ce9/attachment.md","path":"references/discussions/discussion-5079.md","size":863,"sha256":"332888c858cfd20222bdaea8b7fad111651fa2efea18eb37e30b8b64ef0c28dc","contentType":"text/markdown; charset=utf-8"},{"id":"ffb9b95f-ea3e-5ec4-8df1-f3f7d26f250c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ffb9b95f-ea3e-5ec4-8df1-f3f7d26f250c/attachment.md","path":"references/discussions/discussion-5086.md","size":1380,"sha256":"8b41d4baa0408b3a255f28c58cdcc3fc834d871bac2349c07dfdaf509f4fd800","contentType":"text/markdown; charset=utf-8"},{"id":"c353e623-bac0-5684-b4e6-abbe966144c7","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c353e623-bac0-5684-b4e6-abbe966144c7/attachment.md","path":"references/discussions/discussion-5095.md","size":1035,"sha256":"4e85efdb8a4e71a15d085953efe45e9d0262b26df4aacae891461b4a5886fd40","contentType":"text/markdown; charset=utf-8"},{"id":"b9e04450-21fd-56ad-bff4-a39a61cdc8a5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b9e04450-21fd-56ad-bff4-a39a61cdc8a5/attachment.md","path":"references/discussions/discussion-5107.md","size":1709,"sha256":"5b93879c7f0afc04e48b625a37e72fa5747d6227eae71daffc23f08198f4d1db","contentType":"text/markdown; charset=utf-8"},{"id":"2a9554db-ab52-5d62-b77a-3600469837e0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2a9554db-ab52-5d62-b77a-3600469837e0/attachment.md","path":"references/docs/CHANGELOG.md","size":2314,"sha256":"192b8f3c546cf850ed0f456b09ac3e198c6a170ed1cd6c21f580521c52daf980","contentType":"text/markdown; charset=utf-8"},{"id":"4a9b4e3a-65ad-5f70-a646-6bd4f14c8d0d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4a9b4e3a-65ad-5f70-a646-6bd4f14c8d0d/attachment.mdx","path":"references/docs/src/pages/api/composition-helpers.mdx","size":9540,"sha256":"04e425c6b13f2012d14f28798c1659e14a558b330098b364b78f86ad09226997","contentType":"text/plain; charset=utf-8"},{"id":"a2e0a740-3dd4-5155-83b4-48c10eafb8dc","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a2e0a740-3dd4-5155-83b4-48c10eafb8dc/attachment.mdx","path":"references/docs/src/pages/api/configuration.mdx","size":4316,"sha256":"5bb0dcbc95f838cc6d777256c4c6c8e50497140d82782cb0bf3340abcb38de52","contentType":"text/plain; charset=utf-8"},{"id":"c536a583-772c-5f02-bff2-a082cf9a3d56","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c536a583-772c-5f02-bff2-a082cf9a3d56/attachment.mdx","path":"references/docs/src/pages/api/error-message.mdx","size":2848,"sha256":"f3644c28909e9cf542b0ba9f96dcc209b6993b19859d593e1eaf98c774a94884","contentType":"text/plain; charset=utf-8"},{"id":"049ed54e-b2a2-5ffa-ba95-4057697f49e0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/049ed54e-b2a2-5ffa-ba95-4057697f49e0/attachment.mdx","path":"references/docs/src/pages/api/field-array.mdx","size":3751,"sha256":"d184008bd1e2f4e30c6f99bcbc2020d1454dc11bbdf11d6f566625e840c97909","contentType":"text/plain; charset=utf-8"},{"id":"dffde139-029d-5305-ab2f-13c8be1d10a0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/dffde139-029d-5305-ab2f-13c8be1d10a0/attachment.mdx","path":"references/docs/src/pages/api/field.mdx","size":15834,"sha256":"a56f199ea1a881a1b58c68787f95ba8ea4dddc6b4b2fc1cd3590aaabfef12643","contentType":"text/plain; charset=utf-8"},{"id":"323b3b5e-d724-57a3-a296-115c04a6c652","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/323b3b5e-d724-57a3-a296-115c04a6c652/attachment.mdx","path":"references/docs/src/pages/api/form.mdx","size":11406,"sha256":"fc5c3626424e825830fea32ac484168d1a8876b9e4da6f494940f525daa01160","contentType":"text/plain; charset=utf-8"},{"id":"b78f1a9c-8749-57d1-9da8-072aa5f57216","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b78f1a9c-8749-57d1-9da8-072aa5f57216/attachment.mdx","path":"references/docs/src/pages/api/use-field-array.mdx","size":6130,"sha256":"5f268eecca1547f13045b9e3883f4e4a9e4e23b50ce77d4f5564e8182d929fb9","contentType":"text/plain; charset=utf-8"},{"id":"31bd87d8-f98b-5c4d-b0b5-afcd5ae7804c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/31bd87d8-f98b-5c4d-b0b5-afcd5ae7804c/attachment.mdx","path":"references/docs/src/pages/api/use-field.mdx","size":10872,"sha256":"6a2955c97922b8791aa2d46949888563035002125d9a049895be748a01888338","contentType":"text/plain; charset=utf-8"},{"id":"d00d8366-eadc-5f4c-a95e-fab2171609b7","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d00d8366-eadc-5f4c-a95e-fab2171609b7/attachment.mdx","path":"references/docs/src/pages/api/use-form.mdx","size":21612,"sha256":"8f0f8f1b815c1faf7ee45d301a803e2971cec3a2c701fcd0a458a0c4af290d79","contentType":"text/plain; charset=utf-8"},{"id":"41fb4e33-c909-58d2-8389-ebabbb0e410e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/41fb4e33-c909-58d2-8389-ebabbb0e410e/attachment.mdx","path":"references/docs/src/pages/examples/array-fields.mdx","size":340,"sha256":"9bd0550e0c8c8171bd30031e913148721747edb23217c8a1a15dd104bad847c2","contentType":"text/plain; charset=utf-8"},{"id":"1feddfac-8ece-583f-9db1-1896fc94f9f8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1feddfac-8ece-583f-9db1-1896fc94f9f8/attachment.mdx","path":"references/docs/src/pages/examples/async-validation.mdx","size":369,"sha256":"b5f200da20c2c2a7460f70f202dd609fab8aed1e5cde399f482f85bfef931814","contentType":"text/plain; charset=utf-8"},{"id":"89f55605-2f49-510f-90ad-d7ad71e356ae","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/89f55605-2f49-510f-90ad-d7ad71e356ae/attachment.mdx","path":"references/docs/src/pages/examples/checkboxes-and-radio.mdx","size":2066,"sha256":"6c3aaa87fb58852202f483bd0c0d2f09f141c8d47347c38181e1ce210e8e8d1b","contentType":"text/plain; charset=utf-8"},{"id":"aed6517a-b402-565c-a9d1-ad9c6f9eac5f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/aed6517a-b402-565c-a9d1-ad9c6f9eac5f/attachment.mdx","path":"references/docs/src/pages/examples/cross-field-validation.mdx","size":426,"sha256":"d566b3b8294161f0d025471a530a54f7a20a42769420403b85cc2bca2d32c0b7","contentType":"text/plain; charset=utf-8"},{"id":"1d744a59-e309-549b-9510-de40a23406f9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1d744a59-e309-549b-9510-de40a23406f9/attachment.mdx","path":"references/docs/src/pages/examples/custom-checkboxes.mdx","size":2997,"sha256":"4776990ba55c9c4d7d150fffb1c214c27993656f67ff56fd24cb427ab828e2d0","contentType":"text/plain; charset=utf-8"},{"id":"8c8844a8-feee-5680-95f8-5b77e5eaf178","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8c8844a8-feee-5680-95f8-5b77e5eaf178/attachment.mdx","path":"references/docs/src/pages/examples/custom-inputs.mdx","size":1149,"sha256":"0fbbb8b9514baa513440b1fb29fc76022add650acadb200f66118d49a2679a38","contentType":"text/plain; charset=utf-8"},{"id":"e2d574fc-7cd1-5643-b0ee-e33fb913f5f4","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e2d574fc-7cd1-5643-b0ee-e33fb913f5f4/attachment.mdx","path":"references/docs/src/pages/examples/dynamic-validation-triggers.mdx","size":690,"sha256":"c0d91280d62b3d3f40728f3f88ade0d598f3020a08151c31a167512d108cad7d","contentType":"text/plain; charset=utf-8"},{"id":"3a4ed10d-16e5-5bbf-8ab8-70154330629d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3a4ed10d-16e5-5bbf-8ab8-70154330629d/attachment.mdx","path":"references/docs/src/pages/examples/multistep-form-wizard.mdx","size":715,"sha256":"4b97a9e11b6d466099c46f1bd47d72c6ad4659700adcd23b59f968f62d57a443","contentType":"text/plain; charset=utf-8"},{"id":"6c3e5293-f0dc-526f-b4f9-89f26c9b1015","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6c3e5293-f0dc-526f-b4f9-89f26c9b1015/attachment.mdx","path":"references/docs/src/pages/examples/ui-libraries.mdx","size":3659,"sha256":"ecb8fa51c201c8acc56efbcb095069e95ffad327cf4c28861914703ef2116abc","contentType":"text/plain; charset=utf-8"},{"id":"1bd0a4c5-342d-5c80-9565-a290a2869e36","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1bd0a4c5-342d-5c80-9565-a290a2869e36/attachment.mdx","path":"references/docs/src/pages/examples/using-stores.mdx","size":978,"sha256":"a3b69a07982529acae924ae7e9eddb1bed47eb4484b43efab7c4168943bb295f","contentType":"text/plain; charset=utf-8"},{"id":"557da95f-84e1-50f4-a297-599f83020944","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/557da95f-84e1-50f4-a297-599f83020944/attachment.mdx","path":"references/docs/src/pages/examples/value-formatting.mdx","size":1405,"sha256":"0ae15f5d9ff4e47d5bf223ee1527170ad6f15f55f131221638f620bbf01dd9e0","contentType":"text/plain; charset=utf-8"},{"id":"24860f06-87dc-5beb-874d-eb57b15fb29d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/24860f06-87dc-5beb-874d-eb57b15fb29d/attachment.mdx","path":"references/docs/src/pages/guide/best-practices.mdx","size":2997,"sha256":"7714f668d89de7d0b76029ca20c579c9a001c0dcacb93fdfe0b5db7b54e79f43","contentType":"text/plain; charset=utf-8"},{"id":"c3bf889b-b437-572c-96e2-b31b1b336fda","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c3bf889b-b437-572c-96e2-b31b1b336fda/attachment.mdx","path":"references/docs/src/pages/guide/components/handling-forms.mdx","size":23098,"sha256":"f81bf587b5d0e45356c59b31761e538b348f39e149c54a2bec81af60be3aec7e","contentType":"text/plain; charset=utf-8"},{"id":"bdbebe9b-2cee-53c4-a38e-68f76a7f6d9f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/bdbebe9b-2cee-53c4-a38e-68f76a7f6d9f/attachment.mdx","path":"references/docs/src/pages/guide/components/nested-objects-and-arrays.mdx","size":10559,"sha256":"43add906bbeefbdeffd1d67a3ec20f1e55bc823ba42f681a1b263d9f27f51e28","contentType":"text/plain; charset=utf-8"},{"id":"790fd01e-6ed6-5d02-8d2b-8ae197a4338d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/790fd01e-6ed6-5d02-8d2b-8ae197a4338d/attachment.mdx","path":"references/docs/src/pages/guide/components/validation.mdx","size":19598,"sha256":"63d49c976f3902d80e1e5420694a35e3a1819076336959d39b7d62ecd66eebb2","contentType":"text/plain; charset=utf-8"},{"id":"a996e68e-d35d-5ad8-82ae-d569261a9dd8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a996e68e-d35d-5ad8-82ae-d569261a9dd8/attachment.mdx","path":"references/docs/src/pages/guide/composition-api/caveats.mdx","size":4508,"sha256":"21d15992e13485e4700436f67bfd7e16f0151416e5e2fd3afb81d223558e0bfa","contentType":"text/plain; charset=utf-8"},{"id":"f050d551-8c9c-5a0c-9698-7420eb9e1840","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f050d551-8c9c-5a0c-9698-7420eb9e1840/attachment.mdx","path":"references/docs/src/pages/guide/composition-api/custom-inputs.mdx","size":17068,"sha256":"89bdbc9f10eeb90613dd69b0a5db60e030e25f2565d69dfda4ca749d58bf3689","contentType":"text/plain; charset=utf-8"},{"id":"3dbd7b68-054b-5c9c-a091-67c59b078b57","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3dbd7b68-054b-5c9c-a091-67c59b078b57/attachment.mdx","path":"references/docs/src/pages/guide/composition-api/getting-started.mdx","size":14745,"sha256":"9024a925451ea4b7d1e2727d1c8a6adb365fc8f70111f0fcbba2d4d401a65cbf","contentType":"text/plain; charset=utf-8"},{"id":"cee3bc49-168d-515d-bbc2-70cb89453e5c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/cee3bc49-168d-515d-bbc2-70cb89453e5c/attachment.mdx","path":"references/docs/src/pages/guide/composition-api/handling-forms.mdx","size":17521,"sha256":"7ce6cabbbc8e8686ba1e0be57f5fea5d2c6889c6b188bc5ae31384602ba08c8f","contentType":"text/plain; charset=utf-8"},{"id":"0e0bafbb-3b94-568c-a710-8b334f8e8c20","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0e0bafbb-3b94-568c-a710-8b334f8e8c20/attachment.mdx","path":"references/docs/src/pages/guide/composition-api/helpers.mdx","size":2384,"sha256":"86723f468c1b674401d51584a602ef0b412864a57b332ac22bf8c6d35cae0080","contentType":"text/plain; charset=utf-8"},{"id":"7641c603-3f24-5e57-80f2-1acaa80bb68c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7641c603-3f24-5e57-80f2-1acaa80bb68c/attachment.mdx","path":"references/docs/src/pages/guide/composition-api/nested-objects-and-arrays.mdx","size":8736,"sha256":"5026f15301a0e79dc59e828860f84ccdc90ff0a178f8b6d66170c001f5f11f8e","contentType":"text/plain; charset=utf-8"},{"id":"8e781211-9f46-5a71-b6fe-5b7512b13802","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8e781211-9f46-5a71-b6fe-5b7512b13802/attachment.mdx","path":"references/docs/src/pages/guide/composition-api/typed-schema.mdx","size":10749,"sha256":"71e83cf909d28c22f6d5bb293668c53cdeafaed1c9910744658ffb26e7017b6b","contentType":"text/plain; charset=utf-8"},{"id":"22a0ff4c-52db-52d3-bdc0-fa24eb947990","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/22a0ff4c-52db-52d3-bdc0-fa24eb947990/attachment.mdx","path":"references/docs/src/pages/guide/devtools.mdx","size":2307,"sha256":"e54c784380023b902d660ddbab88d857bc1d420a5e1110a89a6aead5effeea6a","contentType":"text/plain; charset=utf-8"},{"id":"8cf6ecd8-b0bf-5b43-b83d-a1ff8a663c33","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8cf6ecd8-b0bf-5b43-b83d-a1ff8a663c33/attachment.mdx","path":"references/docs/src/pages/guide/global-validators.mdx","size":24039,"sha256":"f81eaba7bdbd89ff4b924c6763f7a98f3c58656b6bf01205afa62a30fea37d66","contentType":"text/plain; charset=utf-8"},{"id":"c56c21ad-3304-50f1-a20e-a724757575d7","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c56c21ad-3304-50f1-a20e-a724757575d7/attachment.mdx","path":"references/docs/src/pages/guide/i18n.mdx","size":9548,"sha256":"955f4c47126fcb88408faecd1a90ed7b33cd272b553f4fc5981ed34536888be1","contentType":"text/plain; charset=utf-8"},{"id":"09556803-40eb-5d35-9193-c9397214e96f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/09556803-40eb-5d35-9193-c9397214e96f/attachment.mdx","path":"references/docs/src/pages/guide/overview.mdx","size":3090,"sha256":"17b4cc5ce98f1083ad29713129ffe9b07f7775f9a05efc7dbe3a0170d6f55f77","contentType":"text/plain; charset=utf-8"},{"id":"d563f41d-380a-5acb-ba79-4e6be486265b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d563f41d-380a-5acb-ba79-4e6be486265b/attachment.mdx","path":"references/docs/src/pages/guide/testing.mdx","size":5045,"sha256":"0f0c42c6434e9be468d73716962bb348712e2c11d5c9095a32730f24d42e1690","contentType":"text/plain; charset=utf-8"},{"id":"05a61226-a5a4-553e-8ecb-c33fb82dd758","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/05a61226-a5a4-553e-8ecb-c33fb82dd758/attachment.mdx","path":"references/docs/src/pages/integrations/formvuelate.mdx","size":493,"sha256":"60512acb25b84195370be360942cb03a6983bf2c258f194570970506a2968c2b","contentType":"text/plain; charset=utf-8"},{"id":"45684f33-834a-5f78-ba8c-e22aad0ae93c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/45684f33-834a-5f78-ba8c-e22aad0ae93c/attachment.mdx","path":"references/docs/src/pages/integrations/nuxt.mdx","size":2491,"sha256":"9e922d19051ab576d157b5b47020ffad05188ee81f26b98ce639d317203de8b0","contentType":"text/plain; charset=utf-8"},{"id":"9ee878d4-f4a4-57ac-8391-a370a0cb7632","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9ee878d4-f4a4-57ac-8391-a370a0cb7632/attachment.mdx","path":"references/docs/src/pages/integrations/zod-schema-validation.mdx","size":5586,"sha256":"b5061734dde3b1c688a21fea1e8e2a99071ae191d5e59b7d23c86b7f547c3284","contentType":"text/plain; charset=utf-8"},{"id":"2dcbe642-d0c1-57f2-bb42-283327de8337","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2dcbe642-d0c1-57f2-bb42-283327de8337/attachment.mdx","path":"references/docs/src/pages/resources.mdx","size":3195,"sha256":"5c1efd3b7359fc0c4329defd09dc10164f0d7a65d53b82b8d48799567dce070e","contentType":"text/plain; charset=utf-8"},{"id":"c254dc80-5c29-5bdf-999a-1e4a22c43773","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c254dc80-5c29-5bdf-999a-1e4a22c43773/attachment.mdx","path":"references/docs/src/pages/tutorials/basics.mdx","size":10242,"sha256":"8f4a790065a6762d79e3622c728b38e2acdc3ebe382705e8aa9ea51666beceaa","contentType":"text/plain; charset=utf-8"},{"id":"55792bb3-0fa6-5288-87a7-f2963b9967e8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/55792bb3-0fa6-5288-87a7-f2963b9967e8/attachment.mdx","path":"references/docs/src/pages/tutorials/dynamic-form-generator.mdx","size":11798,"sha256":"6a045f7f0bee5a91fc9544222740aaa06897dc20da09769a572bcd53bdb2e23c","contentType":"text/plain; charset=utf-8"},{"id":"f8b8de97-680e-55de-ad55-f7b8b7a8d515","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f8b8de97-680e-55de-ad55-f7b8b7a8d515/attachment.md","path":"references/docs/v4.md","size":1767,"sha256":"7094a13b495e7e4cfee13205b91c3a36a6cd58ccb791faf9cdff943cfc3618e3","contentType":"text/markdown; charset=utf-8"},{"id":"6b6414e8-d37d-5e2b-b8e8-cf2e2b34d1be","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6b6414e8-d37d-5e2b-b8e8-cf2e2b34d1be/attachment.md","path":"references/issues/_INDEX.md","size":3378,"sha256":"1220b049d5eb8386b27069b9524c39ce142173fbce70d70af39036a14b636f11","contentType":"text/markdown; charset=utf-8"},{"id":"87bea98d-1584-5cc4-b15b-ee97954f6914","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/87bea98d-1584-5cc4-b15b-ee97954f6914/attachment.md","path":"references/issues/issue-2191.md","size":2929,"sha256":"b0ac45a8ec39046dae613d398d6ce9a3d1fe311892837a85d83d442b8742ce4c","contentType":"text/markdown; charset=utf-8"},{"id":"29924fe2-8f8b-5edf-a098-ef5b57aff94d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/29924fe2-8f8b-5edf-a098-ef5b57aff94d/attachment.md","path":"references/issues/issue-2248.md","size":1826,"sha256":"d2628b94ebf644338b602114039538a906cfae146cb1057cf16cd8d226146ffb","contentType":"text/markdown; charset=utf-8"},{"id":"82c4585c-50f8-545d-904b-adb3b92665ef","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/82c4585c-50f8-545d-904b-adb3b92665ef/attachment.md","path":"references/issues/issue-2486.md","size":789,"sha256":"0eebbdbc32780b5a339f5ae01807ee32ee19ff033af260f0614a929ba53a33f3","contentType":"text/markdown; charset=utf-8"},{"id":"df32d73c-7474-51ee-9c72-50e3700d71fa","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/df32d73c-7474-51ee-9c72-50e3700d71fa/attachment.md","path":"references/issues/issue-2638.md","size":992,"sha256":"a6d0eb202997d5a6dc9c82034aaaa9d10d922b390b4c21321700530ce47de92d","contentType":"text/markdown; charset=utf-8"},{"id":"e4928f1c-338b-59d4-a169-1998a92124c0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e4928f1c-338b-59d4-a169-1998a92124c0/attachment.md","path":"references/issues/issue-2783.md","size":535,"sha256":"07ec087e974ef2919c770bcffc1b7a910f613f19988842e285b465dd19706d2f","contentType":"text/markdown; charset=utf-8"},{"id":"52605d30-6fbd-5e17-a065-97e65fb3ab08","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/52605d30-6fbd-5e17-a065-97e65fb3ab08/attachment.md","path":"references/issues/issue-2849.md","size":1528,"sha256":"70b6a9def64399354e1ecd095cd23d2321a11118850c31babe5c386dbb651538","contentType":"text/markdown; charset=utf-8"},{"id":"a1078484-19ee-58ae-87f1-9077365683b2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a1078484-19ee-58ae-87f1-9077365683b2/attachment.md","path":"references/issues/issue-4424.md","size":2404,"sha256":"8cad39024c05d1687ae8b088ce195f57efb8a8c42a3a34bf2fae7bfe7617f104","contentType":"text/markdown; charset=utf-8"},{"id":"ca60dacc-e8f3-57f3-94d6-65edcb27a249","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ca60dacc-e8f3-57f3-94d6-65edcb27a249/attachment.md","path":"references/issues/issue-4490.md","size":1731,"sha256":"c89f752171885819ed1809d2445e5a38e3cc7452fe968e4d38fb0388e954df2c","contentType":"text/markdown; charset=utf-8"},{"id":"6448011a-404f-597b-9b6a-69ae875fafcb","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6448011a-404f-597b-9b6a-69ae875fafcb/attachment.md","path":"references/issues/issue-4624.md","size":1786,"sha256":"8abce8e2cc76968aa3b30781ecb7fa95516ba7e1deac9d72219fe11078b081c3","contentType":"text/markdown; charset=utf-8"},{"id":"03338902-4983-5b45-9ef0-ce11f14fb413","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/03338902-4983-5b45-9ef0-ce11f14fb413/attachment.md","path":"references/issues/issue-4630.md","size":1381,"sha256":"b52097592f5303f642c16387f4be0e73755626f8dc0f70fb4ee42071b24717ff","contentType":"text/markdown; charset=utf-8"},{"id":"2155b64a-0d7d-5810-adc8-1f5c2b6c2e42","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2155b64a-0d7d-5810-adc8-1f5c2b6c2e42/attachment.md","path":"references/issues/issue-4672.md","size":2144,"sha256":"57ad2640cdc776cbd74eb0d0308a75510a3ba405732f8b22334f923d445e2900","contentType":"text/markdown; charset=utf-8"},{"id":"8432b7b3-2546-50d9-8f8b-39552775a615","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8432b7b3-2546-50d9-8f8b-39552775a615/attachment.md","path":"references/issues/issue-4684.md","size":1142,"sha256":"fc25f1b869379241ec19195c2d98005c120c8da611ace1ec7d966099680c6ecc","contentType":"text/markdown; charset=utf-8"},{"id":"f624689d-0928-57fd-b84c-bde1ee0ca8f1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f624689d-0928-57fd-b84c-bde1ee0ca8f1/attachment.md","path":"references/issues/issue-4697.md","size":1622,"sha256":"611f476c6b026c94581fee5282cd11aa2e0b933a441b156120304290f02fd5a0","contentType":"text/markdown; charset=utf-8"},{"id":"315a8e15-9aef-50eb-9483-fa503fa492be","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/315a8e15-9aef-50eb-9483-fa503fa492be/attachment.md","path":"references/issues/issue-4721.md","size":2394,"sha256":"9861fd94b88aa97296e45e53ffe48055b7d63e0ef18b517d87f45c1e3cba02d6","contentType":"text/markdown; charset=utf-8"},{"id":"611c9bb6-906d-55d1-9df8-961962db7aab","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/611c9bb6-906d-55d1-9df8-961962db7aab/attachment.md","path":"references/issues/issue-4835.md","size":1540,"sha256":"3c7e16ea36ff993b778918e765b63d064e03c9485bbcab6efcca0fc23b6e69ef","contentType":"text/markdown; charset=utf-8"},{"id":"6167ec68-862a-5bd2-b662-acda4460a97a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6167ec68-862a-5bd2-b662-acda4460a97a/attachment.md","path":"references/issues/issue-4862.md","size":1794,"sha256":"3e3323670f4a57a19446517b66808cbb4ad20cd5da7d6e1b0bf8d24c8f394c40","contentType":"text/markdown; charset=utf-8"},{"id":"72c8ae71-035f-5a96-8305-e29cd4f90d14","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/72c8ae71-035f-5a96-8305-e29cd4f90d14/attachment.md","path":"references/issues/issue-4863.md","size":1655,"sha256":"6cb3bf94d1a6683e38a607e2a0788416524f1eb0b48e8813f49066609d4fd9d3","contentType":"text/markdown; charset=utf-8"},{"id":"545f302a-557b-5764-8d13-9051a1b11aa5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/545f302a-557b-5764-8d13-9051a1b11aa5/attachment.md","path":"references/issues/issue-4866.md","size":1765,"sha256":"b8ea226baad16473ea1730030c25c28dc8e716d7610dcb82e9e23eac3478f963","contentType":"text/markdown; charset=utf-8"},{"id":"1d763575-280f-51fb-b952-e1dcd8804c19","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1d763575-280f-51fb-b952-e1dcd8804c19/attachment.md","path":"references/issues/issue-4895.md","size":491,"sha256":"6ccc5f1fdb920160a37f402b51bdf3becb1ba68454191a3134e5f5b2da0ed850","contentType":"text/markdown; charset=utf-8"},{"id":"45d5ce7c-e03d-506f-9596-906fb96079a7","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/45d5ce7c-e03d-506f-9596-906fb96079a7/attachment.md","path":"references/issues/issue-4960.md","size":1077,"sha256":"b75d0dfd17520547062c3026da05d52e63c4d32102c6509071ef5ed800d3f9e1","contentType":"text/markdown; charset=utf-8"},{"id":"066d7947-a48f-5b7d-bfc0-6c0536d68cca","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/066d7947-a48f-5b7d-bfc0-6c0536d68cca/attachment.md","path":"references/issues/issue-4966.md","size":3255,"sha256":"3cf628cd4c818eca98b91a14c5a91b46f2c55cad5236a5576ed0c52647edb4aa","contentType":"text/markdown; charset=utf-8"},{"id":"b8fd8459-c226-5c28-8b26-7656cea7ccf1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b8fd8459-c226-5c28-8b26-7656cea7ccf1/attachment.md","path":"references/issues/issue-4978.md","size":2681,"sha256":"c847adc151d256310eb483893ff6c8bc5f0ac87fda6d37b0da5f8906b7b370b8","contentType":"text/markdown; charset=utf-8"},{"id":"560ad85b-42d6-5a14-9b4e-471126e5b44c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/560ad85b-42d6-5a14-9b4e-471126e5b44c/attachment.md","path":"references/issues/issue-4995.md","size":2007,"sha256":"7e9923bf5a381b73f6d703b12a21729a929efdabfce75dc2fea56b04c0c806f5","contentType":"text/markdown; charset=utf-8"},{"id":"954cec4d-896e-5131-a3a0-40f506ef8aea","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/954cec4d-896e-5131-a3a0-40f506ef8aea/attachment.md","path":"references/issues/issue-4997.md","size":1041,"sha256":"61cbe75f8e6b6d728410dc79f20ef68d0a70b0cb36246cbb9fd342afb7312b10","contentType":"text/markdown; charset=utf-8"},{"id":"cb7e62aa-ca86-5a8f-81a4-7068523cfcd2","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/cb7e62aa-ca86-5a8f-81a4-7068523cfcd2/attachment.md","path":"references/issues/issue-5013.md","size":1302,"sha256":"473f90ffbe2c69f41162a0359cf4f730ecc1881876705c9f77898117a261ac4c","contentType":"text/markdown; charset=utf-8"},{"id":"52412698-c118-5471-a261-26a074529d71","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/52412698-c118-5471-a261-26a074529d71/attachment.md","path":"references/issues/issue-5021.md","size":1111,"sha256":"e53cf382f936eb0083dbc89aadf1e0b8a7c2594f210bae99eda0ce60ba2b3057","contentType":"text/markdown; charset=utf-8"},{"id":"c528e707-739d-5962-a8be-e4f62e1b0467","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c528e707-739d-5962-a8be-e4f62e1b0467/attachment.md","path":"references/issues/issue-5027.md","size":3027,"sha256":"2220e0db82c3ce8371d49e8573c8f023a7eca8d356f310a9cf0b086b33e35b5a","contentType":"text/markdown; charset=utf-8"},{"id":"b39f263d-d76a-575b-982f-6964feb595a8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b39f263d-d76a-575b-982f-6964feb595a8/attachment.md","path":"references/issues/issue-5043.md","size":1302,"sha256":"5c462b363983be820f9fe9634fae64caa5632d931aed99e480ab8d553abd7a7b","contentType":"text/markdown; charset=utf-8"},{"id":"797bfc48-e06a-54e9-a05f-6de96c6adb39","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/797bfc48-e06a-54e9-a05f-6de96c6adb39/attachment.md","path":"references/issues/issue-5047.md","size":1244,"sha256":"1b61195c5adc9b64f62222f773e6bec18f02fad52784f04ceaa1286311ce4a80","contentType":"text/markdown; charset=utf-8"},{"id":"564e7e5e-d6fa-58e4-9356-2f8a4f86c22b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/564e7e5e-d6fa-58e4-9356-2f8a4f86c22b/attachment.md","path":"references/issues/issue-5074.md","size":1815,"sha256":"431ebfd26d8927a101b536585c867190a092f1360d59a372a46e2c0472e6a9b3","contentType":"text/markdown; charset=utf-8"},{"id":"d1008345-cb1c-5d36-9334-60b76f869542","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d1008345-cb1c-5d36-9334-60b76f869542/attachment.md","path":"references/releases/CHANGELOG.md","size":34960,"sha256":"eed2a42b87284ac7b8f8cd8978a3e21b266eb96c963bb5e887a4674b08f8825a","contentType":"text/markdown; charset=utf-8"},{"id":"19b1998a-e9ec-51fc-bf66-ddcde980bd2d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/19b1998a-e9ec-51fc-bf66-ddcde980bd2d/attachment.md","path":"references/releases/_INDEX.md","size":1766,"sha256":"7b500513901a3b404f2b998a0b8a13de3526ebff0563a8b788ac742d4a8a1317","contentType":"text/markdown; charset=utf-8"},{"id":"e982b788-dd64-5f8b-9eed-48231bdf6792","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e982b788-dd64-5f8b-9eed-48231bdf6792/attachment.md","path":"references/releases/[email protected]","size":332,"sha256":"3693611a13203d6dcad01138bcf06d3f6002b97238a44f8b558292ee9620b771","contentType":"text/markdown; charset=utf-8"},{"id":"2f20084d-5d39-577f-a2bb-7c3f978c220a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2f20084d-5d39-577f-a2bb-7c3f978c220a/attachment.md","path":"references/releases/[email protected]","size":724,"sha256":"c68695b894911772463c6935d32e9012e5be53a2c8d78862693b9935fde6b405","contentType":"text/markdown; charset=utf-8"},{"id":"46866e83-1956-50df-bcba-99ac9ee519bd","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/46866e83-1956-50df-bcba-99ac9ee519bd/attachment.md","path":"references/releases/[email protected]","size":178,"sha256":"003e4d82210f3621498140d1e15f11382eb2605cf559c3ac15413ba7f239054b","contentType":"text/markdown; charset=utf-8"},{"id":"2e00b025-53ec-5b78-8a1b-0d1210959361","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2e00b025-53ec-5b78-8a1b-0d1210959361/attachment.md","path":"references/releases/[email protected]","size":1775,"sha256":"10c32fd8154d2e9894f59aa4d24064652c8758e4d86e59ea8ad1821b3b038c89","contentType":"text/markdown; charset=utf-8"},{"id":"4ade58ae-39e6-5b32-999e-5ee91d9ae328","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4ade58ae-39e6-5b32-999e-5ee91d9ae328/attachment.md","path":"references/releases/[email protected]","size":155,"sha256":"fef6b0310c02449ec1cf3a3714ac7581fc2f769e95f112f8b4bfd283cd4b2b92","contentType":"text/markdown; charset=utf-8"},{"id":"2037f58f-96b2-511a-ab81-f6c04c6c2377","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2037f58f-96b2-511a-ab81-f6c04c6c2377/attachment.md","path":"references/releases/[email protected]","size":285,"sha256":"565822607eb3c051ee2c9acef3ba89e3867a31633035fff160bc214c7645de1d","contentType":"text/markdown; charset=utf-8"},{"id":"d4f889ee-4f98-5107-8fe4-c811eed291d3","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d4f889ee-4f98-5107-8fe4-c811eed291d3/attachment.md","path":"references/releases/[email protected]","size":274,"sha256":"d61844d8e1ba23df4f11631bb1ad2bb99eb30f4c12e57cb2747f08dffd1c5c12","contentType":"text/markdown; charset=utf-8"},{"id":"18f9af2d-8231-5b0c-8ca1-5b85c65b9cda","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/18f9af2d-8231-5b0c-8ca1-5b85c65b9cda/attachment.md","path":"references/releases/[email protected]","size":279,"sha256":"3a01b29798f2d3c89fcddb00c672675c9d9376e425d184a806e5055c0d5ec98b","contentType":"text/markdown; charset=utf-8"},{"id":"c03ca3d9-f5e2-5782-9834-ca5a4567c74b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c03ca3d9-f5e2-5782-9834-ca5a4567c74b/attachment.md","path":"references/releases/[email protected]","size":186,"sha256":"7247789dc77720f14696cd389951528729aac7d5eb388b5c7a18467e2a647c4d","contentType":"text/markdown; charset=utf-8"},{"id":"afd04af8-4ba9-5084-baa9-d527aefed0d3","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/afd04af8-4ba9-5084-baa9-d527aefed0d3/attachment.md","path":"references/releases/[email protected]","size":282,"sha256":"a15d7e3583f54cd5729c245e8e772f8b6e0d368e9fef4d24f67da7ed81626691","contentType":"text/markdown; charset=utf-8"},{"id":"42e12584-12a7-57cb-aea9-8bfe30397094","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/42e12584-12a7-57cb-aea9-8bfe30397094/attachment.md","path":"references/releases/[email protected]","size":247,"sha256":"8a5e31513183488c12ac87b74b7fe4af4cc77faa2276bb2145929f0c72b3917d","contentType":"text/markdown; charset=utf-8"},{"id":"dd9d5997-382c-5a86-aeac-47b6452ad1fb","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/dd9d5997-382c-5a86-aeac-47b6452ad1fb/attachment.md","path":"references/releases/[email protected]","size":173,"sha256":"1ee22bd6f8b4440b196dbd594d97fd3a523cc732d1ba4c2afb97c83647046cc2","contentType":"text/markdown; charset=utf-8"},{"id":"eae1e0e2-6f1d-52d2-8230-48058bdbf5d9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/eae1e0e2-6f1d-52d2-8230-48058bdbf5d9/attachment.md","path":"references/releases/[email protected]","size":890,"sha256":"2c2fbd15dab1ea455b3e86a22c2134b17bba4163b2c1d154047479c0dbbe1304","contentType":"text/markdown; charset=utf-8"},{"id":"5ab3dcb6-f282-5fdd-b2bc-66965b1f1323","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5ab3dcb6-f282-5fdd-b2bc-66965b1f1323/attachment.md","path":"references/releases/[email protected]","size":547,"sha256":"72cca830eef76d14219f86147bc8c1f6f5bd3f7d44accae3cc60b027dca50a96","contentType":"text/markdown; charset=utf-8"},{"id":"684fdba6-4eba-509b-b9e3-3687a1021c2d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/684fdba6-4eba-509b-b9e3-3687a1021c2d/attachment.md","path":"references/releases/[email protected]","size":515,"sha256":"ec591ebfcef6fe29cfb113c2d12929a39e11237afb202c78695deff3b4042e0d","contentType":"text/markdown; charset=utf-8"},{"id":"4c2d3e5e-2304-5ca4-9f13-84ac0e28034f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4c2d3e5e-2304-5ca4-9f13-84ac0e28034f/attachment.md","path":"references/releases/[email protected]","size":210,"sha256":"ad703afdb7db4c6e1b888e375a981ca3437672e5b2c6a8734930c6f7cca1ee62","contentType":"text/markdown; charset=utf-8"},{"id":"5607d27c-123e-5bf6-927d-135524fc3cfa","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5607d27c-123e-5bf6-927d-135524fc3cfa/attachment.md","path":"references/releases/[email protected]","size":241,"sha256":"ee9cadf8a63e577179b084bb53d29f0f69b6207b79effcea09ae77c31a2cd53a","contentType":"text/markdown; charset=utf-8"},{"id":"6b963449-f43c-5ec7-b173-0e4e0726f0c4","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6b963449-f43c-5ec7-b173-0e4e0726f0c4/attachment.md","path":"references/releases/[email protected]","size":193,"sha256":"b998549cc99efe767951ea22cd1dbdd78ffb79e286e75f80720b4a5f0ce8358f","contentType":"text/markdown; charset=utf-8"},{"id":"2f2c7475-26b8-597d-95ea-ea158bbc04bc","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2f2c7475-26b8-597d-95ea-ea158bbc04bc/attachment.md","path":"references/releases/[email protected]","size":231,"sha256":"a490f667a175a13eaabf35135f8cd2b9ce59d50c47b8db213510fd8bb113075a","contentType":"text/markdown; charset=utf-8"},{"id":"807dfebd-fad1-5da2-940c-9ef3fae6147c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/807dfebd-fad1-5da2-940c-9ef3fae6147c/attachment.md","path":"references/releases/[email protected]","size":240,"sha256":"be70c58d8c58c7dcf70e297aa585635c122a07c5f3f216c2ba683c4d43968159","contentType":"text/markdown; charset=utf-8"}],"bundle_sha256":"c4bbd1f24a6dc2a28178198f6bfa7417361a9d13df68159d0cb6b430f4a1fd86","attachment_count":118,"text_attachments":76,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":42,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"skills/vee-validate-skilld/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"software-engineering","category_label":"Engineering"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"software-engineering","metadata":{"version":"4.15.1","generated_at":"2026-04-20T00:00:00.000Z","references_synced_at":"2026-04-20T00:00:00.000Z"},"import_tag":"clean-skills-v1","description":"Painless forms for Vue.js. ALWAYS use when writing code importing \"vee-validate\". Consult for debugging, best practices, or modifying vee-validate, vee validate."}},"renderedAt":1782987271951}

logaretm/vee-validate Tags: prev: 1.0.0-beta.10, next-edge: 4.5.0-alpha.2, edge: 4.5.0-alpha.6 References: Docs API Changes This section documents version-specific API changes for vee-validate v4.x — prioritize these over legacy patterns. - BREAKING: support disabled by default in v4.10.0 for performance; enable via or per-field source - NEW: introduced in v4.9.0 — replaces and for cleaner Composition API integration source - DEPRECATED: Reactive initial values deprecated in v4.12.0; use non-reactive objects or getters to prevent unintended sync source - NEW: exposed in v4.14.0 for accessing…