Showing preview only (1,460K chars total). Download the full file or copy to clipboard to get everything.
Repository: logaretm/vee-validate
Branch: main
Commit: 7d8cc524f920
Files: 420
Total size: 1.3 MB
Directory structure:
gitextract_83vgg6c_/
├── .changeset/
│ ├── README.md
│ ├── config.json
│ ├── evil-loops-shine.md
│ ├── gentle-geckos-share.md
│ ├── happy-wasps-rush.md
│ ├── pre.json
│ ├── pretty-onions-add.md
│ ├── revert-number-to-string.md
│ ├── six-parrots-flash.md
│ ├── smart-needles-own.md
│ └── stupid-friends-relate.md
├── .circleci/
│ └── config.yml
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── Feature_request.md
│ │ └── bug_report.yaml
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/
│ ├── ci.yml
│ └── release.yml
├── .gitignore
├── .husky/
│ ├── .gitignore
│ ├── commit-msg
│ └── pre-commit
├── .prettierrc
├── CHANGELOG.md
├── CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── commitlint.config.mjs
├── docs/
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── _redirects
│ ├── astro.config.ts
│ ├── baseLink.ts
│ ├── highlight.ts
│ ├── package.json
│ ├── postcss.config.js
│ ├── public/
│ │ ├── img/
│ │ │ ├── browserconfig.xml
│ │ │ └── manifest.json
│ │ └── loadTheme.js
│ ├── scripts/
│ │ └── afterBuild.js
│ ├── src/
│ │ ├── components/
│ │ │ ├── Ad.vue
│ │ │ ├── CodeTitle.vue
│ │ │ ├── ContentWrapper.vue
│ │ │ ├── DocBadge.vue
│ │ │ ├── DocFlavor.vue
│ │ │ ├── DocMenu.vue
│ │ │ ├── DocNextStep.vue
│ │ │ ├── DocSearch.vue
│ │ │ ├── DocTip.vue
│ │ │ ├── DocToc.vue
│ │ │ ├── EditPage.vue
│ │ │ ├── ExpandTransition.vue
│ │ │ ├── FeatureCard.vue
│ │ │ ├── FloatingMenu.vue
│ │ │ ├── Icon.vue
│ │ │ ├── LiveExample.vue
│ │ │ ├── LogQueryStr.vue
│ │ │ ├── MainPageExample.vue
│ │ │ ├── MdxRepl.vue
│ │ │ ├── Repl.vue
│ │ │ ├── SideMenu.vue
│ │ │ ├── SideMenuButton.vue
│ │ │ ├── SiteHead.astro
│ │ │ ├── SponsorButton.vue
│ │ │ ├── SpriteSheet.astro
│ │ │ ├── StarCount.vue
│ │ │ ├── TheHeader.vue
│ │ │ ├── ThemeSwitcher.vue
│ │ │ ├── UiLibraries.vue
│ │ │ ├── VersionSwitcher.vue
│ │ │ └── examples/
│ │ │ ├── ComponentsBasic.vue
│ │ │ ├── CompositionBasic.vue
│ │ │ ├── CompositionComponentBindsBasic01.vue
│ │ │ ├── CompositionComponentBindsBasic02.vue
│ │ │ ├── CompositionComponentBindsBasic03.vue
│ │ │ ├── CompositionComponentBindsBasic04.vue
│ │ │ ├── CompositionComponentBindsBasic05.vue
│ │ │ ├── CompositionCustomField01.vue
│ │ │ ├── CompositionCustomField02.vue
│ │ │ ├── CompositionCustomField03.vue
│ │ │ ├── CompositionCustomField04.vue
│ │ │ ├── CompositionCustomField05.vue
│ │ │ ├── CompositionCustomFieldCheckbox.vue
│ │ │ ├── CompositionDynamicSchemaComputed.vue
│ │ │ ├── CompositionDynamicSchemaYupLazy.vue
│ │ │ ├── CompositionHandlingForms01.vue
│ │ │ ├── CompositionHandlingForms02.vue
│ │ │ ├── CompositionHandlingForms03.vue
│ │ │ ├── CompositionHandlingForms04.vue
│ │ │ ├── CompositionHandlingForms05.vue
│ │ │ ├── CompositionHandlingForms06.vue
│ │ │ ├── CompositionHandlingForms07.vue
│ │ │ ├── CompositionHandlingForms08.vue
│ │ │ ├── CompositionHandlingForms09.vue
│ │ │ ├── CompositionHandlingForms10.vue
│ │ │ ├── CompositionHandlingForms11.vue
│ │ │ ├── CompositionHandlingForms12.vue
│ │ │ ├── CompositionHandlingForms13.vue
│ │ │ ├── CompositionHandlingForms14.vue
│ │ │ ├── CompositionInputBindsBasic01.vue
│ │ │ ├── CompositionInputBindsBasic02.vue
│ │ │ ├── CompositionInputBindsBasic03.vue
│ │ │ ├── CompositionInputFieldFn.vue
│ │ │ ├── CompositionInputFieldValibot.vue
│ │ │ ├── CompositionInputFieldYup.vue
│ │ │ ├── CompositionInputFieldZod.vue
│ │ │ ├── CompositionNested01.vue
│ │ │ ├── CompositionNested02.vue
│ │ │ ├── CompositionNested03.vue
│ │ │ ├── CompositionNested04.vue
│ │ │ ├── CompositionNested05.vue
│ │ │ ├── CompositionValibotBasic.vue
│ │ │ ├── CompositionValidateFnBasic.vue
│ │ │ ├── CompositionYupBasic.vue
│ │ │ ├── CompositionZodBasic.vue
│ │ │ ├── CustomCheckboxInputBasic.vue
│ │ │ ├── CustomInputBasic.vue
│ │ │ ├── CustomInputBasicError.vue
│ │ │ ├── CustomInputBasicValueEvent.vue
│ │ │ ├── CustomInputFieldAggressive.vue
│ │ │ ├── CustomInputFieldBasic.vue
│ │ │ ├── CustomInputFieldEager.vue
│ │ │ ├── CustomInputFieldMeta.vue
│ │ │ ├── CustomInputFieldMultiErrors.vue
│ │ │ └── CustomInputFieldVModel.vue
│ │ ├── config.ts
│ │ ├── constants.ts
│ │ ├── env.d.ts
│ │ ├── integrations/
│ │ │ └── svgSprite.ts
│ │ ├── layouts/
│ │ │ ├── HomeLayout.astro
│ │ │ └── PageLayout.astro
│ │ ├── pages/
│ │ │ ├── api/
│ │ │ │ ├── composition-helpers.mdx
│ │ │ │ ├── configuration.mdx
│ │ │ │ ├── error-message.mdx
│ │ │ │ ├── field-array.mdx
│ │ │ │ ├── field.mdx
│ │ │ │ ├── form.mdx
│ │ │ │ ├── use-field-array.mdx
│ │ │ │ ├── use-field.mdx
│ │ │ │ └── use-form.mdx
│ │ │ ├── examples/
│ │ │ │ ├── array-fields.mdx
│ │ │ │ ├── async-validation.mdx
│ │ │ │ ├── checkboxes-and-radio.mdx
│ │ │ │ ├── cross-field-validation.mdx
│ │ │ │ ├── custom-checkboxes.mdx
│ │ │ │ ├── custom-inputs.mdx
│ │ │ │ ├── dynamic-validation-triggers.mdx
│ │ │ │ ├── multistep-form-wizard.mdx
│ │ │ │ ├── ui-libraries.mdx
│ │ │ │ ├── using-stores.mdx
│ │ │ │ └── value-formatting.mdx
│ │ │ ├── guide/
│ │ │ │ ├── components/
│ │ │ │ │ ├── handling-forms.mdx
│ │ │ │ │ ├── nested-objects-and-arrays.mdx
│ │ │ │ │ └── validation.mdx
│ │ │ │ ├── composition-api/
│ │ │ │ │ ├── caveats.mdx
│ │ │ │ │ ├── custom-inputs.mdx
│ │ │ │ │ ├── getting-started.mdx
│ │ │ │ │ ├── handling-forms.mdx
│ │ │ │ │ ├── helpers.mdx
│ │ │ │ │ └── nested-objects-and-arrays.mdx
│ │ │ │ ├── devtools.mdx
│ │ │ │ ├── global-validators.mdx
│ │ │ │ ├── i18n.mdx
│ │ │ │ ├── migration.mdx
│ │ │ │ ├── overview.mdx
│ │ │ │ └── testing.mdx
│ │ │ ├── index.astro
│ │ │ ├── integrations/
│ │ │ │ └── nuxt.mdx
│ │ │ ├── resources.mdx
│ │ │ ├── submit-target.astro
│ │ │ └── tutorials/
│ │ │ ├── basics.mdx
│ │ │ └── dynamic-form-generator.mdx
│ │ ├── styles/
│ │ │ ├── home.css
│ │ │ ├── page.css
│ │ │ └── tailwind.css
│ │ └── utils/
│ │ ├── examples.ts
│ │ ├── github.ts
│ │ └── seo.ts
│ ├── tailwind.config.js
│ ├── theme.json
│ └── tsconfig.json
├── eslint.config.js
├── package.json
├── packages/
│ ├── i18n/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ ├── locale/
│ │ │ │ ├── ar.json
│ │ │ │ ├── az.json
│ │ │ │ ├── bg.json
│ │ │ │ ├── bn.json
│ │ │ │ ├── ca.json
│ │ │ │ ├── ckb.json
│ │ │ │ ├── cs.json
│ │ │ │ ├── cy.json
│ │ │ │ ├── da.json
│ │ │ │ ├── de.json
│ │ │ │ ├── el.json
│ │ │ │ ├── en.json
│ │ │ │ ├── es.json
│ │ │ │ ├── et.json
│ │ │ │ ├── eu.json
│ │ │ │ ├── fa.json
│ │ │ │ ├── fi.json
│ │ │ │ ├── fr.json
│ │ │ │ ├── he.json
│ │ │ │ ├── hr.json
│ │ │ │ ├── hu.json
│ │ │ │ ├── id.json
│ │ │ │ ├── it.json
│ │ │ │ ├── ja.json
│ │ │ │ ├── ka.json
│ │ │ │ ├── km.json
│ │ │ │ ├── ko.json
│ │ │ │ ├── kz.json
│ │ │ │ ├── lt.json
│ │ │ │ ├── lv.json
│ │ │ │ ├── mn.json
│ │ │ │ ├── ms_MY.json
│ │ │ │ ├── nb_NO.json
│ │ │ │ ├── ne.json
│ │ │ │ ├── nl.json
│ │ │ │ ├── nn_NO.json
│ │ │ │ ├── pl.json
│ │ │ │ ├── pt_BR.json
│ │ │ │ ├── pt_PT.json
│ │ │ │ ├── ro.json
│ │ │ │ ├── ru.json
│ │ │ │ ├── sk.json
│ │ │ │ ├── sl.json
│ │ │ │ ├── so.json
│ │ │ │ ├── sq.json
│ │ │ │ ├── sr.json
│ │ │ │ ├── sr_Latin.json
│ │ │ │ ├── sv.json
│ │ │ │ ├── th.json
│ │ │ │ ├── tr.json
│ │ │ │ ├── ug.json
│ │ │ │ ├── uk.json
│ │ │ │ ├── uz.json
│ │ │ │ ├── vi.json
│ │ │ │ ├── zh_CN.json
│ │ │ │ └── zh_TW.json
│ │ │ └── utils.ts
│ │ └── tests/
│ │ └── index.spec.ts
│ ├── nuxt/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ └── src/
│ │ └── module.ts
│ ├── rules/
│ │ ├── CHANGELOG.md
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── alpha.ts
│ │ │ ├── alpha_dash.ts
│ │ │ ├── alpha_helper.ts
│ │ │ ├── alpha_num.ts
│ │ │ ├── alpha_spaces.ts
│ │ │ ├── between.ts
│ │ │ ├── confirmed.ts
│ │ │ ├── digits.ts
│ │ │ ├── dimensions.ts
│ │ │ ├── email.ts
│ │ │ ├── ext.ts
│ │ │ ├── image.ts
│ │ │ ├── index.ts
│ │ │ ├── integer.ts
│ │ │ ├── is.ts
│ │ │ ├── is_not.ts
│ │ │ ├── length.ts
│ │ │ ├── max.ts
│ │ │ ├── max_value.ts
│ │ │ ├── mimes.ts
│ │ │ ├── min.ts
│ │ │ ├── min_value.ts
│ │ │ ├── not_one_of.ts
│ │ │ ├── numeric.ts
│ │ │ ├── one_of.ts
│ │ │ ├── regex.ts
│ │ │ ├── required.ts
│ │ │ ├── size.ts
│ │ │ ├── toTypedSchema.ts
│ │ │ ├── url.ts
│ │ │ └── utils.ts
│ │ └── tests/
│ │ ├── .eslintrc.json
│ │ ├── alpha.spec.ts
│ │ ├── alpha_dash.spec.ts
│ │ ├── alpha_num.spec.ts
│ │ ├── alpha_spaces.spec.ts
│ │ ├── between.spec.ts
│ │ ├── confirmed.spec.ts
│ │ ├── digits.spec.ts
│ │ ├── dimensions.spec.ts
│ │ ├── email.spec.ts
│ │ ├── ext.spec.ts
│ │ ├── helpers/
│ │ │ └── index.ts
│ │ ├── image.spec.ts
│ │ ├── integer.spec.ts
│ │ ├── is.spec.ts
│ │ ├── is_not.spec.ts
│ │ ├── length.spec.ts
│ │ ├── max.spec.ts
│ │ ├── max_value.spec.ts
│ │ ├── mimes.spec.ts
│ │ ├── min.spec.ts
│ │ ├── min_value.spec.ts
│ │ ├── not_one_of.spec.ts
│ │ ├── numeric.spec.ts
│ │ ├── one_of.spec.ts
│ │ ├── regex.spec.ts
│ │ ├── required.spec.ts
│ │ ├── size.spec.ts
│ │ ├── toTypedSchema.spec.ts
│ │ └── url.spec.ts
│ ├── shared/
│ │ ├── README.md
│ │ ├── index.ts
│ │ ├── types.ts
│ │ ├── utils.spec.ts
│ │ └── utils.ts
│ └── vee-validate/
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── package.json
│ ├── src/
│ │ ├── ErrorMessage.ts
│ │ ├── Field.ts
│ │ ├── FieldArray.ts
│ │ ├── Form.ts
│ │ ├── config.ts
│ │ ├── defineRule.ts
│ │ ├── devtools.ts
│ │ ├── globals.d.ts
│ │ ├── index.ts
│ │ ├── symbols.ts
│ │ ├── types/
│ │ │ ├── common.ts
│ │ │ ├── devtools.ts
│ │ │ ├── forms.ts
│ │ │ ├── index.ts
│ │ │ └── paths.ts
│ │ ├── useField.ts
│ │ ├── useFieldArray.ts
│ │ ├── useFieldError.ts
│ │ ├── useFieldState.ts
│ │ ├── useFieldValue.ts
│ │ ├── useForm.ts
│ │ ├── useFormErrors.ts
│ │ ├── useFormValues.ts
│ │ ├── useIsFieldDirty.ts
│ │ ├── useIsFieldTouched.ts
│ │ ├── useIsFieldValid.ts
│ │ ├── useIsFormDirty.ts
│ │ ├── useIsFormTouched.ts
│ │ ├── useIsFormValid.ts
│ │ ├── useIsSubmitting.ts
│ │ ├── useIsValidating.ts
│ │ ├── useResetForm.ts
│ │ ├── useSetFieldError.ts
│ │ ├── useSetFieldTouched.ts
│ │ ├── useSetFieldValue.ts
│ │ ├── useSetFormErrors.ts
│ │ ├── useSetFormTouched.ts
│ │ ├── useSetFormValues.ts
│ │ ├── useSubmitCount.ts
│ │ ├── useSubmitForm.ts
│ │ ├── useValidateField.ts
│ │ ├── useValidateForm.ts
│ │ ├── utils/
│ │ │ ├── assertions.ts
│ │ │ ├── common.ts
│ │ │ ├── events.ts
│ │ │ ├── index.ts
│ │ │ ├── rules.ts
│ │ │ └── vnode.ts
│ │ └── validate.ts
│ └── tests/
│ ├── .eslintrc.json
│ ├── ErrorMessage.spec.ts
│ ├── Field.spec.ts
│ ├── FieldArray.spec.ts
│ ├── Form.spec.ts
│ ├── define.spec.ts
│ ├── helpers/
│ │ ├── ModelComp.ts
│ │ └── index.ts
│ ├── useField.spec.ts
│ ├── useFieldArray.spec.ts
│ ├── useFieldError.spec.ts
│ ├── useFieldValue.spec.ts
│ ├── useForm.spec.ts
│ ├── useFormErrors.spec.ts
│ ├── useFormValues.spec.ts
│ ├── useIsFieldDirty.spec.ts
│ ├── useIsFieldTouched.spec.ts
│ ├── useIsFieldValid.spec.ts
│ ├── useIsFormDirty.spec.ts
│ ├── useIsFormTouched.spec.ts
│ ├── useIsFormValid.spec.ts
│ ├── useIsSubmitting.spec.ts
│ ├── useIsValidating.spec.ts
│ ├── useResetForm.spec.ts
│ ├── useSetFieldError.spec.ts
│ ├── useSetFieldTouched.spec.ts
│ ├── useSetFieldValue.spec.ts
│ ├── useSetFormErrors.spec.ts
│ ├── useSetFormTouched.spec.ts
│ ├── useSetFormValues.spec.ts
│ ├── useSubmitCount.spec.ts
│ ├── useSubmitForm.spec.ts
│ ├── useValidateField.spec.ts
│ ├── useValidateForm.spec.ts
│ ├── utils/
│ │ └── assertions.spec.ts
│ └── validate.spec.ts
├── pnpm-workspace.yaml
├── scripts/
│ ├── build.mjs
│ ├── config.mjs
│ ├── copy-mds.mjs
│ ├── generate-dts.mjs
│ ├── info.mjs
│ ├── normalize-path.mjs
│ ├── release.sh
│ └── tag-release.mjs
├── tsconfig.json
├── vitest.config.ts
└── vitest.setup.ts
================================================
FILE CONTENTS
================================================
================================================
FILE: .changeset/README.md
================================================
# Changesets
Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
with multi-package repos, or single-package repos to help you version and publish your code. You can
find the full documentation for it [in our repository](https://github.com/changesets/changesets)
We have a quick list of common questions to get you started engaging with this project in
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
================================================
FILE: .changeset/config.json
================================================
{
"$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json",
"changelog": "@changesets/cli/changelog",
"commit": false,
"fixed": [["vee-validate", "@vee-validate/i18n", "@vee-validate/rules", "@vee-validate/nuxt"]],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
}
================================================
FILE: .changeset/evil-loops-shine.md
================================================
---
'vee-validate': minor
---
feat: remove deprecated useField props
================================================
FILE: .changeset/gentle-geckos-share.md
================================================
---
'vee-validate': patch
---
fix(devtools): prevent SSR memory leak in DevTools integration
================================================
FILE: .changeset/happy-wasps-rush.md
================================================
---
'vee-validate': patch
---
feat: expose `getConfig` as a public API
================================================
FILE: .changeset/pre.json
================================================
{
"mode": "pre",
"tag": "beta",
"initialVersions": {
"vee-validate-docs": null,
"@vee-validate/i18n": "4.15.1",
"@vee-validate/nuxt": "4.15.1",
"@vee-validate/rules": "4.15.1",
"vee-validate": "4.15.1"
},
"changesets": [
"evil-loops-shine",
"gentle-geckos-share",
"happy-wasps-rush",
"pretty-onions-add",
"revert-number-to-string",
"six-parrots-flash",
"smart-needles-own",
"stupid-friends-relate"
]
}
================================================
FILE: .changeset/pretty-onions-add.md
================================================
---
'vee-validate': patch
---
Fix dev tools not showing all field states
================================================
FILE: .changeset/revert-number-to-string.md
================================================
---
'vee-validate': patch
---
fix: revert number input type back to string from number, closes #4699 and #4482
================================================
FILE: .changeset/six-parrots-flash.md
================================================
---
'vee-validate': minor
---
feat: remove deprecated useForm define methods
================================================
FILE: .changeset/smart-needles-own.md
================================================
---
'vee-validate': major
'@vee-validate/rules': major
'@vee-validate/nuxt': major
'@vee-validate/i18n': major
---
feat: implement standard schema
================================================
FILE: .changeset/stupid-friends-relate.md
================================================
---
'vee-validate': patch
---
Fix dev tools do not display nested fields with name 'id'
================================================
FILE: .circleci/config.yml
================================================
# Use the latest 2.1 version of CircleCI pipeline process engine.
# See: https://circleci.com/docs/2.0/configuration-reference
version: 2.1
jobs:
# Below is the definition of your job to build and test your app, you can rename and customize it as you want.
test:
docker:
- image: cimg/node:22.11
steps:
# Checkout the code as the first step.
- checkout
- restore_cache:
name: Restore pnpm Package Cache
keys:
- pnpm-packages-{{ checksum "pnpm-lock.yaml" }}
- run:
name: Use latest Corepack
command: |
echo "Before: corepack version => $(corepack --version || echo 'not installed')"
sudo npm install -g corepack@latest
echo "After : corepack version => $(corepack --version)"
- run:
name: Install pnpm package manager
command: |
corepack enable --install-directory ~/bin
corepack prepare pnpm@latest-9 --activate
pnpm --version
pnpm config set store-dir .pnpm-store
- run:
name: Install dependencies
command: pnpm install
- save_cache:
name: Save pnpm Package Cache
key: pnpm-packages-{{ checksum "pnpm-lock.yaml" }}
paths:
- .pnpm-store
- run:
name: Build
command: pnpm build
- run:
name: Type check
command: pnpm typecheck
- run:
name: Generate Coverage
command: pnpm cover
- run:
name: Upload Coverage
command: bash <(curl -s https://codecov.io/bash)
workflows:
ci:
jobs:
- test
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: logaretm
# patreon: logaretm
# open_collective: vee-validate
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # 'https://www.buymeacoffee.com/logaretm'
================================================
FILE: .github/ISSUE_TEMPLATE/Feature_request.md
================================================
---
name: 🚀 Feature request
about: Suggest an idea for this project.
---
**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yaml
================================================
name: Bug Report
description: File a bug report
title: '<title>'
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
- type: textarea
id: what-happened
attributes:
label: What happened?
description: Describe the bug
placeholder: Tell us what you see!
validations:
required: true
- type: textarea
id: repro
attributes:
label: Reproduction steps
description: 'How do you trigger this bug? Please walk us through it step by step.'
value: |
1.
2.
3.
...
- type: dropdown
id: version
attributes:
label: Version
description: What version of Vue.js and vee-validate are you running?
options:
- Vue.js 3.x and vee-validate 5.x
- Vue.js 3.x and vee-validate 4.x
- Vue.js 2.x and vee-validate 3.x
- Vue.js 2.x and vee-validate 2.x
validations:
required: true
- type: checkboxes
id: browsers
attributes:
label: What browsers are you seeing the problem on?
options:
- label: Firefox
- label: Chrome
- label: Safari
- label: Microsoft Edge
- type: textarea
id: logs
attributes:
label: Relevant log output
description: If you have an error log or stacktrace, copy it and paste it here
render: shell
- type: input
id: demo
attributes:
label: Demo link
description: If you can reproduce this issue on codesandbox/codepen, please paste the link here
validations:
required: true
- type: checkboxes
attributes:
label: Code of Conduct
description: The Code of Conduct helps create a friendly environment
options:
- label: I agree to follow this project's [Code of Conduct](CONDUCT.md)
required: true
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
🔎 __Overview__
<!-- Explain the why behind adding this PR, here is a couple of examples -->
<!--
This PR {adds/fixes/improves} the {feature/bug/something}.
This PR changes the {locale} messages style because {reason}
-->
🤓 __Code snippets/examples (if applicable)__
```js
// some code
```
✔ __Issues affected__
<!-- list of issues formatted like this
closes #{issue id}
-->
================================================
FILE: .github/workflows/ci.yml
================================================
name: CI
on: [push, workflow_call]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- run: corepack enable
- uses: actions/setup-node@v4
with:
node-version: 22
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Build
run: pnpm build
- name: Lint
run: pnpm lint
typecheck:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- run: corepack enable
- uses: actions/setup-node@v4
with:
node-version: 22
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Build
run: pnpm build
- name: Type Check
run: pnpm typecheck
tests:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- run: corepack enable
- uses: actions/setup-node@v4
with:
node-version: 22
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Build
run: pnpm build
- name: Test
run: pnpm test
================================================
FILE: .github/workflows/release.yml
================================================
name: Release
on: workflow_dispatch
permissions:
id-token: write
contents: write
jobs:
checks:
uses: ./.github/workflows/ci.yml
release:
needs: checks
runs-on: ubuntu-latest
permissions:
id-token: write
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- run: corepack enable
- uses: actions/setup-node@v4
with:
node-version: 24
cache: 'pnpm'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: pnpm install
- name: Tag and Release
run: |
git config --global user.email "github-action@users.noreply.github.com"
git config --global user.name "GitHub Action"
pnpm ci:version
git add .
git commit -m "chore(release): publish"
pnpm ci:tag
pnpm ci:publish
git push && git push --tags
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
NPM_CONFIG_PROVENANCE: true
================================================
FILE: .gitignore
================================================
node_modules
.nyc_output
npm-debug.log
coverage
.idea
.vscode
.vs
yarn-error.log
dist
.rpt2_cache
./types
.DS_STORE
lerna-debug.log
packages/*/src/playground.ts
================================================
FILE: .husky/.gitignore
================================================
_
================================================
FILE: .husky/commit-msg
================================================
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
pnpm commitlint --edit $1
================================================
FILE: .husky/pre-commit
================================================
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
pnpm lint-staged
================================================
FILE: .prettierrc
================================================
{
"printWidth": 120,
"tabWidth": 2,
"semi": true,
"singleQuote": true,
"bracketSpacing": true,
"arrowParens": "avoid",
"endOfLine": "lf",
"plugins": ["prettier-plugin-astro"],
"overrides": [
{
"files": "*.astro",
"options": {
"parser": "astro"
}
}
]
}
================================================
FILE: CHANGELOG.md
================================================
# Change Log
## 5.0.0-beta.1
### Minor Changes
- f629397: feat: remove deprecated useField props
- fb5e04e: feat: remove deprecated useForm define methods
### Patch Changes
- f2807b8: fix(devtools): prevent SSR memory leak in DevTools integration
- e6db423: feat: expose `getConfig` as a public API
- 49fcf4c: Fix dev tools not showing all field states
- 1ce0731: fix: revert number input type back to string from number, closes #4699 and #4482
- 095df65: Fix dev tools do not display nested fields with name 'id'
## 5.0.0-beta.0
### Major Changes
- 04ff47c: feat: implement standard schema
## 4.15.1
### Patch Changes
- 721e980: Align FormErrors type with its actual structure at runtime.
- 546d82e: fix: normalize objects before equality checks closes #5006
## 4.15.0
### Patch Changes
- 30281f5: fix: lazy load the devtools dep to force it out of production bundle
- ec121b1: fix: skip loading devtools if in SSR
## 4.14.7
### Patch Changes
- be994b4: fix: show uncontrolled field info in devtools closes #4914
## 4.14.6
## 4.14.5
### Patch Changes
- e9f8c88: fix: force loading the mjs module when using nuxt
## 4.14.4
### Patch Changes
- f33974c: fix(types): expose field and form slot prop types closes #4900
- 0991c01: fix: devtools crashing when a field name is defined as getter
- ecb540a: fix: handle getter field names properly closes #4877
- 4f88d85: fix: specify module type on package.json
## 4.14.3
### Patch Changes
- 07c27d5: fix: remove rogue console.log
## 4.14.2
### Patch Changes
- f0d4e24: fix: upgrade vue devtools dependency version closes #4863
## 4.14.1
## 4.14.0
### Minor Changes
- 404cf57: chore: bump release
### Patch Changes
- f7a4929: feat: expose useFormContext closes #4490
- 97cebd8: chore: add 'exports' field in package.json for all packages
- 421ae69: "fix(types): export component internal types"
## 4.13.2
### Patch Changes
- afbd0e5: feat: support valibot 0.33.0
## 4.13.1
## 4.13.0
### Minor Changes
- 454bc45: fix: force resetForm should not merge values closes #4680 closes #4729
- 27fe5c8: feat: provide form values as context for yup closes #4753
### Patch Changes
- ae3772a: feat: expose setValue on Field instance and slot props closes #4755
- fd008c1: feat: added ResetFormOpts arg to useResetForm closes #4707
## 4.12.8
### Patch Changes
- f8bab9c: "fix: field-level validation not working with typed scheams closes #4744"
## 4.12.7
### Patch Changes
- 1376794: fix: handle meta.required for single field schemas closes #4738
- 1376794: fix: add try-catch for schema description logic across all major schema providers
- c4415f8: fix: ensure meta.required is reactive whenever the schema changes closes #4738
## 4.12.6
### Patch Changes
- 07d01fd: fix: re-apply errors to avoid race conditions
## 4.12.5
### Patch Changes
- d779980: fix: make sure removePathState removes the correct path state
- 9eda544: "fix: remove event arg from define field handlers for component compat closes #4637"
## 4.12.4
### Patch Changes
- 2a09a58: "fix: check if both source and target objects are POJOs"
## 4.12.3
### Patch Changes
- 72e4379: fix: remove deep data mutation warning closes #4597
- a18c19f: feat: allow path meta querying for nested fields closes #4575
- e2171f8: feat: expose some state on form instance
## 4.12.2
### Patch Changes
- b2203c8e: fix: apply schema casts when submitting closes #4565
- ec8a4d7e: fix: defineField should respect global validateOnModelUpdate closes #4567
## 4.12.1
### Patch Changes
- 36f6b9e6: fix: reset form and field behaviors for unspecified values closes #4564
- c1c6f399: fix: unref initial values when initializing the form closes #4563
## 4.12.0
### Minor Changes
- bbecc973: feat: deprecate reactive initial values closes #4402
### Patch Changes
- f9a95843: feat: add label support to defineField closes #4530
- f688896f: fix: avoid overriding paths and destroy path on remove closes #4476 closes #4557
- 2abb8966: fix: clone values before reset closes #4536
- e370413b: fix: handle hoisted paths overriding one another
- 95b701f7: feat: allow getters for field arrays
## 4.11.8
### Patch Changes
- d1b5b855: fix: avoid triggering extra model value events closes #4461
- 78c4668e: feat: allow null as a valid Form prop type closes #4483
## 4.11.7
### Patch Changes
- a1414f6a: fix: export ModelessBinds type closes #4478
## 4.11.6
### Patch Changes
- f683e909: fix(types): infer the model value prop name correctly
## 4.11.5
### Patch Changes
- 27c9ef24: feat(types): stronger define component bind types closes #4421
- 804ec6fa: fix: use flags to avoid validating during reset #4404 #4467
## 4.11.4
### Patch Changes
- 4d8ed7eb: feat: added reset opts to force values closes #4440
- b53400e2: fix: silent validation should not mark a field as validated
- 8f680bf1: fix: clone the schema object before validating closes #4459
- 5231f439: fix: respect validate on model update configuration closes #4451, closes #4467
## 4.11.3
## 4.11.2
### Patch Changes
- 2ff045c1: fix: do not warn if a form or a field was resolved closes #4399
- 73219b40: feat: expose all internal types
- 4947e88f: feat: expose BaseInputBinds and BaseComponentBinds interfaces #4409
- ecbb690d: feat: query fields meta state
## 4.11.1
### Patch Changes
- 5e23dcb9: fix: add support for parsing range inputs
## 4.11.0
### Minor Changes
- 2d8143f9: feat: added composition setter functions
## 4.10.9
### Patch Changes
- c02337f3: fix: correct the setErrors type to allow for string[]
## 4.10.8
### Patch Changes
- a9a473b4: feat(perf): improve performance setFieldError and setFieldValue closes #4382
## 4.10.7
### Patch Changes
- 9290f5a9: fix: clone values inserted into field arrays closes #4372
- 93f8001a: fix: do not warn if the validation is for removed paths closes #4368
## 4.10.6
### Patch Changes
- 40ce7a91: feat: expose normalizeRules closes #4348
- e9b215a7: fix: resetForm should cast typed schema values closes #4347
- 4e11ff95: fix: validate form values on setValues by default closes #4359
- e354a13a: fix: Normalize error paths to use brackets for indices closes #4211
- 68080d28: feat: use silent validation when field is initialized closes #4312
## 4.10.5
### Patch Changes
- 6a1dc9bd: fix: component blur event and respect model update config closes #4346
## 4.10.4
### Patch Changes
- 2f9ca91c: fix(types): remove deep readonly type for now
## 4.10.3
### Patch Changes
- 32537e14: fix: less strict object checks for undefined and missing keys closes #4341
- c3698f07: fix: respect model modifiers when emitting the value closes #4333
## 4.10.2
### Patch Changes
- 1660048e: fix: define binds not respecting config events
## 4.10.1
### Patch Changes
- fc416918: fix: handle NaN when parsing number inputs closes #4328
- 435e7857: fix: reset present values after all path mutation
- 273cca74: fix: reset field should not validate closes #4323
## 4.10.0
### Minor Changes
- 7a548f42: chore: require vue 3.3 and refactor types
- 7ce9d671: feat(breaking): disable v-model support by default closes #4283
- bfd6b00a: "feat: allow custom models for defineComponentBinds"
- d4fafc95: "feat: allow handleBlur to run validations"
- 05d957ec: feat: mark form values as readonly closes #4282
### Patch Changes
- 77345c42: fix: reset form should merge values closes #4320
- f1dc1359: fix: use event value if no checked value for checkbox/radio closes #4308
- 3e4a7c13: feat(dx): make `syncVModel` accept the model propName
- 2cf0eec9: feat: allow multiple messages in a validator fn closes #4322 #4318
- ed208918: fix: trigger validation with setFieldValue by default closes #4314
- 6a3f9f15: fix: parse native number fields closes #4313
## 4.9.6
### Patch Changes
- b138282a: fix(types): export SetFieldValueOptions interface closes #4290
- 6e074f77: fix: handleBlur should respect blur validate config closes #4285
## 4.9.5
### Patch Changes
- 7356c102: fix: setFieldError should set meta.valid closes #4274
## 4.9.4
### Patch Changes
- f4ea2c05: fix: exclude undefined and null from initial values closes #4139
## 4.9.3
### Patch Changes
- 09d5596b: fix: run validation on value change closes #4251
- 9bfbfaaf: feat: added isValidating to useForm
- 48b45d91: fix: hoist nested errors path to the deepest direct parent closes #4063
## 4.9.2
### Patch Changes
- 31090e0d: avoid double unset path with field array remove
- 9046308b: fixed validations running for unmounted fields
- fe322a07: batch unsets and sort paths unset order for safer unsets closes #4115
## 4.9.1
### Patch Changes
- 681bbab4: Added type-fest to core package dependencies
## 4.9.0
### Minor Changes
- 41b5d39b: Implemented path types into various form API functions
- 95409080: Added component and input binds helpers
### Patch Changes
- 7554d4a6: fix field array triggering validation when an item is removed
- 298577b7: setValues does not delete unspecified fields values
## 4.8.6
### Patch Changes
- 6e0b0557: Introduced official nuxt module package
## 4.8.5
### Patch Changes
- 9048a238: fixed zod union issues not showing up as errors closes #4204
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [4.8.4](https://github.com/logaretm/vee-validate/compare/v4.8.3...v4.8.4) (2023-03-24)
### Bug Fixes
- make initial values partial closes [#4195](https://github.com/logaretm/vee-validate/issues/4195) ([eeccd0c](https://github.com/logaretm/vee-validate/commit/eeccd0c55814408670eced3717d0347590da3488))
- properly unref the schema before checking for default values closes [#4196](https://github.com/logaretm/vee-validate/issues/4196) ([8e3663d](https://github.com/logaretm/vee-validate/commit/8e3663d18357574ea4d394197f2c66889eeef6fa))
### Features
- allow name ref to be a lazy function ([8fb543a](https://github.com/logaretm/vee-validate/commit/8fb543a6e91c17d8541389e29c7014dc1f804c91))
## [4.8.3](https://github.com/logaretm/vee-validate/compare/v4.8.2...v4.8.3) (2023-03-15)
**Note:** Version bump only for package vee-validate
## [4.8.2](https://github.com/logaretm/vee-validate/compare/v4.8.1...v4.8.2) (2023-03-14)
### Bug Fixes
- do not use name as a default label for useField closes [#4164](https://github.com/logaretm/vee-validate/issues/4164) ([d5acff7](https://github.com/logaretm/vee-validate/commit/d5acff719797c77ba4ff3be5f78c4a45374f9809))
## [4.8.1](https://github.com/logaretm/vee-validate/compare/v4.8.0...v4.8.1) (2023-03-12)
### Bug Fixes
- make sure to have a fallback for undefined casts closes [#4186](https://github.com/logaretm/vee-validate/issues/4186) ([9f1c63b](https://github.com/logaretm/vee-validate/commit/9f1c63b4dbc59f30c17bfe427020586db36cbdec))
### Features
- expose errorBag to <Form /> slot props ([371744e](https://github.com/logaretm/vee-validate/commit/371744eea3d3cb0a244dcd9788f4f3f2a7714132))
# [4.8.0](https://github.com/logaretm/vee-validate/compare/v4.7.4...v4.8.0) (2023-03-12)
### Bug Fixes
- finally handicap yup schema resolution ([303b1fb](https://github.com/logaretm/vee-validate/commit/303b1fb771ee78816ef0916e4f0e26318ad641b0))
- initial sync with v-model if enabled closes [#4163](https://github.com/logaretm/vee-validate/issues/4163) ([1040643](https://github.com/logaretm/vee-validate/commit/1040643f40ba622010ab935095dffb8d926cd76d))
- properly aggregrate nested errors for yup ([7f90bbc](https://github.com/logaretm/vee-validate/commit/7f90bbceeaeb7806a9626adb72981933a69db96f))
- remove console.log from devtools integration ([3c2d51c](https://github.com/logaretm/vee-validate/commit/3c2d51c56f80918ef6644b034594df1a3e81eb03))
- remove yup schema type and rely on assertions ([5cbb913](https://github.com/logaretm/vee-validate/commit/5cbb913071e315264d62fda7d1219bdc28d3faf0))
- render zod multiple errors in nested objects closes [#4078](https://github.com/logaretm/vee-validate/issues/4078) ([f74fb69](https://github.com/logaretm/vee-validate/commit/f74fb69977d17ef8fab4c22734ffd76ca1c02a48))
- run silent validation after array mutations closes [#4096](https://github.com/logaretm/vee-validate/issues/4096) ([044b4b4](https://github.com/logaretm/vee-validate/commit/044b4b44601908330c65541ce2bee6a110b1604f))
- type inference fix ([ac0383f](https://github.com/logaretm/vee-validate/commit/ac0383f1fb335bf92c9249f65bf319ca182545b7))
- watch and re-init array fields if form data changed closes [#4153](https://github.com/logaretm/vee-validate/issues/4153) ([6e784cc](https://github.com/logaretm/vee-validate/commit/6e784ccacbe89b5cd9daa9e3827808f7056aac04))
### Features
- Better Yup and Zod typing with output types and input inference ([#4064](https://github.com/logaretm/vee-validate/issues/4064)) ([3820a5b](https://github.com/logaretm/vee-validate/commit/3820a5b8eb3f8c6cd9239057746ccfb4b2e57e76))
- export type `FieldState` ([#4159](https://github.com/logaretm/vee-validate/issues/4159)) ([69c0d12](https://github.com/logaretm/vee-validate/commit/69c0d12434d50b52f4691c2f95d739049a3d1fcb))
## [4.7.4](https://github.com/logaretm/vee-validate/compare/v4.7.3...v4.7.4) (2023-02-07)
### Bug Fixes
- pass the field label as a seperate value closes [#4097](https://github.com/logaretm/vee-validate/issues/4097) ([89f8689](https://github.com/logaretm/vee-validate/commit/89f8689b673be27f0fc221d6c096efa11dacd3e6))
### Features
- **#4117:** add resetField on Form/useForm ([#4120](https://github.com/logaretm/vee-validate/issues/4120)) ([87c4278](https://github.com/logaretm/vee-validate/commit/87c42787c0b4de5a09abe0d29deb92b28b59023e)), closes [#4117](https://github.com/logaretm/vee-validate/issues/4117)
- expose state getters on the form instance via template refs ([#4121](https://github.com/logaretm/vee-validate/issues/4121)) ([7f1c39c](https://github.com/logaretm/vee-validate/commit/7f1c39c0d9a0d1f7b7768b68c6705b5bfda91599))
## [4.7.3](https://github.com/logaretm/vee-validate/compare/v4.7.2...v4.7.3) (2022-11-13)
### Bug Fixes
- use cloned value when setting field value closes [#3991](https://github.com/logaretm/vee-validate/issues/3991) ([90b61fc](https://github.com/logaretm/vee-validate/commit/90b61fc8810a1fdc677507251735b4210f175f4b))
## [4.7.2](https://github.com/logaretm/vee-validate/compare/v4.7.1...v4.7.2) (2022-11-02)
### Bug Fixes
- don't mutate validated meta when silent validation closes [#3981](https://github.com/logaretm/vee-validate/issues/3981) closes [#3982](https://github.com/logaretm/vee-validate/issues/3982) ([6652a22](https://github.com/logaretm/vee-validate/commit/6652a22f99cde5b018c633365025d74e15dde835))
## [4.7.1](https://github.com/logaretm/vee-validate/compare/v4.7.0...v4.7.1) (2022-10-23)
### Bug Fixes
- clean up single group value after unmount closes [#3963](https://github.com/logaretm/vee-validate/issues/3963) ([#3972](https://github.com/logaretm/vee-validate/issues/3972)) ([8ccfd2b](https://github.com/logaretm/vee-validate/commit/8ccfd2b2b542963d3d35cfe5f82490c94ec1635f))
- correctly mutate deep field array item and trigger validation ([#3974](https://github.com/logaretm/vee-validate/issues/3974)) ([267736f](https://github.com/logaretm/vee-validate/commit/267736f43ca207a8fe35af30020fc61fdc009265))
- mark slot prop field value as any closes [#3969](https://github.com/logaretm/vee-validate/issues/3969) ([#3973](https://github.com/logaretm/vee-validate/issues/3973)) ([70ddc5b](https://github.com/logaretm/vee-validate/commit/70ddc5b60232f0dc761b7803a3220010d2f8ba69))
# [4.7.0](https://github.com/logaretm/vee-validate/compare/v4.6.10...v4.7.0) (2022-10-09)
### Features
- allow passing form control to useField closes [#3204](https://github.com/logaretm/vee-validate/issues/3204) ([#3923](https://github.com/logaretm/vee-validate/issues/3923)) ([4c59d63](https://github.com/logaretm/vee-validate/commit/4c59d634f25d7fff024b50f3ffd667f7fdf0076c))
- expose controlled values on useForm ([#3924](https://github.com/logaretm/vee-validate/issues/3924)) ([2517319](https://github.com/logaretm/vee-validate/commit/25173196f3b689d919015cf8e7df8254b9e3090e))
## [4.6.10](https://github.com/logaretm/vee-validate/compare/v4.6.9...v4.6.10) (2022-09-30)
### Bug Fixes
- use ssr safe file check ([56663aa](https://github.com/logaretm/vee-validate/commit/56663aa2e50d7aa285ca1cb22887c8e8b3f7fd3c))
## [4.6.9](https://github.com/logaretm/vee-validate/compare/v4.6.8...v4.6.9) (2022-09-19)
### Bug Fixes
- perform field reset before all values reset closes [#3934](https://github.com/logaretm/vee-validate/issues/3934) ([1c016d9](https://github.com/logaretm/vee-validate/commit/1c016d93b367229644dca643931ef63bc6e433dc))
## [4.6.8](https://github.com/logaretm/vee-validate/compare/v4.6.7...v4.6.8) (2022-09-19)
### Bug Fixes
- ensure validation if we skip checkbox value setting [#3927](https://github.com/logaretm/vee-validate/issues/3927) ([#3930](https://github.com/logaretm/vee-validate/issues/3930)) ([82d05db](https://github.com/logaretm/vee-validate/commit/82d05dbd2a5c7d5ea2fe7b73222dd339e92ee373))
- extend is equal with file comparison logic [#3911](https://github.com/logaretm/vee-validate/issues/3911) ([#3932](https://github.com/logaretm/vee-validate/issues/3932)) ([c7c806c](https://github.com/logaretm/vee-validate/commit/c7c806c0c5393f3188c16384f5fc1b46ebc78cbd))
- handle nested value change validation [#3926](https://github.com/logaretm/vee-validate/issues/3926) ([#3929](https://github.com/logaretm/vee-validate/issues/3929)) ([771e7f2](https://github.com/logaretm/vee-validate/commit/771e7f21cf332052b74c5506a8c2f38f666cae55))
### Features
- expose RuleExpression type closes [#3913](https://github.com/logaretm/vee-validate/issues/3913) ([cdaf22d](https://github.com/logaretm/vee-validate/commit/cdaf22df04b42a68f55133ad3854aae9a7ad6953))
## [4.6.7](https://github.com/logaretm/vee-validate/compare/v4.6.6...v4.6.7) (2022-08-27)
### Bug Fixes
- allow generics for generic function type ([91e97aa](https://github.com/logaretm/vee-validate/commit/91e97aa41bca278970780973fcbf90e17fb29920))
- handle validation races for async validations ([#3908](https://github.com/logaretm/vee-validate/issues/3908)) ([8c82079](https://github.com/logaretm/vee-validate/commit/8c82079dac8535678e45428ad8e5afe7dcd3da63))
## [4.6.6](https://github.com/logaretm/vee-validate/compare/v4.6.5...v4.6.6) (2022-08-16)
### Bug Fixes
- return value if no model modifiers are defined closes [#3895](https://github.com/logaretm/vee-validate/issues/3895) ([#3896](https://github.com/logaretm/vee-validate/issues/3896)) ([6ab40df](https://github.com/logaretm/vee-validate/commit/6ab40df4452c5bee8a487a37164e2273c2aaf0ba))
## [4.6.5](https://github.com/logaretm/vee-validate/compare/v4.6.4...v4.6.5) (2022-08-11)
### Bug Fixes
- reset the original value when resetField is called [#3891](https://github.com/logaretm/vee-validate/issues/3891) ([#3892](https://github.com/logaretm/vee-validate/issues/3892)) ([7113dcc](https://github.com/logaretm/vee-validate/commit/7113dccdeb962d8efa064ff0ebd171b2aa2f4c4d))
## [4.6.4](https://github.com/logaretm/vee-validate/compare/v4.6.3...v4.6.4) (2022-08-07)
### Bug Fixes
- make sure to deep watch created models by useFieldModel ([fbe273c](https://github.com/logaretm/vee-validate/commit/fbe273c6f2c5d30a1996777561eda2268d8a02e0))
## [4.6.3](https://github.com/logaretm/vee-validate/compare/v4.6.2...v4.6.3) (2022-08-07)
### Features
- Expose InvalidSubmissionHandler and GenericValidateFunction types ([#3853](https://github.com/logaretm/vee-validate/issues/3853)) ([3ccf27d](https://github.com/logaretm/vee-validate/commit/3ccf27d5b9c1fe9cf655b89533eb1802cb5717d4))
## [4.6.2](https://github.com/logaretm/vee-validate/compare/v4.6.1...v4.6.2) (2022-07-17)
### Bug Fixes
- avoid toggling field array checkboxes values closes [#3844](https://github.com/logaretm/vee-validate/issues/3844) ([fffad4b](https://github.com/logaretm/vee-validate/commit/fffad4bea68cc949d0bce440b5daf43901aaca7f))
### Features
- expose field and form options closes [#3843](https://github.com/logaretm/vee-validate/issues/3843) ([7437612](https://github.com/logaretm/vee-validate/commit/7437612ab554f8f65b445f7b065725b570a9a14a))
## [4.6.1](https://github.com/logaretm/vee-validate/compare/v4.6.0...v4.6.1) (2022-07-12)
### Bug Fixes
- pass onInvalidSubmit prop to submitForm closes [#3841](https://github.com/logaretm/vee-validate/issues/3841) ([b6cf543](https://github.com/logaretm/vee-validate/commit/b6cf543b600246942fc7f6802a0cc6ea1038603a))
# [4.6.0](https://github.com/logaretm/vee-validate/compare/v4.5.11...v4.6.0) (2022-07-11)
### Bug Fixes
- added existing undefined path fallback closes [#3801](https://github.com/logaretm/vee-validate/issues/3801) ([fd0500c](https://github.com/logaretm/vee-validate/commit/fd0500c9cb4448b232eddb4cd5d8d081e5d48d08))
- avoid inserting value binding for file type inputs closes [#3760](https://github.com/logaretm/vee-validate/issues/3760) ([3c76bb2](https://github.com/logaretm/vee-validate/commit/3c76bb2ebcbafaf46047b8e41bcc053e41cf27bf))
- avoid validating when field instance exists ([3759df2](https://github.com/logaretm/vee-validate/commit/3759df20f5ba48a43d5dea4bb6d94e875f15c331))
- compare form meta.dirty based on original values than staged initials closes [#3782](https://github.com/logaretm/vee-validate/issues/3782) ([f3ffd3c](https://github.com/logaretm/vee-validate/commit/f3ffd3c00ac1f2b73b6a3039cb997d08cf8e452b))
- expose ValidationOptions type closes [#3825](https://github.com/logaretm/vee-validate/issues/3825) ([9854865](https://github.com/logaretm/vee-validate/commit/9854865ae60431256e6fb9c921d1eabc9093b5e4))
- exposed component APIs to their TS defs with refs closes [#3292](https://github.com/logaretm/vee-validate/issues/3292) ([ae59d0f](https://github.com/logaretm/vee-validate/commit/ae59d0f6f3728a2a95732517d11fdf970127fe9c))
- fast equal before deciding value was changed closes [#3808](https://github.com/logaretm/vee-validate/issues/3808) ([3d582ec](https://github.com/logaretm/vee-validate/commit/3d582ec6c884467199cc7fb86ffe0e571d85c4fb))
- use multiple batch queues for both validation modes closes [#3783](https://github.com/logaretm/vee-validate/issues/3783) ([6156603](https://github.com/logaretm/vee-validate/commit/6156603f537fb46030017fb3a4d003b6bec0d4e8))
### Features
- **4.6:** Allow mutating field array iterable's value property ([#3618](https://github.com/logaretm/vee-validate/issues/3618)) ([#3759](https://github.com/logaretm/vee-validate/issues/3759)) ([c3c40e5](https://github.com/logaretm/vee-validate/commit/c3c40e50b68cbf8aee3356416561fdf5d23ac6d2))
- add move to FieldArray ([a52f133](https://github.com/logaretm/vee-validate/commit/a52f13356c44616d699e02f9a243dd08c7bcc38e))
- added unsetValueOnUnmount config ([#3815](https://github.com/logaretm/vee-validate/issues/3815)) ([e6e1c1d](https://github.com/logaretm/vee-validate/commit/e6e1c1d66bfd4c453ac21c00b3faa2d6470040a8))
- added useFieldModel to useForm API ([26c828e](https://github.com/logaretm/vee-validate/commit/26c828e21495c485d489ea1319575d9b5c271801))
- allow keep values config to be reactive ([5009bd8](https://github.com/logaretm/vee-validate/commit/5009bd88c09f7a8c753fc52dd5bf8d4d5234567b))
- better normalization for native input file events ([2751552](https://github.com/logaretm/vee-validate/commit/2751552a42b4eaa57d22ea24c38cd31cfd5b9955))
- Remove yup type dependency ([#3704](https://github.com/logaretm/vee-validate/issues/3704)) ([e772f9a](https://github.com/logaretm/vee-validate/commit/e772f9a7b9f0e45680a65dfae249ee2092ca850e))
- Sync useField with component v-model ([#3806](https://github.com/logaretm/vee-validate/issues/3806)) ([0ef7582](https://github.com/logaretm/vee-validate/commit/0ef75823d1b90e1213f8a31014c2cf347d386ec1))
## [4.5.11](https://github.com/logaretm/vee-validate/compare/v4.5.10...v4.5.11) (2022-04-10)
### Bug Fixes
- ignore validation of removed array elements closes [#3748](https://github.com/logaretm/vee-validate/issues/3748) ([3d49faa](https://github.com/logaretm/vee-validate/commit/3d49faa4101902c2e77aee0a2d43cd29b69f7b4e))
### Features
- chain of GenericValidateFunction in useField ([#3725](https://github.com/logaretm/vee-validate/issues/3725)) ([#3726](https://github.com/logaretm/vee-validate/issues/3726)) ([8db4077](https://github.com/logaretm/vee-validate/commit/8db407785c5611c10c221eabd747c3f31770145b))
## [4.5.10](https://github.com/logaretm/vee-validate/compare/v4.5.9...v4.5.10) (2022-03-08)
**Note:** Version bump only for package vee-validate
## [4.5.9](https://github.com/logaretm/vee-validate/compare/v4.5.8...v4.5.9) (2022-02-22)
### Bug Fixes
- mark fields validated via form validate as validated ([ad9fa9d](https://github.com/logaretm/vee-validate/commit/ad9fa9d853a8cabb26cdde04c20c07d4f2673aa4))
## [4.5.8](https://github.com/logaretm/vee-validate/compare/v4.5.7...v4.5.8) (2022-01-23)
### Bug Fixes
- clear old error path error when changing field name closes [#3664](https://github.com/logaretm/vee-validate/issues/3664) ([f736e62](https://github.com/logaretm/vee-validate/commit/f736e62b1bb82f940d14d74a6d505c913c1c3dde))
- field array swap not working when falsy values are present at paths ([40afbd9](https://github.com/logaretm/vee-validate/commit/40afbd9cc3fb3de71de3f6ebb0a1b2774d9018ff))
## [4.5.7](https://github.com/logaretm/vee-validate/compare/v4.5.6...v4.5.7) (2021-12-07)
### Bug Fixes
- always attach model update event closes [#3583](https://github.com/logaretm/vee-validate/issues/3583) ([6a53e80](https://github.com/logaretm/vee-validate/commit/6a53e80525a9c38ce8851407b832bc8409c3f334))
## [4.5.6](https://github.com/logaretm/vee-validate/compare/v4.5.5...v4.5.6) (2021-11-17)
### Bug Fixes
- corrected the typing for the resetField function closes [#3568](https://github.com/logaretm/vee-validate/issues/3568) ([4e9460e](https://github.com/logaretm/vee-validate/commit/4e9460e3a4f51f4a78ddcdf17f7c3073f899404f))
- new devtools typings ([f288ca5](https://github.com/logaretm/vee-validate/commit/f288ca5a59d36f23ba7f6bdd210493588f744940))
- use watchEffect to compute form meta closes [#3580](https://github.com/logaretm/vee-validate/issues/3580) ([e8729dc](https://github.com/logaretm/vee-validate/commit/e8729dc72d2a027a666515360c9537a62a8d46ad))
## [4.5.5](https://github.com/logaretm/vee-validate/compare/v4.5.4...v4.5.5) (2021-11-01)
### Bug Fixes
- prevent toggle checkboxes when form resets closes [#3551](https://github.com/logaretm/vee-validate/issues/3551) ([cad12ba](https://github.com/logaretm/vee-validate/commit/cad12ba7502af7268029930a9176d8e160efeef6))
## [4.5.4](https://github.com/logaretm/vee-validate/compare/v4.5.3...v4.5.4) (2021-10-20)
**Note:** Version bump only for package vee-validate
## [4.5.3](https://github.com/logaretm/vee-validate/compare/v4.5.2...v4.5.3) (2021-10-17)
### Features
- added slot typings for components closes [#3534](https://github.com/logaretm/vee-validate/issues/3534) ([#3537](https://github.com/logaretm/vee-validate/issues/3537)) ([52a2a38](https://github.com/logaretm/vee-validate/commit/52a2a385ec6e65c7eaaed0a67615c45aba07de64))
## [4.5.2](https://github.com/logaretm/vee-validate/compare/v4.5.1...v4.5.2) (2021-09-30)
### Bug Fixes
- use klona/full mode to handle luxon values closes [#3508](https://github.com/logaretm/vee-validate/issues/3508) ([048c9c0](https://github.com/logaretm/vee-validate/commit/048c9c03d38ffd871ee4b3504daf1c83d42e9516))
## [4.5.1](https://github.com/logaretm/vee-validate/compare/v4.5.0...v4.5.1) (2021-09-29)
**Note:** Version bump only for package vee-validate
# [4.5.0](https://github.com/logaretm/vee-validate/compare/v4.4.11...v4.5.0) (2021-09-26)
**Note:** Version bump only for package vee-validate
## [4.4.11](https://github.com/logaretm/vee-validate/compare/v4.4.10...v4.4.11) (2021-09-11)
### Bug Fixes
- dynamic rule forcing validation closes [#3485](https://github.com/logaretm/vee-validate/issues/3485) ([d3f0fc0](https://github.com/logaretm/vee-validate/commit/d3f0fc094c89375bd67bdd3f533e5ab545a83611))
## [4.4.10](https://github.com/logaretm/vee-validate/compare/v4.4.9...v4.4.10) (2021-08-31)
### Bug Fixes
- added silent validation run after reset closes [#3463](https://github.com/logaretm/vee-validate/issues/3463) ([a61f7ab](https://github.com/logaretm/vee-validate/commit/a61f7ab532d6d2fd9f237145f91bbcc9043431f6))
- handle absent model value closes [#3468](https://github.com/logaretm/vee-validate/issues/3468) ([2c4a7ff](https://github.com/logaretm/vee-validate/commit/2c4a7ffb84811ae86a1698e6e15f41dc32f8fb8d))
- **types:** remove arguments of PrivateFieldContext.handleReset ([2e45d1f](https://github.com/logaretm/vee-validate/commit/2e45d1f8a8444c0aabfd307364cadfab74802d02))
- ensure option bound value type is preserved closes [#3440](https://github.com/logaretm/vee-validate/issues/3440) ([b144615](https://github.com/logaretm/vee-validate/commit/b1446152d6f6cd4843ab206d667a7d744c2a14fc))
## [4.4.9](https://github.com/logaretm/vee-validate/compare/v4.4.8...v4.4.9) (2021-08-05)
### Bug Fixes
- ensure to clone user passed values in setters closes [#3428](https://github.com/logaretm/vee-validate/issues/3428) ([a720c24](https://github.com/logaretm/vee-validate/commit/a720c2444b64d28743ba0500aa970419029352cb))
- prioritize the current value if another field of same name is mounted closes [#3429](https://github.com/logaretm/vee-validate/issues/3429) ([cf036ec](https://github.com/logaretm/vee-validate/commit/cf036ecf9a5dad401c752c132ef5333d0f442441))
## [4.4.8](https://github.com/logaretm/vee-validate/compare/v4.4.7...v4.4.8) (2021-07-31)
**Note:** Version bump only for package vee-validate
## [4.4.7](https://github.com/logaretm/vee-validate/compare/v4.4.6...v4.4.7) (2021-07-20)
### Bug Fixes
- avoid watching values at the end of reset calls closes [#3407](https://github.com/logaretm/vee-validate/issues/3407) ([86f594f](https://github.com/logaretm/vee-validate/commit/86f594f4a7cee5ed5f581419bdbd985fc53f8358))
### Features
- add standalone prop for fields ([#3379](https://github.com/logaretm/vee-validate/issues/3379)) ([3689437](https://github.com/logaretm/vee-validate/commit/36894378aa3636eeb4fb54aa747319e21c6eb5cd))
- expose FieldContext type closes [#3398](https://github.com/logaretm/vee-validate/issues/3398) ([a6e4c0a](https://github.com/logaretm/vee-validate/commit/a6e4c0ac580d4145c72118ac535bfa082c771068))
- expose form and field injection keys ([6034e66](https://github.com/logaretm/vee-validate/commit/6034e66836e0566e17f36744da19088aca33fbad))
## [4.4.6](https://github.com/logaretm/vee-validate/compare/v4.4.5...v4.4.6) (2021-07-08)
### Bug Fixes
- clean error message for singular fields after unmount ([#3385](https://github.com/logaretm/vee-validate/issues/3385)) ([4e81cce](https://github.com/logaretm/vee-validate/commit/4e81cce292380974728b952a2fa1724c1ea4f086))
- quit unsetting path if its already unset ([cfe45ba](https://github.com/logaretm/vee-validate/commit/cfe45ba38690ec27b5ee4e48a80336834a932a78))
- expose setters in composition API ([d79747d](https://github.com/logaretm/vee-validate/commit/d79747de4a25d1ced151d9bd5b767e815d7e32bf))
## [4.4.5](https://github.com/logaretm/vee-validate/compare/v4.4.4...v4.4.5) (2021-06-13)
## [4.4.4](https://github.com/logaretm/vee-validate/compare/v4.4.3...v4.4.4) (2021-06-05)
### Bug Fixes
- field with pre-register schema errors should be validated on register closes [#3342](https://github.com/logaretm/vee-validate/issues/3342) ([61c7359](https://github.com/logaretm/vee-validate/commit/61c73597b2e69c094e75c02476d825c5236710b5))
- make sure to create the container path if it exists while null or undefined ([79d3779](https://github.com/logaretm/vee-validate/commit/79d37798ccf2fef56714bdad4db553086df0ad48))
- make sure to create the container path if it exists while null or undefined ([79d3779](https://github.com/logaretm/vee-validate/commit/79d37798ccf2fef56714bdad4db553086df0ad48))
### Features
- expose setters in composition API ([61f942f](https://github.com/logaretm/vee-validate/commit/61f942f511e6fcceb10a74272ac845017ce88997))
## [4.4.3](https://github.com/logaretm/vee-validate/compare/v4.4.2...v4.4.3) (2021-06-02)
### Bug Fixes
- respect the Field bails option closes [#3332](https://github.com/logaretm/vee-validate/issues/3332) ([6679387](https://github.com/logaretm/vee-validate/commit/66793878e317f32f4759b3d01e27e3b9072eff67))
## [4.4.2](https://github.com/logaretm/vee-validate/compare/v4.4.1...v4.4.2) (2021-05-28)
### Bug Fixes
- clean up the old values path when fields exchange names fixes [#3325](https://github.com/logaretm/vee-validate/issues/3325) ([fe51c12](https://github.com/logaretm/vee-validate/commit/fe51c126ae6258ac0888ee47d9d01a27b889a5c1))
## [4.4.1](https://github.com/logaretm/vee-validate/compare/v4.4.0...v4.4.1) (2021-05-24)
### Bug Fixes
- forgot adding errors in useValidationForm ([d032d3b](https://github.com/logaretm/vee-validate/commit/d032d3b55438169fa87c18d89e073fffe3988d56))
- re-introduce the errors prop back on the form validation result closes [#3317](https://github.com/logaretm/vee-validate/issues/3317) ([b439a73](https://github.com/logaretm/vee-validate/commit/b439a73bf3c37298c251b74223984d54b8949a95))
# [4.4.0](https://github.com/logaretm/vee-validate/compare/v4.4.0-alpha.2...v4.4.0) (2021-05-23)
### Bug Fixes
- seperate model detection from event emitting closes [#3312](https://github.com/logaretm/vee-validate/issues/3312) ([5e72852](https://github.com/logaretm/vee-validate/commit/5e72852e80b971121d10422cf84085b07bb2d8fb))
# [4.4.0-alpha.2](https://github.com/logaretm/vee-validate/compare/v4.4.0-alpha.1...v4.4.0-alpha.2) (2021-05-14)
### Bug Fixes
- avoid clearing all errors before validating schema ([51c2e78](https://github.com/logaretm/vee-validate/commit/51c2e7890b87d971850dfc609c09d19b79a96fb6))
# [4.4.0-alpha.1](https://github.com/logaretm/vee-validate/compare/v4.4.0-alpha.0...v4.4.0-alpha.1) (2021-05-14)
### Bug Fixes
- minifier issue when handling await ([f206cac](https://github.com/logaretm/vee-validate/commit/f206cacd7e0d03a36fce5b236c23906997e0287b))
# [4.4.0-alpha.0](https://github.com/logaretm/vee-validate/compare/v4.3.6...v4.4.0-alpha.0) (2021-05-14)
### Bug Fixes
- deprecate handleInput and use handleChange for both events ([#3303](https://github.com/logaretm/vee-validate/issues/3303)) ([4cb10de](https://github.com/logaretm/vee-validate/commit/4cb10de0a5f589f72c82cdd4a8859b7f044ae84c))
### Features
- custom values and errors ([#3305](https://github.com/logaretm/vee-validate/issues/3305)) ([427802b](https://github.com/logaretm/vee-validate/commit/427802b94ea309d12df26ba51ac1b3a24e4e8d46))
## [4.3.6](https://github.com/logaretm/vee-validate/compare/v4.3.5...v4.3.6) (2021-05-08)
### Bug Fixes
- added a symbol to detect non passed props with Vue 3.1.x ([#3295](https://github.com/logaretm/vee-validate/issues/3295)) ([0663539](https://github.com/logaretm/vee-validate/commit/06635397424526c3a3c4a53f63322bbfd55000ee))
## [4.3.5](https://github.com/logaretm/vee-validate/compare/v4.3.4...v4.3.5) (2021-05-01)
### Bug Fixes
- priotrize self injections over parent injections closes [#3270](https://github.com/logaretm/vee-validate/issues/3270) ([07c1234](https://github.com/logaretm/vee-validate/commit/07c12341d7f2e25e41a56ea0d5e38e9a374ae84b))
## [4.3.4](https://github.com/logaretm/vee-validate/compare/v4.3.3...v4.3.4) (2021-04-27)
### Bug Fixes
- update the valid flag regardless of mode closes [#3284](https://github.com/logaretm/vee-validate/issues/3284) ([6594ad1](https://github.com/logaretm/vee-validate/commit/6594ad15e4423c6a7861da188560b06f98365d9d))
## [4.3.3](https://github.com/logaretm/vee-validate/compare/v4.3.2...v4.3.3) (2021-04-22)
### Features
- touch all fields on submit ([#3278](https://github.com/logaretm/vee-validate/issues/3278)) ([fc4e400](https://github.com/logaretm/vee-validate/commit/fc4e400f7d9349c1e82bba8412d13e0cf69be0e1))
## [4.3.2](https://github.com/logaretm/vee-validate/compare/v4.3.1...v4.3.2) (2021-04-21)
### Bug Fixes
- unwrap initial value with useField.resetField fixes [#3272](https://github.com/logaretm/vee-validate/issues/3272) ([#3274](https://github.com/logaretm/vee-validate/issues/3274)) ([f6e9574](https://github.com/logaretm/vee-validate/commit/f6e95741f31fc085f718e07d3b1f1adfe0229df6))
## [4.3.1](https://github.com/logaretm/vee-validate/compare/v4.3.0...v4.3.1) (2021-04-18)
### Bug Fixes
- give error message component a name ([b7dcebf](https://github.com/logaretm/vee-validate/commit/b7dcebfcd202538cf082314817f97c3b8e07fefb))
- minor perf enhancement by lazy evaulation of slot props ([a306b1b](https://github.com/logaretm/vee-validate/commit/a306b1b0047ec82eaf727a6e380856de077c4fbe))
# [4.3.0](https://github.com/logaretm/vee-validate/compare/v4.2.4...v4.3.0) (2021-04-07)
### Features
- added support for reactive schemas ([#3238](https://github.com/logaretm/vee-validate/issues/3238)) ([295d656](https://github.com/logaretm/vee-validate/commit/295d6567035bc3c452ad0f13fce13ff362b08005))
- added support for setting multiple field errors closes [#3117](https://github.com/logaretm/vee-validate/issues/3117) ([db0a6a0](https://github.com/logaretm/vee-validate/commit/db0a6a02cdc0fdab02a18e4756005c46dc06b1f8))
- support v-model.number ([#3252](https://github.com/logaretm/vee-validate/issues/3252)) ([8f491da](https://github.com/logaretm/vee-validate/commit/8f491da0b0998d0f7383a6a444d6aa498e3d96f4))
## [4.2.4](https://github.com/logaretm/vee-validate/compare/v4.2.3...v4.2.4) (2021-03-26)
### Bug Fixes
- validation triggered on value change ([10549b7](https://github.com/logaretm/vee-validate/commit/10549b77dc350cee4f198cb14e3fd12f61e12b80))
## [4.2.3](https://github.com/logaretm/vee-validate/compare/v4.2.2...v4.2.3) (2021-03-22)
### Bug Fixes
- prevent yup schema from setting non-interacted fields errors closes [#3228](https://github.com/logaretm/vee-validate/issues/3228) ([534f8b2](https://github.com/logaretm/vee-validate/commit/534f8b28850c9f28245a748f956d1358bb7cb2e1))
## [4.2.2](https://github.com/logaretm/vee-validate/compare/v4.2.1...v4.2.2) (2021-03-03)
### Bug Fixes
- ensure having a truthy fallback for fields missing in schema ([7cd6941](https://github.com/logaretm/vee-validate/commit/7cd694114403f7c252b6ba6b83c159110cdc58cf))
- handle pending validation runs during field unmounting ([ef5a7cc](https://github.com/logaretm/vee-validate/commit/ef5a7ccb269db8bbdee446e76dd60ebe8704b57e))
## [4.2.1](https://github.com/logaretm/vee-validate/compare/v4.2.0...v4.2.1) (2021-02-26)
### Bug Fixes
- added initial check against the field errors ([4288fb6](https://github.com/logaretm/vee-validate/commit/4288fb6291a3ed17d46569fd2b0baa690beb9cb1))
# [4.2.0](https://github.com/logaretm/vee-validate/compare/v4.1.20...v4.2.0) (2021-02-24)
**Note:** Version bump only for package vee-validate
## [4.1.20](https://github.com/logaretm/vee-validate/compare/v4.1.19...v4.1.20) (2021-02-24)
### Bug Fixes
- avoid setting checkbox values before registeration closes [#3183](https://github.com/logaretm/vee-validate/issues/3183) ([ab5f821](https://github.com/logaretm/vee-validate/commit/ab5f82103f8cfe5f5934a51057ce989ad30d0d44))
- change errors source to form closes [#3177](https://github.com/logaretm/vee-validate/issues/3177) ([7c13c92](https://github.com/logaretm/vee-validate/commit/7c13c92f477bc3d63067509fd9fec72964263f5d))
- use the issues array for zod error aggregation closes [#3184](https://github.com/logaretm/vee-validate/issues/3184) ([01b89e4](https://github.com/logaretm/vee-validate/commit/01b89e4940e997ef65dc950be3a13e0ffc18e881))
## [4.1.19](https://github.com/logaretm/vee-validate/compare/v4.1.18...v4.1.19) (2021-02-16)
### Bug Fixes
- use relative imports for shared type ([6790545](https://github.com/logaretm/vee-validate/commit/6790545dc9c35550d231fb14a310f3655dbc7256))
### Features
- improve typing for field yup schema ([c59f1f0](https://github.com/logaretm/vee-validate/commit/c59f1f01526b160a1081f276d732523ad9ab5ba2))
## [4.1.18](https://github.com/logaretm/vee-validate/compare/v4.1.17...v4.1.18) (2021-02-10)
### Bug Fixes
- avoid unsetting field value if switched with another closes [#3166](https://github.com/logaretm/vee-validate/issues/3166) ([f5a79fe](https://github.com/logaretm/vee-validate/commit/f5a79fe3b15f7437acf183c162e69178fd4fa7ec))
## [4.1.17](https://github.com/logaretm/vee-validate/compare/v3.2.0...v4.1.17) (2021-02-08)
### Bug Fixes
- add a handler for regex object params closes [#3073](https://github.com/logaretm/vee-validate/issues/3073) ([7a5e2eb](https://github.com/logaretm/vee-validate/commit/7a5e2ebf8303395372ae08ebcca55427a58faecb))
- added emits and onSubmit custom prop ([#3115](https://github.com/logaretm/vee-validate/issues/3115)) ([8f2c110](https://github.com/logaretm/vee-validate/commit/8f2c110f14add0fbd82a28a91601e89938144624))
- array radio fields not switching value correctly closes [#3141](https://github.com/logaretm/vee-validate/issues/3141) ([3d4efef](https://github.com/logaretm/vee-validate/commit/3d4efef68c63a3b57e2bf14fed913dbf841a7f5e))
- avoid returning undefined for form errors when form does not exist ([8cce17a](https://github.com/logaretm/vee-validate/commit/8cce17ae2846be912d51926c79e557ed8bb39582))
- avoid validating dependencies via watcheffect closes [#3156](https://github.com/logaretm/vee-validate/issues/3156) ([a7b91f6](https://github.com/logaretm/vee-validate/commit/a7b91f6e6c38f0b5262e2d4c1814154efa3b78c8))
- cast radio buttons value correctly closes [#3064](https://github.com/logaretm/vee-validate/issues/3064) ([3e0f9a4](https://github.com/logaretm/vee-validate/commit/3e0f9a47369edac32d0c8a068f8b61d8f761458f))
- clear out initial values for unregistered fields closes [#3060](https://github.com/logaretm/vee-validate/issues/3060) ([56206de](https://github.com/logaretm/vee-validate/commit/56206de995fe8f2eaca3e303ab6980784a3c95b1))
- correctly set the initial value from the v-model closes [#3107](https://github.com/logaretm/vee-validate/issues/3107) ([4bed9a8](https://github.com/logaretm/vee-validate/commit/4bed9a806323139d2f274e51b6bfe3de2190e54d))
- export submission types [#3112](https://github.com/logaretm/vee-validate/issues/3112) ([3f35167](https://github.com/logaretm/vee-validate/commit/3f351670da02364b0fb8e61198145dfa02dc59b9))
- fill the target rule params for message generators closes [#3077](https://github.com/logaretm/vee-validate/issues/3077) ([f5e1bd3](https://github.com/logaretm/vee-validate/commit/f5e1bd3cbc278a8588fa0c96af66823d82eefb8c))
- handle formless checkboxes value toggling closes [#3105](https://github.com/logaretm/vee-validate/issues/3105) ([504f30b](https://github.com/logaretm/vee-validate/commit/504f30bfcbcb1db710397ef05545b5008b0103fb))
- handle reactive field names and value swaps ([cf8051d](https://github.com/logaretm/vee-validate/commit/cf8051d3b92eb43103f4e7c682e615343239d717))
- missing export for useErrors helpers ([28537cc](https://github.com/logaretm/vee-validate/commit/28537cc547cf945b10adc485620ad226f71d60fc))
- pass down listeners to the input node closes [#3048](https://github.com/logaretm/vee-validate/issues/3048) ([2526a63](https://github.com/logaretm/vee-validate/commit/2526a63c2361e412b528cf370c03b39cb84b606d))
- prevent default reset behavior with handleReset ([a66df13](https://github.com/logaretm/vee-validate/commit/a66df13c3f39d84984581dc3c0ce368b052b6e8e))
- prevent resetForm from toggling checkbox value [#3084](https://github.com/logaretm/vee-validate/issues/3084) ([38778f9](https://github.com/logaretm/vee-validate/commit/38778f96471b6aa16fb020cfb1bde56b77a19cfb))
- react to validation events changes ([078e61b](https://github.com/logaretm/vee-validate/commit/078e61b17bd299a28752b733b494a0ddb368a812))
- reset meta correctly with resetField ([012658c](https://github.com/logaretm/vee-validate/commit/012658c082a00b1beeb53ce8cf3fcd91bc5b21ec))
- resolve component before rendering closes [#3014](https://github.com/logaretm/vee-validate/issues/3014) ([f8f481d](https://github.com/logaretm/vee-validate/commit/f8f481daad754a4b18a91e2b07b9549433d023f9))
- resolve path values with global rules closes [#3157](https://github.com/logaretm/vee-validate/issues/3157) ([beaf316](https://github.com/logaretm/vee-validate/commit/beaf3168490aee585542a19c9a910d9493e78208))
- set field initial value on the fid lookup closes [#3128](https://github.com/logaretm/vee-validate/issues/3128) ([650d5cf](https://github.com/logaretm/vee-validate/commit/650d5cf9f75f9b9247fc813acf2aff4089f05415))
- support dynamic labels closes [#3053](https://github.com/logaretm/vee-validate/issues/3053) ([31b2238](https://github.com/logaretm/vee-validate/commit/31b223878bda75c3150217ea80bb878d8dc1e320))
- typing issue from [#3134](https://github.com/logaretm/vee-validate/issues/3134) ([29e5cff](https://github.com/logaretm/vee-validate/commit/29e5cffc654a2502f29fe616eda088de958e02d3))
- use the custom injection fn for initial field values ([38cd32b](https://github.com/logaretm/vee-validate/commit/38cd32bd3ae9f263510d0ab4a1713c6a9a2011af))
### Features
- add submit count state ([#3070](https://github.com/logaretm/vee-validate/issues/3070)) ([a7fe71e](https://github.com/logaretm/vee-validate/commit/a7fe71e01072dacfeb7baa80eebf0b8d7d9d3ffd))
- added context awareness to composition helpers for fields ([b59fe88](https://github.com/logaretm/vee-validate/commit/b59fe88197ce3cd587edfc33666bcb676030fa61))
- added context information to validation functions ([7e6675d](https://github.com/logaretm/vee-validate/commit/7e6675db6a103eae33cbb6d959621b4549af66b2))
- added test cases and fallbacks for unresolved cases ([71bda03](https://github.com/logaretm/vee-validate/commit/71bda03a72a9e8f27bc0b7620ce78ba48a194309))
- added the useResetForm helper ([4c57715](https://github.com/logaretm/vee-validate/commit/4c57715ab621526a5c987cff9a53cb5b7af2155a))
- added unchecked-value prop to the field component ([af910c3](https://github.com/logaretm/vee-validate/commit/af910c3f3c6343538658ab90f356dd8957bb6a1a))
- added useErrors and useField error helpers ([4cda2fe](https://github.com/logaretm/vee-validate/commit/4cda2fea6428a7f10b53b633daa46252bf779289))
- added useIsDirty helpers ([6b7e4ab](https://github.com/logaretm/vee-validate/commit/6b7e4abfcdb2f0eebe0dd8c62785178fbee8d25f))
- added useIsSubmitting helper ([7a58fd8](https://github.com/logaretm/vee-validate/commit/7a58fd840425a5e09f625054389aebbb096c2e1a))
- added useIsTouched helpers ([fdb2d5a](https://github.com/logaretm/vee-validate/commit/fdb2d5a3c7c82d55aefef2deb95823e1ba6ba93d))
- added useIsValid helpers ([26fbb29](https://github.com/logaretm/vee-validate/commit/26fbb29467bab66c159e98793e4269768845b938))
- added useSubmitCount helper ([c4a6dea](https://github.com/logaretm/vee-validate/commit/c4a6deae68b588494ff0e2477d7ec2b9302c6f09))
- added useSubmitForm hook ([#3101](https://github.com/logaretm/vee-validate/issues/3101)) ([d042882](https://github.com/logaretm/vee-validate/commit/d04288295a090328f7022641799dbaee1c404b91))
- added useValidateField and useValidateForm helpers ([62355a8](https://github.com/logaretm/vee-validate/commit/62355a8db6477562f0689208669d0a1be63de03c))
- added validate field function to form and useForm ([#3133](https://github.com/logaretm/vee-validate/issues/3133)) ([926bed1](https://github.com/logaretm/vee-validate/commit/926bed1bded6990f17a51ca68e9aa47c339a80f2))
- added validate method on the form ref instance closes [#3030](https://github.com/logaretm/vee-validate/issues/3030) ([ed0faff](https://github.com/logaretm/vee-validate/commit/ed0faffd79615830a9f7c247abf1eae2254ee3f9))
- added validation trigger config per component closes [#3066](https://github.com/logaretm/vee-validate/issues/3066) ([f0e30a2](https://github.com/logaretm/vee-validate/commit/f0e30a2cc79843040028b7070bc88846f2447c85))
- added value change support for native multi select ([#3146](https://github.com/logaretm/vee-validate/issues/3146)) ([0601586](https://github.com/logaretm/vee-validate/commit/0601586eabbf76fac9d4fa79e6ae1d86fd3a0e37))
- added values helpers ([e0f16d6](https://github.com/logaretm/vee-validate/commit/e0f16d6f5c01c7b1e4e8832b3490b8cc7e7b8aa7))
- added warnings for non existent fields and allow reactive paths ([4182d2f](https://github.com/logaretm/vee-validate/commit/4182d2f1716d712962dff3b6be27916e311e5870))
- avoid watching rules when passed as functions ([539f753](https://github.com/logaretm/vee-validate/commit/539f7535bf935e62030b83f8c7b19e95256bcc52))
- dont render any tags when no message exists closes [#3118](https://github.com/logaretm/vee-validate/issues/3118) ([92eba41](https://github.com/logaretm/vee-validate/commit/92eba41a2cdef643bc2af4c2a0366382cdffc625))
- enhance ts typing for form functions ([8f7d8e8](https://github.com/logaretm/vee-validate/commit/8f7d8e89864b5df5255cbe5e88713022537ec236))
- enhance useField types ([dcb8049](https://github.com/logaretm/vee-validate/commit/dcb80495ffdefb2e789887e1d40b2c4a57ade257))
- enrich form validation results ([0c84c80](https://github.com/logaretm/vee-validate/commit/0c84c809fa729cd2b8620329305b4da0a45e9eaf))
- export some internal types closes [#3065](https://github.com/logaretm/vee-validate/issues/3065) ([b88dffd](https://github.com/logaretm/vee-validate/commit/b88dffdb4c638bd439d093f653bfa1915f4ad9be))
- field.reset() should reset the field to its initial value ([a11f1b7](https://github.com/logaretm/vee-validate/commit/a11f1b7dda3deafe683e13a00b28a7fab09b82cb))
- implement similar reset API for fields ([38c3923](https://github.com/logaretm/vee-validate/commit/38c392320b4154061ccc5d70dde11517357467e8))
- new reset API ([6983738](https://github.com/logaretm/vee-validate/commit/69837383e42636c24d6ee7d15cb5fe8e98f2ac55))
- rename reset methods to be more consistent ([3a0dc4d](https://github.com/logaretm/vee-validate/commit/3a0dc4db2f1a00a8a4f3940ddd452d9b1369cace))
- update docs ([0f5ac98](https://github.com/logaretm/vee-validate/commit/0f5ac98153f74bdbbd1d9f5090e4dc4b438c998f))
- use internal yup types ([#3123](https://github.com/logaretm/vee-validate/issues/3123)) ([7554bfc](https://github.com/logaretm/vee-validate/commit/7554bfc49b0103f218f901148bc06e6a455f09b0))
- use resolveDynamicComponent instead ([f1b5f89](https://github.com/logaretm/vee-validate/commit/f1b5f896840ed159df06cf59badd83282496b777))
### Performance Improvements
- cache field props in a computed property ([d266878](https://github.com/logaretm/vee-validate/commit/d2668787d0ffcab5ba2e8be048ee7334d2b0f9e7))
- cache form slot props in a computed property ([49fa2c1](https://github.com/logaretm/vee-validate/commit/49fa2c1b4a337149c533c13725d2e71bb2664706))
## [4.1.16](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.15...vee-validate@4.1.16) (2021-02-07)
**Note:** Version bump only for package vee-validate
## [4.1.15](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.14...vee-validate@4.1.15) (2021-02-07)
### Bug Fixes
- resolve path values with global rules closes [#3157](https://github.com/logaretm/vee-validate/issues/3157) ([beaf316](https://github.com/logaretm/vee-validate/commit/beaf3168490aee585542a19c9a910d9493e78208))
## [4.1.14](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.13...vee-validate@4.1.14) (2021-02-06)
### Bug Fixes
- avoid validating dependencies via watcheffect closes [#3156](https://github.com/logaretm/vee-validate/issues/3156) ([a7b91f6](https://github.com/logaretm/vee-validate/commit/a7b91f6e6c38f0b5262e2d4c1814154efa3b78c8))
## [4.1.13](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.12...vee-validate@4.1.13) (2021-02-01)
### Features
- added value change support for native multi select ([#3146](https://github.com/logaretm/vee-validate/issues/3146)) ([0601586](https://github.com/logaretm/vee-validate/commit/0601586eabbf76fac9d4fa79e6ae1d86fd3a0e37))
## [4.1.12](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.11...vee-validate@4.1.12) (2021-01-26)
### Bug Fixes
- array radio fields not switching value correctly closes [#3141](https://github.com/logaretm/vee-validate/issues/3141) ([3d4efef](https://github.com/logaretm/vee-validate/commit/3d4efef68c63a3b57e2bf14fed913dbf841a7f5e))
- clear out initial values for unregistered fields closes [#3060](https://github.com/logaretm/vee-validate/issues/3060) ([56206de](https://github.com/logaretm/vee-validate/commit/56206de995fe8f2eaca3e303ab6980784a3c95b1))
- typing issue from [#3134](https://github.com/logaretm/vee-validate/issues/3134) ([29e5cff](https://github.com/logaretm/vee-validate/commit/29e5cffc654a2502f29fe616eda088de958e02d3))
## [4.1.11](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.10...vee-validate@4.1.11) (2021-01-19)
### Features
- added validate field function to form and useForm ([#3133](https://github.com/logaretm/vee-validate/issues/3133)) ([926bed1](https://github.com/logaretm/vee-validate/commit/926bed1bded6990f17a51ca68e9aa47c339a80f2))
## [4.1.10](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.9...vee-validate@4.1.10) (2021-01-17)
### Bug Fixes
- set field initial value on the fid lookup closes [#3128](https://github.com/logaretm/vee-validate/issues/3128) ([650d5cf](https://github.com/logaretm/vee-validate/commit/650d5cf9f75f9b9247fc813acf2aff4089f05415))
## [4.1.9](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.8...vee-validate@4.1.9) (2021-01-13)
### Features
- use internal yup types ([#3123](https://github.com/logaretm/vee-validate/issues/3123)) ([7554bfc](https://github.com/logaretm/vee-validate/commit/7554bfc49b0103f218f901148bc06e6a455f09b0))
## [4.1.8](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.7...vee-validate@4.1.8) (2021-01-12)
### Features
- dont render any tags when no message exists closes [#3118](https://github.com/logaretm/vee-validate/issues/3118) ([92eba41](https://github.com/logaretm/vee-validate/commit/92eba41a2cdef643bc2af4c2a0366382cdffc625))
## [4.1.7](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.6...vee-validate@4.1.7) (2021-01-12)
### Bug Fixes
- export submission types [#3112](https://github.com/logaretm/vee-validate/issues/3112) ([3f35167](https://github.com/logaretm/vee-validate/commit/3f351670da02364b0fb8e61198145dfa02dc59b9))
## [4.1.6](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.5...vee-validate@4.1.6) (2021-01-11)
### Bug Fixes
- added emits and onSubmit custom prop ([#3115](https://github.com/logaretm/vee-validate/issues/3115)) ([8f2c110](https://github.com/logaretm/vee-validate/commit/8f2c110f14add0fbd82a28a91601e89938144624))
## [4.1.5](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.4...vee-validate@4.1.5) (2021-01-05)
### Bug Fixes
- correctly set the initial value from the v-model closes [#3107](https://github.com/logaretm/vee-validate/issues/3107) ([4bed9a8](https://github.com/logaretm/vee-validate/commit/4bed9a806323139d2f274e51b6bfe3de2190e54d))
## [4.1.4](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.3...vee-validate@4.1.4) (2021-01-04)
### Bug Fixes
- handle formless checkboxes value toggling closes [#3105](https://github.com/logaretm/vee-validate/issues/3105) ([504f30b](https://github.com/logaretm/vee-validate/commit/504f30bfcbcb1db710397ef05545b5008b0103fb))
## [4.1.3](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.2...vee-validate@4.1.3) (2021-01-02)
### Features
- enhance useField types ([dcb8049](https://github.com/logaretm/vee-validate/commit/dcb80495ffdefb2e789887e1d40b2c4a57ade257))
## [4.1.2](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.1...vee-validate@4.1.2) (2020-12-26)
### Features
- added useSubmitForm hook ([#3101](https://github.com/logaretm/vee-validate/issues/3101)) ([d042882](https://github.com/logaretm/vee-validate/commit/d04288295a090328f7022641799dbaee1c404b91))
## [4.1.1](https://github.com/logaretm/vee-validate/compare/vee-validate@4.1.0...vee-validate@4.1.1) (2020-12-18)
### Bug Fixes
- missing export for useErrors helpers ([28537cc](https://github.com/logaretm/vee-validate/commit/28537cc547cf945b10adc485620ad226f71d60fc))
# [4.1.0](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.7...vee-validate@4.1.0) (2020-12-18)
### Bug Fixes
- avoid returning undefined for form errors when form does not exist ([8cce17a](https://github.com/logaretm/vee-validate/commit/8cce17ae2846be912d51926c79e557ed8bb39582))
### Features
- added context awareness to composition helpers for fields ([b59fe88](https://github.com/logaretm/vee-validate/commit/b59fe88197ce3cd587edfc33666bcb676030fa61))
- added test cases and fallbacks for unresolved cases ([71bda03](https://github.com/logaretm/vee-validate/commit/71bda03a72a9e8f27bc0b7620ce78ba48a194309))
- added the useResetForm helper ([4c57715](https://github.com/logaretm/vee-validate/commit/4c57715ab621526a5c987cff9a53cb5b7af2155a))
- added useErrors and useField error helpers ([4cda2fe](https://github.com/logaretm/vee-validate/commit/4cda2fea6428a7f10b53b633daa46252bf779289))
- added useIsDirty helpers ([6b7e4ab](https://github.com/logaretm/vee-validate/commit/6b7e4abfcdb2f0eebe0dd8c62785178fbee8d25f))
- added useIsSubmitting helper ([7a58fd8](https://github.com/logaretm/vee-validate/commit/7a58fd840425a5e09f625054389aebbb096c2e1a))
- added useIsTouched helpers ([fdb2d5a](https://github.com/logaretm/vee-validate/commit/fdb2d5a3c7c82d55aefef2deb95823e1ba6ba93d))
- added useIsValid helpers ([26fbb29](https://github.com/logaretm/vee-validate/commit/26fbb29467bab66c159e98793e4269768845b938))
- added useSubmitCount helper ([c4a6dea](https://github.com/logaretm/vee-validate/commit/c4a6deae68b588494ff0e2477d7ec2b9302c6f09))
- added useValidateField and useValidateForm helpers ([62355a8](https://github.com/logaretm/vee-validate/commit/62355a8db6477562f0689208669d0a1be63de03c))
- added values helpers ([e0f16d6](https://github.com/logaretm/vee-validate/commit/e0f16d6f5c01c7b1e4e8832b3490b8cc7e7b8aa7))
- added warnings for non existent fields and allow reactive paths ([4182d2f](https://github.com/logaretm/vee-validate/commit/4182d2f1716d712962dff3b6be27916e311e5870))
- enhance ts typing for form functions ([8f7d8e8](https://github.com/logaretm/vee-validate/commit/8f7d8e89864b5df5255cbe5e88713022537ec236))
- enrich form validation results ([0c84c80](https://github.com/logaretm/vee-validate/commit/0c84c809fa729cd2b8620329305b4da0a45e9eaf))
- export some internal types closes [#3065](https://github.com/logaretm/vee-validate/issues/3065) ([b88dffd](https://github.com/logaretm/vee-validate/commit/b88dffdb4c638bd439d093f653bfa1915f4ad9be))
## [4.0.7](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.6...vee-validate@4.0.7) (2020-12-18)
### Bug Fixes
- react to validation events changes ([078e61b](https://github.com/logaretm/vee-validate/commit/078e61b17bd299a28752b733b494a0ddb368a812))
## [4.0.6](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.5...vee-validate@4.0.6) (2020-12-15)
### Bug Fixes
- prevent default reset behavior with handleReset ([a66df13](https://github.com/logaretm/vee-validate/commit/a66df13c3f39d84984581dc3c0ce368b052b6e8e))
- prevent resetForm from toggling checkbox value [#3084](https://github.com/logaretm/vee-validate/issues/3084) ([38778f9](https://github.com/logaretm/vee-validate/commit/38778f96471b6aa16fb020cfb1bde56b77a19cfb))
### Features
- added unchecked-value prop to the field component ([af910c3](https://github.com/logaretm/vee-validate/commit/af910c3f3c6343538658ab90f356dd8957bb6a1a))
### Performance Improvements
- cache field props in a computed property ([d266878](https://github.com/logaretm/vee-validate/commit/d2668787d0ffcab5ba2e8be048ee7334d2b0f9e7))
- cache form slot props in a computed property ([49fa2c1](https://github.com/logaretm/vee-validate/commit/49fa2c1b4a337149c533c13725d2e71bb2664706))
## [4.0.5](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.4...vee-validate@4.0.5) (2020-12-12)
### Features
- added validation trigger config per component closes [#3066](https://github.com/logaretm/vee-validate/issues/3066) ([f0e30a2](https://github.com/logaretm/vee-validate/commit/f0e30a2cc79843040028b7070bc88846f2447c85))
## [4.0.4](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.3...vee-validate@4.0.4) (2020-12-09)
### Bug Fixes
- add a handler for regex object params closes [#3073](https://github.com/logaretm/vee-validate/issues/3073) ([7a5e2eb](https://github.com/logaretm/vee-validate/commit/7a5e2ebf8303395372ae08ebcca55427a58faecb))
- fill the target rule params for message generators closes [#3077](https://github.com/logaretm/vee-validate/issues/3077) ([f5e1bd3](https://github.com/logaretm/vee-validate/commit/f5e1bd3cbc278a8588fa0c96af66823d82eefb8c))
### Features
- add submit count state ([#3070](https://github.com/logaretm/vee-validate/issues/3070)) ([a7fe71e](https://github.com/logaretm/vee-validate/commit/a7fe71e01072dacfeb7baa80eebf0b8d7d9d3ffd))
## [4.0.3](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.2...vee-validate@4.0.3) (2020-12-05)
### Bug Fixes
- cast radio buttons value correctly closes [#3064](https://github.com/logaretm/vee-validate/issues/3064) ([3e0f9a4](https://github.com/logaretm/vee-validate/commit/3e0f9a47369edac32d0c8a068f8b61d8f761458f))
- reset meta correctly with resetField ([012658c](https://github.com/logaretm/vee-validate/commit/012658c082a00b1beeb53ce8cf3fcd91bc5b21ec))
- use the custom injection fn for initial field values ([38cd32b](https://github.com/logaretm/vee-validate/commit/38cd32bd3ae9f263510d0ab4a1713c6a9a2011af))
## [4.0.2](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.1...vee-validate@4.0.2) (2020-11-27)
### Bug Fixes
- support dynamic labels closes [#3053](https://github.com/logaretm/vee-validate/issues/3053) ([31b2238](https://github.com/logaretm/vee-validate/commit/31b223878bda75c3150217ea80bb878d8dc1e320))
## [4.0.1](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0...vee-validate@4.0.1) (2020-11-25)
### Bug Fixes
- pass down listeners to the input node closes [#3048](https://github.com/logaretm/vee-validate/issues/3048) ([2526a63](https://github.com/logaretm/vee-validate/commit/2526a63c2361e412b528cf370c03b39cb84b606d))
# [4.0.0](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.19...vee-validate@4.0.0) (2020-11-16)
### Features
- added validate method on the form ref instance closes [#3030](https://github.com/logaretm/vee-validate/issues/3030) ([ed0faff](https://github.com/logaretm/vee-validate/commit/ed0faffd79615830a9f7c247abf1eae2254ee3f9))
- update docs ([0f5ac98](https://github.com/logaretm/vee-validate/commit/0f5ac98153f74bdbbd1d9f5090e4dc4b438c998f))
# [4.0.0-beta.19](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.18...vee-validate@4.0.0-beta.19) (2020-11-07)
### Bug Fixes
- resolve component before rendering closes [#3014](https://github.com/logaretm/vee-validate/issues/3014) ([f8f481d](https://github.com/logaretm/vee-validate/commit/f8f481daad754a4b18a91e2b07b9549433d023f9))
### Features
- field.reset() should reset the field to its initial value ([a11f1b7](https://github.com/logaretm/vee-validate/commit/a11f1b7dda3deafe683e13a00b28a7fab09b82cb))
- implement similar reset API for fields ([38c3923](https://github.com/logaretm/vee-validate/commit/38c392320b4154061ccc5d70dde11517357467e8))
- new reset API ([6983738](https://github.com/logaretm/vee-validate/commit/69837383e42636c24d6ee7d15cb5fe8e98f2ac55))
- rename reset methods to be more consistent ([3a0dc4d](https://github.com/logaretm/vee-validate/commit/3a0dc4db2f1a00a8a4f3940ddd452d9b1369cace))
- use resolveDynamicComponent instead ([f1b5f89](https://github.com/logaretm/vee-validate/commit/f1b5f896840ed159df06cf59badd83282496b777))
# [4.0.0-beta.18](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.17...vee-validate@4.0.0-beta.18) (2020-11-05)
### Bug Fixes
- handle reactive field names and value swaps ([cf8051d](https://github.com/logaretm/vee-validate/commit/cf8051d3b92eb43103f4e7c682e615343239d717))
### Features
- avoid watching rules when passed as functions ([539f753](https://github.com/logaretm/vee-validate/commit/539f7535bf935e62030b83f8c7b19e95256bcc52))
# [4.0.0-beta.17](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.16...vee-validate@4.0.0-beta.17) (2020-11-04)
### Features
- added context information to validation functions ([7e6675d](https://github.com/logaretm/vee-validate/commit/7e6675db6a103eae33cbb6d959621b4549af66b2))
# [4.0.0-beta.16](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.15...vee-validate@4.0.0-beta.16) (2020-10-29)
### Features
- initial form meta ([#3003](https://github.com/logaretm/vee-validate/issues/3003)) ([f7fd407](https://github.com/logaretm/vee-validate/commit/f7fd407cf0e6dad9c92585a4a82594af962de8f4))
# [4.0.0-beta.15](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.14...vee-validate@4.0.0-beta.15) (2020-10-28)
### Features
- add `initialErrors` prop ([#3002](https://github.com/logaretm/vee-validate/issues/3002)) ([9850b3f](https://github.com/logaretm/vee-validate/commit/9850b3f2f1c1739f31ff05f32890196097ef426e))
# [4.0.0-beta.14](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.13...vee-validate@4.0.0-beta.14) (2020-10-26)
### Features
- deprecate the disabled prop ([29f4dca](https://github.com/logaretm/vee-validate/commit/29f4dca6bd4d02281bf71f8ed4c836f30e0e46d0))
- use injection keys to type inject API ([79207b2](https://github.com/logaretm/vee-validate/commit/79207b25a23782acc527394af23703b138c881db))
# [4.0.0-beta.13](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.12...vee-validate@4.0.0-beta.13) (2020-10-23)
### Features
- `useForm` Field types ([#2996](https://github.com/logaretm/vee-validate/issues/2996)) ([727f229](https://github.com/logaretm/vee-validate/commit/727f2295d421ef92620995a356bcaee53770299b))
# [4.0.0-beta.12](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.11...vee-validate@4.0.0-beta.12) (2020-10-21)
### Bug Fixes
- upgrade to Vue 3.0.2 and fix broken cases ([ede7214](https://github.com/logaretm/vee-validate/commit/ede72147bd998b888825457541ff964df5e7a2fd))
# [4.0.0-beta.11](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.10...vee-validate@4.0.0-beta.11) (2020-10-18)
### Bug Fixes
- provide yup object schema type to the useForm closes [#2988](https://github.com/logaretm/vee-validate/issues/2988) ([29157f7](https://github.com/logaretm/vee-validate/commit/29157f7a36dd14dc9a6c411ffddbbeb9d3749f6e))
# [4.0.0-beta.10](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.9...vee-validate@4.0.0-beta.10) (2020-10-15)
### Bug Fixes
- properly initialize initial values closes [#2978](https://github.com/logaretm/vee-validate/issues/2978) ([c0ba699](https://github.com/logaretm/vee-validate/commit/c0ba699757cbd2c3ab409d5ee8d2fa3a205907d8))
- typos in test descriptions ([#2970](https://github.com/logaretm/vee-validate/issues/2970)) ([a0132df](https://github.com/logaretm/vee-validate/commit/a0132dfcc2aab4ba48f175b846228544c80fe4a8))
# [4.0.0-beta.9](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.8...vee-validate@4.0.0-beta.9) (2020-10-14)
### Bug Fixes
- improve useForm meta types ([#2963](https://github.com/logaretm/vee-validate/issues/2963)) ([6b46047](https://github.com/logaretm/vee-validate/commit/6b46047278633a095243fcce4ba94ddd94e08c11))
### Features
- meta setters ([#2967](https://github.com/logaretm/vee-validate/issues/2967)) ([5036e13](https://github.com/logaretm/vee-validate/commit/5036e13e0f5974589387746398446fa5f318dc0d))
# [4.0.0-beta.8](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.7...vee-validate@4.0.0-beta.8) (2020-10-12)
### Features
- added handleInput and handleBlur to field scoped slot props ([69d5833](https://github.com/logaretm/vee-validate/commit/69d5833e85d1f455fa43de83251c634b8efa89fa))
- expose reset() on the form controller object ([3229ee7](https://github.com/logaretm/vee-validate/commit/3229ee722e8df5f2e79155e1a4e5ec4729dff726))
- new meta tags API ([#2958](https://github.com/logaretm/vee-validate/issues/2958)) ([7494bfc](https://github.com/logaretm/vee-validate/commit/7494bfc6533fa29bd0668294d694aca96721d52d))
- remove aria attributes and leave it to userland ([365d825](https://github.com/logaretm/vee-validate/commit/365d825b9bc3e2955b31b941f12d5856c9be8bfe))
- remove valid fields from errors mapping ([1eee524](https://github.com/logaretm/vee-validate/commit/1eee52407f4d7156a541811053b529f7540c931c))
# [4.0.0-beta.7](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.6...vee-validate@4.0.0-beta.7) (2020-10-10)
### Bug Fixes
- avoid accessing properties in form directly to avoid warninings ([c5627af](https://github.com/logaretm/vee-validate/commit/c5627af64b252c8f7ec18e7f0a4296f315c7bf99))
- update the handleSubmit signature ([#2954](https://github.com/logaretm/vee-validate/issues/2954)) ([d17517d](https://github.com/logaretm/vee-validate/commit/d17517daf692c48ac4fa1cfce5ac0bb051e73d2e))
# [4.0.0-beta.6](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.5...vee-validate@4.0.0-beta.6) (2020-10-10)
### Features
- form and fields values setters ([#2949](https://github.com/logaretm/vee-validate/issues/2949)) ([cc2cb41](https://github.com/logaretm/vee-validate/commit/cc2cb413dfa23aefeb8be6e4bf7fa17927e0e1ce))
- reactive initial form values ([#2946](https://github.com/logaretm/vee-validate/issues/2946)) ([ac2c68f](https://github.com/logaretm/vee-validate/commit/ac2c68fdbfb7062674f8294a1f0f6d33fc8792b3))
# [4.0.0-beta.5](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.4...vee-validate@4.0.0-beta.5) (2020-10-08)
### Bug Fixes
- sync model value on input closes [#2944](https://github.com/logaretm/vee-validate/issues/2944) ([5f77fa9](https://github.com/logaretm/vee-validate/commit/5f77fa931bdb01cc6415c4edd1dcaa7eb7e1a0d2))
# [4.0.0-beta.4](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.3...vee-validate@4.0.0-beta.4) (2020-10-08)
### Bug Fixes
- prevent recursive re-render model update ([#2943](https://github.com/logaretm/vee-validate/issues/2943)) ([9fa319f](https://github.com/logaretm/vee-validate/commit/9fa319f0e42f8225565e2f54d1bebd07898574a4))
- set falsy initial values ([4b29e72](https://github.com/logaretm/vee-validate/commit/4b29e721f06fe30a5f7207935ae3d6291ea464fe))
- use validateField instead of onChange handler for blur events ([636077a](https://github.com/logaretm/vee-validate/commit/636077a35183b33372825cd4075a143383ed0c68))
# [4.0.0-beta.3](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.2...vee-validate@4.0.0-beta.3) (2020-10-06)
### Bug Fixes
- avoid toggling checkbox `checked` attr in `handleChange` ([#2937](https://github.com/logaretm/vee-validate/issues/2937)) ([b8dafbd](https://github.com/logaretm/vee-validate/commit/b8dafbdb75e305f00c6effc21391f364db9236d0))
### Features
- added `validateOnMount` prop to `Field` and `Form` components ([#2938](https://github.com/logaretm/vee-validate/issues/2938)) ([3a0d878](https://github.com/logaretm/vee-validate/commit/3a0d878e453163f305acc87c5d4c93812f77f340))
# [4.0.0-beta.2](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.1...vee-validate@4.0.0-beta.2) (2020-10-05)
### Features
- field labels ([#2933](https://github.com/logaretm/vee-validate/issues/2933)) ([513137f](https://github.com/logaretm/vee-validate/commit/513137f28c6266d3e752448b00eb1c3d410ae474))
# [4.0.0-beta.1](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-beta.0...vee-validate@4.0.0-beta.1) (2020-10-02)
### Bug Fixes
- avoid binding the value to file inputs ([02a2745](https://github.com/logaretm/vee-validate/commit/02a27456ba961540a882ec4f94a24a271b0ea3a3))
# [4.0.0-beta.0](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.14...vee-validate@4.0.0-beta.0) (2020-10-01)
### Bug Fixes
- make sure to unwrap initial value ([0298a92](https://github.com/logaretm/vee-validate/commit/0298a926de5536154a69088b55cb688133638a39))
### Features
- validation triggers ([#2927](https://github.com/logaretm/vee-validate/issues/2927)) ([e725f43](https://github.com/logaretm/vee-validate/commit/e725f43a47dd1993699c0450fd8777aa921c7a49))
# [4.0.0-alpha.14](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.13...vee-validate@4.0.0-alpha.14) (2020-09-20)
### Bug Fixes
- **core:** in case of radio or checkbox explicitly set initialValue ([#2907](https://github.com/logaretm/vee-validate/issues/2907)) ([e45ec82](https://github.com/logaretm/vee-validate/commit/e45ec82ee8fa6fabd4d3012a03ba8f9b72854631))
### Features
- use symbols to avoid provide/inject conflicts ([cc80032](https://github.com/logaretm/vee-validate/commit/cc8003213c34a8a33d84802f2c93598e1ac3c6f0))
- workspaces ([#2904](https://github.com/logaretm/vee-validate/issues/2904)) ([0c05f94](https://github.com/logaretm/vee-validate/commit/0c05f9486a73744273de6816f00f689916aba91c))
# [4.0.0-alpha.13](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.12...vee-validate@4.0.0-alpha.13) (2020-09-16)
### Features
- nested objects/arrays ([#2897](https://github.com/logaretm/vee-validate/issues/2897)) ([8d161a1](https://github.com/logaretm/vee-validate/commit/8d161a137a65c90ec8f7189743be24802231cf29))
# [4.0.0-alpha.12](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.11...vee-validate@4.0.0-alpha.12) (2020-09-15)
### Features
- cast single checkboxes values to booleans closes [#2889](https://github.com/logaretm/vee-validate/issues/2889) ([7a08184](https://github.com/logaretm/vee-validate/commit/7a081845ac6a4bc09c51e52c5996b65814a48baf))
- invoke generateMessage handler for local functions closes [#2893](https://github.com/logaretm/vee-validate/issues/2893) ([e9fe773](https://github.com/logaretm/vee-validate/commit/e9fe77365877edda51548c9539ec085fff91586b))
# [4.0.0-alpha.11](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.10...vee-validate@4.0.0-alpha.11) (2020-09-02)
**Note:** Version bump only for package vee-validate
# [4.0.0-alpha.10](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.9...vee-validate@4.0.0-alpha.10) (2020-08-29)
### Bug Fixes
- added temporary fix for [#2873](https://github.com/logaretm/vee-validate/issues/2873) with form meta ([6e1bf17](https://github.com/logaretm/vee-validate/commit/6e1bf176e7ba5c890afab6c11731dac54924d39b))
# [4.0.0-alpha.9](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.8...vee-validate@4.0.0-alpha.9) (2020-08-28)
### Bug Fixes
- adapt to the breaking changes in #vue-1682 closes [#2873](https://github.com/logaretm/vee-validate/issues/2873) ([05f7df3](https://github.com/logaretm/vee-validate/commit/05f7df313f9f47ca79bdf99be35cb2ccfea0c346))
# [4.0.0-alpha.8](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.7...vee-validate@4.0.0-alpha.8) (2020-08-13)
### Bug Fixes
- detect initial values from v-model ([e566302](https://github.com/logaretm/vee-validate/commit/e566302bb485353f03baccdf98f35a255605e15d))
- handle unmount issue when removed value is falsy for checkboxes ([b6393f4](https://github.com/logaretm/vee-validate/commit/b6393f4adce9346cadaf1f423dca29645bf3c2f1))
- initial array values for checkboxes not populated correctly in form ([fb99edc](https://github.com/logaretm/vee-validate/commit/fb99edc309c26f9be2baa71f90ec1ac59ddcdc9d))
- umounting group of checkbox issues ([8c77af5](https://github.com/logaretm/vee-validate/commit/8c77af52955b235a6bd2357a35036097e109e37f))
### Features
- added basic v-model support ([c93d125](https://github.com/logaretm/vee-validate/commit/c93d125b4d6c0af8365920ee577c883493e60648))
- merge ctx.attrs to any rendered root node ([5c9979c](https://github.com/logaretm/vee-validate/commit/5c9979ce45d4ab10cd019ad0c25159e013198301))
- sync the model value with inner value ([57d7923](https://github.com/logaretm/vee-validate/commit/57d79232f490be3525c2576ef83376a2f5643386))
# [4.0.0-alpha.7](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.6...vee-validate@4.0.0-alpha.7) (2020-08-04)
### Bug Fixes
- avoid removing array value for a non-group field closes [#2847](https://github.com/logaretm/vee-validate/issues/2847) ([69f2092](https://github.com/logaretm/vee-validate/commit/69f2092db7d53665986dd384cae561d1b13bd8f5))
- bails affects yup non-object validators ([a50645b](https://github.com/logaretm/vee-validate/commit/a50645b1c0206d0e7d85ec6681ff6dc224536fa2))
- initial values on HTML inputs ([c4f4eb9](https://github.com/logaretm/vee-validate/commit/c4f4eb9fe97b13fedb93ac760614eb53c177ffb3))
### Features
- deprecate the skipOptional config ([e62f5ea](https://github.com/logaretm/vee-validate/commit/e62f5ea6d31e82ac9f257627e8544431b933c4f9))
# [4.0.0-alpha.6](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.5...vee-validate@4.0.0-alpha.6) (2020-07-27)
### Bug Fixes
- render input tags by default for the field component ([858c47b](https://github.com/logaretm/vee-validate/commit/858c47b4a7fa740611abaf026e6e5db6cdb41050))
# [4.0.0-alpha.5](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.4...vee-validate@4.0.0-alpha.5) (2020-07-24)
### Bug Fixes
- unregister fields once they are unmounted ([0d601cb](https://github.com/logaretm/vee-validate/commit/0d601cb60b3ba907e6c0d73dd129c0c7b086316e))
### Features
- **v4:** add checkbox and radio HTML input support ([#2835](https://github.com/logaretm/vee-validate/issues/2835)) ([ab3d499](https://github.com/logaretm/vee-validate/commit/ab3d4998caf5950656dc0476f13215d598b28832))
- render input by default for the field component ([81d055d](https://github.com/logaretm/vee-validate/commit/81d055d704deaa12b392fd9197218733b3a0bb8d))
# [4.0.0-alpha.4](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.3...vee-validate@4.0.0-alpha.4) (2020-07-23)
**Note:** Version bump only for package vee-validate
# [4.0.0-alpha.3](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.2...vee-validate@4.0.0-alpha.3) (2020-07-21)
### Features
- automatic injection of the form controller ([c039831](https://github.com/logaretm/vee-validate/commit/c0398318ec70c925b6bcb2afa859ec89488e1f78))
- remove debounce feature and make it userland ([b7263ce](https://github.com/logaretm/vee-validate/commit/b7263ce0f887388709846975b59965e440636089))
# [4.0.0-alpha.2](https://github.com/logaretm/vee-validate/compare/vee-validate@4.0.0-alpha.1...vee-validate@4.0.0-alpha.2) (2020-07-19)
### Features
- always render a from by default ([402603a](https://github.com/logaretm/vee-validate/commit/402603a8f755a377a056debf24815611a01c3037))
# 4.0.0-alpha.1 (2020-07-18)
### Bug Fixes
- added check for cross-fields extraction on unsupported schema ([0ff1bad](https://github.com/logaretm/vee-validate/commit/0ff1bad84a90189f11897cada01fd091e5593bb7))
- added errorMessage prop to the field type ([f1553d0](https://github.com/logaretm/vee-validate/commit/f1553d01b94a74580700fd8712b67688f9c89c15))
- added single error message prop to the provider slot props ([bc97d0c](https://github.com/logaretm/vee-validate/commit/bc97d0c6463cd7e466bb7b3555671e7891d4c60b))
- added unwrap util function ([121bffc](https://github.com/logaretm/vee-validate/commit/121bffc05a9c6e2e204b843d5eb8d7678e5d0fff))
- adjust the useField options to be less strict ([7ea8263](https://github.com/logaretm/vee-validate/commit/7ea826373a78b4fa6343f1da9db0e43879fa0e4e))
- check if a form is present before accessing its schema ([3656181](https://github.com/logaretm/vee-validate/commit/3656181b17a6e44c8f470570ee5126cf2a83ae41))
- debouncing not working correctly and move it to hoc only ([86280a1](https://github.com/logaretm/vee-validate/commit/86280a15e9fb1f94ef8c042a9d04d437f38936b0))
- ensure we unwrap the field id if it was reactive ([7f91e93](https://github.com/logaretm/vee-validate/commit/7f91e930ec8cce4f2e17b49ee9d642d7e9343d6f))
- initial validation not respecting the config opts ([2443d44](https://github.com/logaretm/vee-validate/commit/2443d44b1b00eda39ff884f33f85414aa2b1d34e))
- localization default fallback not being interpolated correctly ([165e89c](https://github.com/logaretm/vee-validate/commit/165e89c6136126d6b946640623261f32b299a2a3))
- no clue why this isn't building ([0d3e7fd](https://github.com/logaretm/vee-validate/commit/0d3e7fdea6f28e29d25f488cae527e925608da7e))
- only add novalidate attr if the rendered element is form ([3638cea](https://github.com/logaretm/vee-validate/commit/3638cead19c9501783e23b43248ce49d7bdf51d7))
- param mapping causing target names to resolve incorrectly ([fb77dc6](https://github.com/logaretm/vee-validate/commit/fb77dc673cb1eff72a1508cff7b4aaed60d8450e))
- set pending back to false earlier in the cycle ([a4237a2](https://github.com/logaretm/vee-validate/commit/a4237a2f8dfde5efcc1d39b5a400e988b8740df9))
- temporary fix for the unamed import issue with vue-beta 4 ([62d27e9](https://github.com/logaretm/vee-validate/commit/62d27e9c9293026d26d62709c2e691d3eb15753e))
- unwrap flags before sending them to the observer slot ([19f7886](https://github.com/logaretm/vee-validate/commit/19f7886adae59b4442139f6e1a3f3905ab54f86a))
- use the proper model event name ([5704db8](https://github.com/logaretm/vee-validate/commit/5704db879019b89b001f496f5f113df24ad09bc6))
- watch target fields once they change ([a4184b0](https://github.com/logaretm/vee-validate/commit/a4184b0065c26df77b680cfbda7450a81b6764ef))
### Features
- adapt the changes from the v3 master branch ([2301c5a](https://github.com/logaretm/vee-validate/commit/2301c5ae75eb8590cb2cc919215ffe4ae934b885))
- add name resolution from v3 ([ba77fdd](https://github.com/logaretm/vee-validate/commit/ba77fdde4f7e5400c6755331af4705715ecc885b))
- add native submit alternative to handleSubmit ([bc00888](https://github.com/logaretm/vee-validate/commit/bc008880607f0393c4e6bd9eb2d44ebb40aa3604))
- added 'as' prop to the validation provider ([5c8ae9c](https://github.com/logaretm/vee-validate/commit/5c8ae9cac2dd418c5bf78b8a0c68e7d256dc96ce))
- added alert role to the error message ([714abfe](https://github.com/logaretm/vee-validate/commit/714abfede6cb2cd2ab1dd72319d27630af6fe9b6))
- added aria and a11y improvements ([ca74f16](https://github.com/logaretm/vee-validate/commit/ca74f165988be3c0c5a6f828508b6aed3fd6e3a0))
- added built-in support for yup validation schema ([e436b75](https://github.com/logaretm/vee-validate/commit/e436b75c4b8b7a085adf701d07b54b798da9a774))
- added ErrorMessage component ([9570412](https://github.com/logaretm/vee-validate/commit/957041270b947e1b70301c3935b6d1ac0bb05a5d))
- added support for custom components ([c661c7e](https://github.com/logaretm/vee-validate/commit/c661c7e1f352e2806c2e2da7bc2c860cfa62f3ff))
- added useField and useForm hooks ([c1e9007](https://github.com/logaretm/vee-validate/commit/c1e900736ed9585d8997d2080f001aad28060281))
- allow the as prop to be a component definition ([29790d4](https://github.com/logaretm/vee-validate/commit/29790d47f17fe49c897bf5b2fda0508f57990479))
- allow the observer to render forms and handle submit events ([9e0d59b](https://github.com/logaretm/vee-validate/commit/9e0d59b11d239c7f1e6d4bc287d9e49aa0376f0d))
- allow validation schema to accept other expressions ([ddeeaea](https://github.com/logaretm/vee-validate/commit/ddeeaea8041c3fad894aff0c827dd9f71b65224d))
- change default field value to undefiend ([00c8754](https://github.com/logaretm/vee-validate/commit/00c87549244447423e0833f8294c5c607bdcf105))
- deprecate names option on validate API ([fe90820](https://github.com/logaretm/vee-validate/commit/fe90820b4b0d4d10df81c2bbd019c3b63d371edf))
- deprecate the 'required' flag ([283caa0](https://github.com/logaretm/vee-validate/commit/283caa0fdd353d990680d42e64be8d8362b6aad5))
- enable interaction modes and localization APIs ([8486aaf](https://github.com/logaretm/vee-validate/commit/8486aaf0fadba03f38b5dd8a5ab857c10e7aa49c))
- expose errorMessage prop on useField and Provider ([04eecaa](https://github.com/logaretm/vee-validate/commit/04eecaa13cc8ab0cc18336021bb912f924e37968))
- expose the form values and pass them to the handleSubmit ([de51155](https://github.com/logaretm/vee-validate/commit/de511555c371bef73037d514e19d44eb4d292eae))
- hook up the provider with new observer implementation ([4d18a65](https://github.com/logaretm/vee-validate/commit/4d18a6572af6af4630bdc2508e027e67d3c0d579))
- implement bails for useField and ValidationProvider ([486babd](https://github.com/logaretm/vee-validate/commit/486babd031efd5a71a819ff535a0e0c661bc45fe))
- implement initial values ([8239130](https://github.com/logaretm/vee-validate/commit/82391301152751eb03097dad4521dc1c275c47e7))
- implement validation debounce ([e294409](https://github.com/logaretm/vee-validate/commit/e2944099ef2074d59f908f7949df3a1059ab3b4e))
- implemented disabled prop ([88bf28e](https://github.com/logaretm/vee-validate/commit/88bf28e89d9e635ebbc79e593a326d4dd2025cdb))
- make rules watchable ([90530cd](https://github.com/logaretm/vee-validate/commit/90530cdebede5bf33a62221371380ad8554326ba))
- make the as prop take priority to determine what to render ([d5a033f](https://github.com/logaretm/vee-validate/commit/d5a033fc57b7ddea8aff4a0f4fe802d7c2489a9c))
- new field binding object ([a58a84b](https://github.com/logaretm/vee-validate/commit/a58a84b009fef5dbfffa2a93a54643b3830cb4bc))
- new handleSubmit signature ([63cbeaf](https://github.com/logaretm/vee-validate/commit/63cbeafd1cfb5e1e14ec42e34c0691a26b258897))
- only export the provider for now ([0bf3efe](https://github.com/logaretm/vee-validate/commit/0bf3efe230be2d80b9e4693779e095c04997a52b))
- remove vid from fields ([1b9bded](https://github.com/logaretm/vee-validate/commit/1b9bdedeb68006535c7087aef267906e2f7bed1d))
- support immediate validation ([42cd6ed](https://github.com/logaretm/vee-validate/commit/42cd6edcfc0c11ea05106e66486ed4772c749548))
- support inline rules as functions ([3c74681](https://github.com/logaretm/vee-validate/commit/3c7468186ac5a6e7fa6bb44b30de4102ef5c31cd))
- support yup validation schemas on field-level ([0802512](https://github.com/logaretm/vee-validate/commit/0802512e181a8a33feaa227770f9e203fcf0cea5))
- updated vnode utils to handle Vue 3 VNode API ([29a4fe8](https://github.com/logaretm/vee-validate/commit/29a4fe859823d5a74814c2dabb3b664185e56366))
- use defineComponent to type Provider and Observer definitions ([80980cf](https://github.com/logaretm/vee-validate/commit/80980cfec81447638aa82b42c208f9ec6f9826f8))
- validate yup form schemas using object validation ([bf216dd](https://github.com/logaretm/vee-validate/commit/bf216dde30a6d90c976bac844129ccbd08a00392))
- validation schema support ([523824a](https://github.com/logaretm/vee-validate/commit/523824a0977d599f6ff2a271ee2edebd5aef36ef))
- working draft for the vprovider with composition api ([b830054](https://github.com/logaretm/vee-validate/commit/b8300547cbafa9904f2b769b8309925ad6da180f))
================================================
FILE: CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at logaretm1@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Vee-Validate
First of all, thanks for taking interest into contributing to this repository, below is what you need to know about the project.
## Getting Started
Fork the repository, or clone it:
```sh
git clone https://github.com/logaretm/vee-validate.git
```
Install dependencies using [pnpm](https://pnpm.io/)
```sh
pnpm i
```
## Issues
When creating issues, please provide as much details as possible. A clear explanation on the issue and a reliable production example can help us greatly in improving this project. Your issue may get closed if it cannot be easily reproduced so please provide a working example using either [Codesandbox](https://codesandbox.io/) or [StackBlitz](https://stackblitz.com/). Your example should only focus on the issue, minimal and clearly produces the issue.
You can fork this [StackBlitz template](https://stackblitz.com/edit/vee-validate-issue-template?file=src%App.vue) to get a starting working environment ready for your demo with all vee-validate packages pre-installed and using the latest release.
If your issue gets closed for not providing enough info or not responding to the maintainers' comments, do not consider it a hostile action. There are probably other issues that the maintainers are working on and must give priority to issues that are well investigated, you can always revisit the issue and address the reasons that it was closed and we will be happy to re-open it and address it properly. Sometimes a commit will close your issue without a response from the maintainers so make sure you read the issue timeline to prevent any misunderstandings.
## Code Style
The code style is enforced with `eslint` and `prettier` and is checked automatically whenever you commit. Any violation of the code style may prevent merging your contribution so make sure you follow it. And yes we love our semi-colons.
## Commit Style
Commit messages are enforced with `commitlint` which is configured to help you write a suitable commit message, the checks are run automatically when you commit.
## Contributing To The Docs
If you want to contribute to the docs you can find it in the `docs` folder.
The docs are using [astro](https://astro.build/) and the [MDX plugin](https://docs.astro.build/en/guides/integrations-guide/mdx/) to write the doc pages.
To run the documentation locally:
```sh
pnpm docs:dev
```
## Pull Requests
**Before you open a PR, make sure to communicate via issues about your intent to avoid PRing something you think is an issue when it might be a design choice**. This is a checklist of the stuff you need to be aware of:
- Make sure you fill the PR template provided
- PRs should have titles that are clear as possible
- Make sure that your PR is up to date with the branch you are targeting, use `git rebase` for this
- Unfinished/In-Progress PRs should be marked as a `draft`
- Make sure to mention which issues are being fixed by the PR so they can be closed properly
- Make sure to preview all pending PRs to make sure your work won't conflict with other ongoing pull-request
- Coordinate with ongoing conflicting PRs' authors to make it easier to merge both your PRs
- Make sure to generate a changeset on the PR branch before merging it, this will help us generate a changelog for the next release
## Source Code
Currently we are using TypeScript for the codebase, feel free to use any of it's features with a minor exception to:
- `Enums` as we prefer to use string literals instead.
- `namespace` not needed in our codebase
## Testing
Each test file represents a unit test to the corresponding file in the src folder.
You need to build the files before you run the tests:
```sh
pnpm build
```
Then to run the tests:
```sh
pnpm test
```
To check the tests coverage:
```sh
pnpm cover
```
## Mono repo
this project uses mono-repo style using pnpm workspaces and [changesets](https://github.com/changesets/changesets).
## Building
Use this command to build all project bundles
```sh
pnpm build
```
If you are working on a specific package within the vee-validate mono repo and only want to build that, then use the following command to build specific packages, the package id is the folder name in the `packages` folder.
```sh
pnpm build vee-validate
pnpm build rules
pnpm build zod
# etc...
```
## Tips for Testing your changes
If you need to try out your changes, here is a few tips
- Build vee-validate dist files once you are done with your changes
- To use the built files you can either use `pnpm link {PKG_NAME}` and link the package dist files to your project, or use [yalc](https://github.com/whitecolor/yalc).
================================================
FILE: LICENSE
================================================
The MIT License (MIT)
Copyright (c) Abdelrahman Awad <logaretm1@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
================================================
FILE: README.md
================================================
<p align="center">
<a href="https://vee-validate.logaretm.com" target="_blank">
<img src="https://raw.githubusercontent.com/logaretm/vee-validate/main/logo.png" width="200" title="Go to website">
</a>
</p>
<p align="center">
Painless Vue forms
</p>
<p align="center">
<a target="_blank" href="https://www.npmjs.com/package/vee-validate">
<img src="https://img.shields.io/npm/v/vee-validate.svg?label=&color=05bda8">
</a>
<a target="_blank" href="https://npm-stat.com/charts.html?package=vee-validate">
<img src="https://img.shields.io/npm/dm/vee-validate.svg?color=05bd6d&label=">
</a>
<a href="https://vee-validate.logaretm.com/v5/" target="_blank">
<img src="https://img.shields.io/badge/-docs%20and%20demos-009f53">
</a>
<a href="https://github.com/sponsors/logaretm">
<img src="https://img.shields.io/badge/-%E2%99%A5%20Sponsors-ec5cc6">
</a>
</p>
<br>
<p align="center">
<a href="https://github.com/sponsors/logaretm">
<img src='https://sponsors.logaretm.com/sponsors.svg'>
</a>
</p>
<br>
## Features
- **🍞 Easy:** Declarative validation that is familiar and easy to setup
- **🧘♀️ Flexible:** Synchronous, Asynchronous, field-level or form-level validation
- **⚡️ Fast:** Build faster forms faster with intuitive API and small footprint
- **🏏 Minimal:** Only handles the complicated form concerns, gives you full control over everything else
- **😎 UI Agnostic:** Works with native HTML elements or your favorite UI library components
- **🦾 Progressive:** Works whether you use Vue.js as a progressive enhancement or in a complex setup
- **✅ Built-in Rules:** Companion lib with 25+ Rules that covers most needs in most web applications
- **🌐 i18n:** 45+ locales for built-in rules contributed by developers from all over the world
## Getting Started
### Installation
```sh
# Install with yarn
yarn add vee-validate
# Install with npm
npm install vee-validate --save
```
### Vue version support
The main v4 version supports Vue 3.x only, for previous versions of Vue, check the following the table
| vue Version | vee-validate version | Documentation Link |
| ----------- | -------------------- | ---------------------------------------------------------------------------------------- |
| `2.x` | `2.x` or `3.x` | [v2](https://vee-validate.logaretm.com/v2) or [v3](https://vee-validate.logaretm.com/v3) |
| `3.x` | `4.x` or `5.x` | [v4](https://vee-validate.logaretm.com/v4) or [v5](https://vee-validate.logaretm.com/v5) |
### Usage
vee-validate offers two styles to integrate form validation into your Vue.js apps.
#### Composition API
The fastest way to create a form and manage its validation, behavior, and values is with the composition API.
Create your form with `useForm` and then use `defineField` to create your field model and props/attributes and `handleSubmit` to use the values and send them to an API.
```vue
<script setup>
import { useForm } from 'vee-validate';
// Validation, or use `yup` or `zod`
function required(value) {
return value ? true : 'This field is required';
}
// Create the form
const { defineField, handleSubmit, errors } = useForm({
validationSchema: {
field: required,
},
});
// Define fields
const [field, fieldProps] = defineField('field');
// Submit handler
const onSubmit = handleSubmit(values => {
// Submit to API
console.log(values);
});
</script>
<template>
<form @submit="onSubmit">
<input v-model="field" v-bind="fieldProps" />
<span>{{ errors.field }}</span>
<button>Submit</button>
</form>
</template>
```
You can do so much more than this, for more info [check the composition API documentation](https://vee-validate.logaretm.com/v5/guide/composition-api/getting-started/).
#### Declarative Components
Higher-order components can also be used to build forms. Register the `Field` and `Form` components and create a simple `required` validator:
```vue
<script setup>
import { Field, Form } from 'vee-validate';
// Validation, or use `yup` or `zod`
function required(value) {
return value ? true : 'This field is required';
}
// Submit handler
function onSubmit(values) {
// Submit to API
console.log(values);
}
</script>
<template>
<Form v-slot="{ errors }" @submit="onSubmit">
<Field name="field" :rules="required" />
<span>{{ errors.field }}</span>
<button>Submit</button>
</Form>
</template>
```
The `Field` component renders an `input` of type `text` by default but you can [control that](https://vee-validate.logaretm.com/v5/api/field#rendering-fields)
## 📚 Documentation
Read the [documentation and demos](https://vee-validate.logaretm.com/v4).
## Contributing
You are welcome to contribute to this project, but before you do, please make sure you read the [contribution guide](/CONTRIBUTING.md).
## Credits
- Inspired by Laravel's [validation syntax](https://laravel.com/docs/5.4/validation)
- v4 API Inspired by [Formik's](https://github.com/formium/formik)
- Nested path types by [react-hook-form](https://github.com/react-hook-form/react-hook-form)
- Logo by [Baianat](https://github.com/baianat)
## Emeriti
Here we honor past contributors and sponsors who have been a major part on this project.
- [Baianat](https://github.com/baianat).
## ⚖️ License
Released under [MIT](/LICENSE) by [@logaretm](https://github.com/logaretm).
================================================
FILE: commitlint.config.mjs
================================================
export default {
extends: ['@commitlint/config-conventional'],
rules: {
'body-leading-blank': [1, 'always'],
'footer-leading-blank': [1, 'always'],
'header-max-length': [2, 'always', 72],
'scope-case': [2, 'always', 'lower-case'],
'subject-case': [2, 'never', ['sentence-case', 'start-case', 'pascal-case', 'upper-case']],
'subject-empty': [2, 'never'],
'subject-full-stop': [2, 'never', '.'],
'type-case': [2, 'always', 'lower-case'],
'type-empty': [2, 'never'],
'type-enum': [
2,
'always',
['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'style', 'test'],
],
},
};
================================================
FILE: docs/.gitignore
================================================
.nuxt
dist
node_modules
sw.*
================================================
FILE: docs/CHANGELOG.md
================================================
# vee-validate-docs
## null
### Patch Changes
- Updated dependencies [9867e59]
- Updated dependencies [721e980]
- Updated dependencies [9803aa2]
- Updated dependencies [546d82e]
- @vee-validate/valibot@4.15.1
- vee-validate@4.15.1
- @vee-validate/yup@4.15.1
- @vee-validate/zod@4.15.1
## null
### Patch Changes
- Updated dependencies [5cba0aa]
- Updated dependencies [30281f5]
- Updated dependencies [ec121b1]
- Updated dependencies [db26a74]
- Updated dependencies [f92455a]
- @vee-validate/yup@4.15.0
- vee-validate@4.15.0
- @vee-validate/valibot@4.15.0
- @vee-validate/zod@4.15.0
## null
### Patch Changes
- Updated dependencies [be994b4]
- vee-validate@4.14.7
- @vee-validate/valibot@4.14.7
- @vee-validate/yup@4.14.7
- @vee-validate/zod@4.14.7
## null
### Patch Changes
- vee-validate@4.14.6
- @vee-validate/zod@4.14.6
- @vee-validate/yup@4.14.6
- @vee-validate/valibot@4.14.6
## null
### Patch Changes
- Updated dependencies [e9f8c88]
- vee-validate@4.14.5
- @vee-validate/valibot@4.14.5
- @vee-validate/yup@4.14.5
- @vee-validate/zod@4.14.5
## null
### Patch Changes
- Updated dependencies [f33974c]
- Updated dependencies [0991c01]
- Updated dependencies [ecb540a]
- Updated dependencies [4f88d85]
- vee-validate@4.14.4
- @vee-validate/valibot@4.14.4
- @vee-validate/yup@4.14.4
- @vee-validate/zod@4.14.4
## null
### Patch Changes
- Updated dependencies [07c27d5]
- vee-validate@4.14.3
- @vee-validate/valibot@4.14.3
- @vee-validate/yup@4.14.3
- @vee-validate/zod@4.14.3
## null
### Patch Changes
- Updated dependencies [f0d4e24]
- vee-validate@4.14.2
- @vee-validate/valibot@4.14.2
- @vee-validate/yup@4.14.2
- @vee-validate/zod@4.14.2
## null
### Patch Changes
- vee-validate@4.14.1
- @vee-validate/zod@4.14.1
- @vee-validate/yup@4.14.1
- @vee-validate/valibot@4.14.1
## null
### Patch Changes
- Updated dependencies [f7a4929]
- Updated dependencies [97cebd8]
- Updated dependencies [404cf57]
- Updated dependencies [421ae69]
- vee-validate@4.14.0
- @vee-validate/valibot@4.14.0
- @vee-validate/yup@4.14.0
- @vee-validate/zod@4.14.0
## null
### Patch Changes
- Updated dependencies [afbd0e5]
- vee-validate@4.13.2
- @vee-validate/valibot@4.13.2
- @vee-validate/yup@4.13.2
- @vee-validate/zod@4.13.2
================================================
FILE: docs/_redirects
================================================
# redirects old component api paths to new one
/guide/validation /v5/guide/components/validation
/guide/handling-forms /v5/guide/components/handling-forms
/guide/nested-objects-and-arrays /v5/guide/components/nested-objects-and-arrays
/v5/guide/composition/validation /v5/guide/composition/getting-started
================================================
FILE: docs/astro.config.ts
================================================
import { defineConfig } from 'astro/config';
import vue from '@astrojs/vue';
import remarkGfm from 'remark-gfm';
import sitemap from '@astrojs/sitemap';
import mdx from '@astrojs/mdx';
import highlight from './highlight';
import baseLink from './baseLink';
import { svgSprite } from './src/integrations/svgSprite';
import partytown from '@astrojs/partytown';
// https://astro.build/config
export default defineConfig({
site: process.env.NODE_ENV === 'production' ? 'https://vee-validate.logaretm.com/' : 'http://localhost:4321/',
trailingSlash: 'always',
base: '/v5',
vite: {
ssr: {
noExternal: ['@vue/repl'],
},
},
integrations: [
vue(),
sitemap(),
mdx({
remarkPlugins: [baseLink('/v5'), highlight, remarkGfm],
}),
svgSprite,
partytown({
config: {
forward: ['dataLayer.push'],
},
}),
],
});
================================================
FILE: docs/baseLink.ts
================================================
import { visit } from 'unist-util-visit';
export default function addBasePath(basePath: string) {
return function () {
return function (ast) {
visit(ast, 'link', node => {
if (node.url.startsWith('/') && !node.url.startsWith(`${basePath}/`)) {
node.url = `${basePath}${node.url}`;
}
if (node.url.startsWith('http')) {
addProperties(node, {
rel: 'noopener',
target: '_blank',
});
}
});
return ast;
};
};
}
function addProperties(node: any, props: Record<string, string>) {
if (!node.data) {
node.data = {};
}
if (!node.data.hProperties) {
node.data.hProperties = {};
}
node.data.hProperties = {
...node.data.hProperties,
...props,
};
}
================================================
FILE: docs/highlight.ts
================================================
import * as shiki from 'shiki';
import { JSDOM } from 'jsdom';
import { visit } from 'unist-util-visit';
import theme from './theme.json';
const dom = new JSDOM();
const document = dom.window.document;
/**
* Some langs are highlighted with different grammar rules but need to be displayed
*/
const LANG_REPLACEMENTS = {
'vue-html': 'vue',
};
const highlighterPromise = shiki.getHighlighter({
// Complete themes: https://github.com/shikijs/shiki/tree/master/packages/themes
theme: theme as any,
langs: ['js', 'ts', 'vue', 'graphql', 'jsx', 'css', 'sh', 'yaml', 'json', 'vue-html', 'html'],
});
export default function highlight() {
return async function (tree) {
const highlighter = await highlighterPromise;
visit(tree, 'code', visitor);
function visitor(node) {
const { lang, lines, fileName } = parseParts(node.lang || 'sh');
try {
const html = replaceColorsWithVariables(highlighter.codeToHtml(node.value, { lang: lang || 'sh' }));
const fragment = document.createDocumentFragment();
const wrapper = document.createElement('div');
wrapper.classList.add('shiki-snippet');
wrapper.innerHTML = html;
fragment.appendChild(wrapper);
const langSpan = createSpan(LANG_REPLACEMENTS[lang] || lang, 'shiki-language', {
'data-language': lang,
});
const shikiEl = fragment.querySelector('.shiki') as HTMLElement | null;
shikiEl?.prepend(langSpan);
if (lines.length) {
lines.forEach(line => {
const lineEl = fragment.querySelector(`.line:nth-child(${line})`) as HTMLElement | null;
lineEl?.classList.add('is-highlighted');
});
shikiEl?.classList.add('with-line-highlights');
}
fragment.querySelector('.line:last-child:empty')?.remove();
if ([...fragment.querySelectorAll('.line')].length === 1) {
shikiEl?.classList.add('single-line');
}
if (fileName) {
wrapper.prepend(createSpan(fileName, 'filename'));
shikiEl?.classList.add('with-filename');
}
node.value = fragment.querySelector('.shiki-snippet')?.outerHTML;
node.type = 'html';
} catch (err) {
// eslint-disable-next-line no-console
console.error(err);
// eslint-disable-next-line no-console
console.log(node.lang);
}
}
};
}
function createSpan(text: string, className: string, attrs?: Record<string, string>) {
const document = dom.window.document;
const span = document.createElement('span');
span.textContent = text;
span.classList.add(className);
if (attrs) {
Object.keys(attrs).forEach(attr => {
span.setAttribute(attr, attrs[attr]);
});
}
return span;
}
function replaceColorsWithVariables(html) {
const colors = [
{ variable: '--code-foreground', value: '#f8f8f2' },
{ variable: '--code-background', value: '#22212c' },
{ variable: '--code-token-constant', value: '#9580ff' },
{ variable: '--code-token-operator', value: '#ff80bf' },
{ variable: '--code-token-type', value: '#80ffea' },
{ variable: '--code-token-parameter', value: '#ffca80' },
{ variable: '--code-token-attribute', value: '#8aff80' },
{ variable: '--code-token-regex', value: '#ff9580' },
{ variable: '--code-token-string', value: '#ffff80' },
{ variable: '--code-token-comment', value: '#7970a9' },
];
let str = html;
colors.forEach(color => {
str = str.replace(new RegExp(`color:\\s*${color.value}`, 'ig'), `color: var(${color.variable})`);
});
return str;
}
function parseLines(lines) {
return lines.split(',').reduce((acc, line) => {
if (/-/.test(line)) {
const [start, end] = line.split('-').map(ln => Number(ln));
let current = start;
while (current <= end) {
acc.push(current);
current++;
}
return acc;
}
acc.push(Number(line));
return acc;
}, []);
}
const fileNameRE = /\[(.+)\]/;
const linesRE = /\{(.+)\}/;
function parseParts(lang) {
lang = lang.trim();
const [, fileName] = lang.match(fileNameRE) || [];
const [, lines] = lang.match(linesRE) || [];
const rawLang = lang.replace(fileNameRE, '').replace(linesRE, '');
return {
lang: rawLang,
lines: lines ? parseLines(lines.replace()) : [],
fileName,
};
}
================================================
FILE: docs/package.json
================================================
{
"private": true,
"name": "vee-validate-docs",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro build && node scripts/afterBuild.js"
},
"dependencies": {
"@astrojs/mdx": "^1.1.5",
"@astrojs/partytown": "^2.0.2",
"@astrojs/sitemap": "^3.0.3",
"@astrojs/vue": "^3.0.4",
"@docsearch/css": "^3.5.2",
"@docsearch/js": "^3.5.2",
"@floating-ui/dom": "^1.5.3",
"@stackblitz/sdk": "^1.9.0",
"@types/fs-extra": "^11.0.4",
"@types/lodash-es": "^4.17.12",
"@vue/repl": "^3.0.0",
"@vueuse/core": "^10.7.0",
"astro": "^3.6.4",
"autoprefixer": "^10.4.16",
"fs-extra": "^11.2.0",
"jsdom": "^23.0.1",
"lodash-es": "^4.17.21",
"remark-gfm": "^3.0.1",
"shiki": "^0.14.6",
"tailwindcss": "^3.4.15",
"unist-util-visit": "^5.0.0",
"valibot": "^1.0.0-beta.7",
"vee-validate": "workspace:*",
"vue": "^3.4.26",
"yup": "^1.3.2",
"zod": "^3.22.4"
},
"version": null
}
================================================
FILE: docs/postcss.config.js
================================================
module.exports = {
plugins: {
'tailwindcss/nesting': {},
tailwindcss: {},
autoprefixer: {},
},
};
================================================
FILE: docs/public/img/browserconfig.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<browserconfig><msapplication><tile><square70x70logo src="/ms-icon-70x70.png"/><square150x150logo src="/ms-icon-150x150.png"/><square310x310logo src="/ms-icon-310x310.png"/><TileColor>#ffffff</TileColor></tile></msapplication></browserconfig>
================================================
FILE: docs/public/img/manifest.json
================================================
{
"name": "App",
"icons": [
{
"src": "\/android-icon-36x36.png",
"sizes": "36x36",
"type": "image\/png",
"density": "0.75"
},
{
"src": "\/android-icon-48x48.png",
"sizes": "48x48",
"type": "image\/png",
"density": "1.0"
},
{
"src": "\/android-icon-72x72.png",
"sizes": "72x72",
"type": "image\/png",
"density": "1.5"
},
{
"src": "\/android-icon-96x96.png",
"sizes": "96x96",
"type": "image\/png",
"density": "2.0"
},
{
"src": "\/android-icon-144x144.png",
"sizes": "144x144",
"type": "image\/png",
"density": "3.0"
},
{
"src": "\/android-icon-192x192.png",
"sizes": "192x192",
"type": "image\/png",
"density": "4.0"
}
]
}
================================================
FILE: docs/public/loadTheme.js
================================================
(function setUserPreferredTheme() {
const themeSetting = localStorage.getItem('theme');
// no dark setting, get it from browser
const theme = themeSetting || 'dark';
document.documentElement.classList.toggle('dark', theme === 'dark');
localStorage.setItem('theme', theme);
})();
================================================
FILE: docs/scripts/afterBuild.js
================================================
/* eslint-disable @typescript-eslint/no-var-requires */
const path = require('path');
const fs = require('fs');
fs.copyFileSync(path.join(__dirname, '../_redirects'), path.join(__dirname, '../dist/_redirects'));
================================================
FILE: docs/src/components/Ad.vue
================================================
<template>
<div v-if="!hasError" id="ad" :class="{ 'placement-home': placement === 'home-page' }">
<!-- Show an image ad -->
<div data-ea-publisher="vee-validatelogaretmcom" data-ea-type="image"></div>
</div>
<div v-else id="ad" class="error">
<div class="p-4 flex flex-col">
<span class="font-bold font-display">🙏 Enable Ads</span>
<span class="mt-2"> Please enable ads on your browser for this website. </span>
<span class="mt-1"> Ads are a funding source to this project. </span>
<div class="mt-2 or-fund-it">
<span class="mx-1 whitespace-nowrap">or consider</span>
</div>
<a
target="_blank"
rel="noopener"
href="https://github.com/sponsors/logaretm"
class="mt-2 bg-pink-600 py-1 px-2 text-white font-medium flex items-center justify-center font-display rounded group hover:bg-pink-700"
>
<svg
class="stroke-current transform transition duration-200 group-hover:scale-110 w-5 h-5 mr-1"
fill="none"
viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"
></path>
</svg>
Sponsor
</a>
</div>
</div>
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue';
defineProps<{
placement?: 'content' | 'home-page';
}>();
const hasError = ref(false);
function loadScript() {
const script = document.createElement('script');
script.src = 'https://media.ethicalads.io/media/client/ethicalads.min.js';
const el = document.querySelector('#ad');
el?.appendChild(script);
script.onerror = error => {
if (navigator.onLine) {
hasError.value = true;
}
};
}
onMounted(loadScript);
</script>
<style lang="postcss">
#ad {
@apply static text-gray-400 mt-4 hidden md:block;
z-index: 1;
.ea-placement {
@apply rounded-md overflow-hidden bg-zinc-200;
.ea-content {
@apply m-0 rounded-none;
a {
@apply text-zinc-500;
}
strong {
@apply text-accent-900;
}
}
.ea-callout {
@apply m-0 py-2 px-4 text-center bg-zinc-300 rounded-none;
}
}
&.error {
width: 180px;
}
}
.dark {
#ad {
.ea-placement {
@apply bg-zinc-800;
}
.ea-callout {
@apply bg-zinc-950;
a {
@apply text-zinc-600;
}
}
&.error {
@apply bg-zinc-800;
}
}
}
.or-fund-it {
@apply text-zinc-500 flex items-center space-x-2;
&::before,
&::after {
height: 1px;
width: 100%;
content: '';
@apply flex-shrink bg-zinc-500;
}
}
</style>
================================================
FILE: docs/src/components/CodeTitle.vue
================================================
<template>
<component :is="tag">
<slot />
</component>
</template>
<script>
export default {
props: {
level: [Number, String],
},
computed: {
tag() {
return `h${this.level}`;
},
},
};
</script>
<style lang="postcss" scoped>
h4:deep(code:not([class])) {
@apply text-lg;
}
h5:deep(code:not([class])) {
@apply text-base;
}
</style>
================================================
FILE: docs/src/components/ContentWrapper.vue
================================================
<template>
<div class="rendered-content">
<slot />
</div>
</template>
<style lang="postcss">
.rendered-content {
hr {
@apply mt-10 mb-8 border border-gray-300;
}
h1 {
@apply text-5xl mb-8 font-bold;
}
h2 {
@apply text-2xl lg:text-3xl;
}
h3 {
@apply text-lg lg:text-xl;
}
h4,
h5 {
@apply text-lg;
}
h1,
h2,
h3 {
@apply font-display;
}
h2,
h3,
h4,
h5 {
@apply font-semibold my-8 relative w-max max-w-full break-normal;
transform: translateX(2ch);
&::before {
@apply absolute text-accent-800;
margin-left: -2ch;
content: '#';
}
@screen lg {
transform: none;
}
&::after {
content: '';
display: block;
}
}
p + p {
@apply mt-4;
}
ul {
@apply px-8 my-4 list-disc;
li + li {
@apply mt-2;
}
}
ul {
li {
@apply relative antialiased list-none;
&:before {
@apply w-6 h-6 text-lg absolute rounded-full flex items-center justify-center flex-shrink-0;
content: '';
background-image: url("data:image/svg+xml,%3Csvg fill='none' stroke='%2309a884' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z'%3E%3C/path%3E%3C/svg%3E");
left: -2rem;
}
}
}
.shiki-snippet {
@apply my-5 rounded-md text-sm shadow;
.filename {
@apply inline-block py-2 px-8 bottom-full rounded-t-md font-extrabold text-sm select-none tracking-wide border border-b-0 border-emerald-500 border-opacity-30 bg-gray-200;
font-family: 'Courier New', monospace;
}
.shiki-language {
@apply absolute right-2 top-2 text-xs;
color: var(--code-lang-label);
}
}
.shiki {
@apply font-mono pb-4 pt-6 text-sm border border-emerald-500 border-opacity-30 relative rounded-md;
counter-reset: step;
counter-increment: step 0;
line-height: 1.4;
overflow: auto;
overflow: overlay;
&.with-filename {
@apply rounded-tl-none rounded-tr-md;
}
code {
@apply flex flex-col w-full;
}
&.with-line-highlights {
.line {
@apply transition-all duration-300;
}
.line:not(.is-highlighted) {
@apply filter grayscale opacity-40 brightness-100;
}
&:hover {
.line:not(.is-highlighted) {
@apply filter-none opacity-100;
}
.line.is-highlighted {
background-color: var(--code-line-highlight);
}
}
}
&:not(.single-line) {
.line {
@apply block pr-2;
padding-left: 1.4rem;
line-height: 1.6;
&::before {
@apply select-none;
content: counter(step);
counter-increment: step;
width: 1rem;
border-left: 0.2rem transparent solid;
margin-right: 1.3rem;
display: inline-block;
text-align: right;
color: var(--code-line-numbers);
}
&.is-highlighted {
padding-left: 0;
&::before {
padding-left: 1.4rem;
margin-right: 2rem;
border-color: var(--code-line-highlight-border);
}
}
}
}
&.single-line {
@apply px-6;
}
}
blockquote {
@apply py-4 rounded-r-lg pl-4 bg-black border-l-4 border-accent-800 italic my-8 text-lg;
}
pre[class*='language-'] {
@apply rounded-lg my-4 block border border-gray-100;
}
*:not(pre) > code:not([class]) {
@apply text-sm px-1 rounded bg-gray-100 border border-gray-200 text-gray-900;
}
iframe {
@apply my-8;
}
details {
@apply my-10 px-3;
summary {
@apply outline-none mb-8;
}
}
ol {
@apply list-decimal px-8;
}
p,
li,
td {
a[href] {
@apply text-accent-800;
&:hover {
@apply underline;
}
}
}
table {
@apply w-full my-4 overflow-hidden;
}
th,
td {
@apply border border-gray-100;
}
th {
@apply text-sm font-medium;
}
th,
td {
@apply p-3;
}
}
.dark {
*:not(pre) > code:not([class]) {
@apply px-1 bg-black border border-gray-500 text-gray-200;
}
pre code,
pre[class*='language-'] code {
color: #f8f8f2;
}
*[class*='language-']::before {
color: #7970a9;
}
pre[class*='language-'] {
@apply border-carbon;
}
th,
td {
@apply border-gray-500;
}
.shiki-snippet {
.filename {
@apply bg-gray-700;
}
}
hr {
@apply border border-carbon;
}
}
</style>
================================================
FILE: docs/src/components/DocBadge.vue
================================================
<template>
<span class="px-2 py-1 bg-accent-800 text-white text-sm rounded-lg">{{ title }}</span>
</template>
<script setup lang="ts">
defineProps<{
title: string;
}>();
</script>
================================================
FILE: docs/src/components/DocFlavor.vue
================================================
<template>
<div class="mt-8">
<h2 class="text-2xl font-display inline-block">Choose a flavor</h2>
<p class="mt-4">Before you go on, you should choose which flavor of vee-validate you want to use.</p>
<div class="mt-8 grid grid-cols-1 lg:grid-cols-2 gap-x-8 gap-y-8 text-white">
<a :href="`/v5/guide/components/${next}/`" class="bg-gray-600 hover:bg-accent-900 p-6 rounded-lg relative">
<p class="text-xl font-semibold font-display">Components</p>
<p class="mt-8">Simple, high-level, dynamic template-based higher-order components.</p>
<p class="mt-4">Great for simple UI components and native HTML elements with custom styling.</p>
<svg
class="w-20 h-20 absolute top-0 right-0 mt-4 mr-4 text-gray-900 opacity-10"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"
></path>
</svg>
</a>
<a :href="`/v5/guide/composition-api/${next}/`" class="bg-gray-600 hover:bg-accent-900 p-6 rounded-lg relative">
<p class="text-xl font-semibold font-display">Composition API</p>
<p class="mt-8">Low level, intuitive composition API functions.</p>
<p class="mt-4">Great for building complex UI form components and general purpose data validation.</p>
<svg
class="w-20 h-20 absolute top-0 right-0 mt-4 mr-4 text-gray-900 opacity-10"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M17 14v6m-3-3h6M6 10h2a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v2a2 2 0 002 2zm10 0h2a2 2 0 002-2V6a2 2 0 00-2-2h-2a2 2 0 00-2 2v2a2 2 0 002 2zM6 20h2a2 2 0 002-2v-2a2 2 0 00-2-2H6a2 2 0 00-2 2v2a2 2 0 002 2z"
></path>
</svg>
</a>
</div>
</div>
</template>
<script setup lang="ts">
defineProps({
next: String,
});
</script>
<style lang="postcss" scoped>
p {
@apply text-lg lg:text-base;
}
h2 {
@apply font-semibold relative text-3xl lg:text-xl;
transform: translateX(2ch);
&::before {
@apply absolute text-accent-800;
margin-left: -2ch;
content: '#';
}
@screen lg {
transform: none;
}
}
a {
transition: background-color 0.4s ease-in-out;
svg {
transition: transform 0.5s ease-in-out;
}
&:hover {
svg {
transform: scale(1.1) translate3d(-2px, 2px, 0);
}
}
}
</style>
================================================
FILE: docs/src/components/DocMenu.vue
================================================
<template>
<div class="relative mt-20 lg:mt-4 font-ui">
<div
class="bg-gradient-to-b from-white dark:from-dark to-transparent h-4 absolute -top-px lg:top-0 inset-x-0"
></div>
<nav class="space-y-8 md:text-sm overflow-y-auto overscroll-y-contain px-8 lg:px-2 py-4">
<div v-for="category in menu" :key="category.title">
<p v-if="category.pages.length > 1" class="md:text-xs font-bold text-gray-400 uppercase">
{{ category.title }}
</p>
<div class="mt-3 space-y-2 w-full">
<a
v-if="category.pages.length === 1"
:href="category.pages[0].path"
:aria-current="currentUrl === category.pages[0].path ? 'page' : undefined"
class="flex items-center"
>
<span v-if="category.pages[0].icon" class="mr-2 bg-gray-200 dark:bg-gray-500 rounded p-1">
<Icon :name="category.pages[0].icon" class="w-5 h-5 fill-current" />
</span>
{{ category.pages[0].menuTitle || category.pages[0].title }}
</a>
<template v-else>
<div v-for="page in category.pages" :key="page.title" class="group">
<a
v-if="!page.children"
:href="page.path"
:aria-current="currentUrl === page.path ? 'page' : undefined"
class="flex items-center ml-2"
>
{{ page.menuTitle || page.title }}
<span v-if="page.new" class="ml-2 w-2 h-2 rounded-full flex-shrink-0 bg-blue-600"></span>
</a>
<div v-else class="flex flex-col bg-gray-200 dark:bg-gray-600 w-full rounded-lg py-3 px-2">
<button
type="button"
class="w-full flex items-center focus:outline-none transition-colors duration-300"
@click="expanded[page.title] = !expanded[page.title]"
>
<Icon :name="page.icon" class="w-5 h-5 fill-current" />
<span class="ml-2 group-hover:text-accent-800">{{ page.menuTitle || page.title }}</span>
<svg
class="ml-auto w-5 h-5"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg"
>
<path
v-if="!expanded[page.title]"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M12 6v6m0 0v6m0-6h6m-6 0H6"
></path>
<path v-else stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 12H4"></path>
</svg>
</button>
<ExpandTransition>
<ul v-show="expanded[page.title]" class="mt-3 space-y-2">
<li v-for="childPage in page.children" :key="childPage.title" class="pl-7 flex items-center">
<a :href="childPage.path" :aria-current="currentUrl === childPage.path ? 'page' : undefined">
{{ childPage.menuTitle || childPage.title }}
</a>
<span v-if="childPage.new" class="ml-2 w-2 h-2 rounded-full flex-shrink-0 bg-blue-600"></span>
</li>
</ul>
</ExpandTransition>
</div>
</div>
</template>
</div>
</div>
</nav>
<div
class="bg-gradient-to-b from-transparent to-white dark:to-dark h-4 absolute -bottom-px lg:bottom-0 inset-x-0"
></div>
</div>
</template>
<script lang="ts" setup>
import { reactive } from 'vue';
import ExpandTransition from '@/components/ExpandTransition.vue';
import Icon from '@/components/Icon.vue';
export interface CategoryMenuItem {
title: string;
pages: {
title: string;
menuTitle?: string;
path: string;
new?: boolean;
icon?: string;
children?: {
title: string;
new?: boolean;
menuTitle?: string;
path: string;
}[];
}[];
}
const props = defineProps<{
menu: CategoryMenuItem[];
currentUrl: string;
}>();
const expanded = reactive<Record<string, boolean>>({});
if (props.currentUrl) {
if (props.currentUrl.includes('/composition-api')) {
expanded['Composition API'] = true;
}
if (props.currentUrl.includes('/components')) {
expanded['Components'] = true;
}
}
</script>
<style lang="postcss" scoped>
nav {
max-height: calc(80vh - 96px);
a {
@screen motion {
transition: color 0.2s ease-in-out;
}
&:hover {
@apply text-accent-800;
}
&[aria-current='page'] {
@apply text-accent-800;
}
}
/* Global Scrollbar styling */
&::-webkit-scrollbar {
width: 7px;
cursor: pointer;
/*background-color: rgba(229, 231, 235, var(--bg-opacity));*/
}
&::-webkit-scrollbar-track {
background-color: none;
cursor: pointer;
/*background: red;*/
}
&::-webkit-scrollbar-thumb {
cursor: pointer;
background-color: #e8e8e8; /* #E7E5E4; */
border-radius: 50px;
/*outline: 1px solid grey;*/
}
}
.dark {
nav {
/* Global Scrollbar styling */
&::-webkit-scrollbar {
width: 7px;
cursor: pointer;
/*background-color: rgba(229, 231, 235, var(--bg-opacity));*/
}
&::-webkit-scrollbar-track {
background-color: none;
cursor: pointer;
/*background: red;*/
}
&::-webkit-scrollbar-thumb {
cursor: pointer;
background-color: #333; /* #E7E5E4; */
border-radius: 50px;
/*outline: 1px solid grey;*/
}
}
}
</style>
================================================
FILE: docs/src/components/DocNextStep.vue
================================================
<template>
<div class="pt-4">
<h2 class="text-xl">Next Step</h2>
<p v-if="intro">{{ intro }}</p>
<a :href="href" class="mt-8 bg-accent-800 w-full flex items-start p-4 rounded text-white">
<svg
class="w-5 h-5 mr-2 mt-1 flex-shrink-0"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg"
>
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 5l7 7m0 0l-7 7m7-7H3"></path>
</svg>
<div class="NextTitle flex flex-col">
<span class="text-lg font-semibold flex">{{ title }}</span>
<span class="mt-2 text-sm">{{ description }}</span>
</div>
</a>
</div>
</template>
<script lang="ts" setup>
import { computed } from 'vue';
import { trim, trimEnd } from 'lodash-es';
const props = defineProps<{
title: string;
description: string;
path: string;
intro: string;
}>();
const href = computed(() => {
return `${trimEnd(import.meta.env.BASE_URL, '/')}/${trim(props.path, '/')}/`;
});
</script>
<style lang="postcss" scoped>
h2 {
@apply font-semibold mb-8 relative;
transform: translateX(2ch);
&::before {
@apply absolute text-accent-800;
margin-left: -2ch;
content: '#';
}
@screen lg {
transform: none;
}
}
a {
.NextTitle {
transition: transform 0.3s ease-in-out;
}
&:hover {
.NextTitle {
transform: translate3d(10px, 0, 0);
}
}
}
</style>
================================================
FILE: docs/src/components/DocSearch.vue
================================================
<template>
<div>
<button
type="button"
class="border border-gray-200 hover:border-gray-300 dark:border-carbon dark:bg-gray-600 dark:hover:border-accent-800 dark:hover:border-opacity-50 flex items-center px-4 py-2 rounded-md w-full"
@click="onClick"
>
<svg
width="24"
height="24"
fill="none"
aria-hidden="true"
class="mr-3 flex-none text-gray-300 dark:text-gray-400"
>
<path
d="m19 19-3.5-3.5"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
></path>
<circle
cx="11"
cy="11"
r="6"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
></circle>
</svg>
<span class="text-sm text-gray-400 dark:text-gray-300"> Search Docs...</span>
<span class="ml-auto flex items-center text-xs text-gray-500 dark:text-gray-300 space-x-1">
<kbd class="bg-gray-200 dark:bg-gray-500 p-1 shadow flex-shrink-0 w-4 h-4 flex items-center justify-center"
>⌘</kbd
>
<kbd class="bg-gray-200 dark:bg-gray-500 p-1 shadow flex-shrink-0 w-4 h-4 flex items-center justify-center"
>K</kbd
>
</span>
</button>
<div id="docsearch" class="hidden"></div>
</div>
</template>
<script lang="ts" setup>
import { onMounted } from 'vue';
import config from '@/config';
import docsearch from '@docsearch/js';
function stripTrailingSlash(url: string) {
return url.replace(/\/$|\/(?=\?)|\/(?=#)/g, '');
}
function getRelativePath(absoluteUrl: string) {
const { pathname, hash } = new URL(absoluteUrl);
const url = pathname + hash;
return stripTrailingSlash(url);
}
function initialize(userOptions) {
docsearch({
...userOptions,
container: '#docsearch',
debug: process.env.NODE_ENV !== 'production',
transformItems: items => {
return items.map(item => {
return {
...item,
url: getRelativePath(item.url),
};
});
},
});
}
onMounted(() => {
initialize(config.algolia);
});
function onClick() {
(document.querySelector('#docsearch button') as HTMLElement)?.click();
}
</script>
<style lang="postcss">
@import '@docsearch/css';
.DocSearch {
font-family: Arial, Helvetica, sans-serif;
--docsearch-primary-color: var(--accent);
--docsearch-highlight-color: var(--docsearch-primary-color);
--docsearch-text-color: var(--color-gray-200);
--docsearch-modal-background: #f6f6f6;
--docsearch-searchbox-shadow: inset 0 0 0 2px var(--docsearch-primary-color);
--docsearch-searchbox-background: #e8e8e8;
--docsearch-searchbox-focus-background: #e8e8e8;
--docsearch-hit-color: var(--color-gray-200);
--docsearch-muted-color: var(--color-gray-500);
--docsearch-logo-color: var(--accent);
}
.DocSearch-Button {
@apply w-full ml-0 rounded-md px-3 !important;
}
.DocSearch-Button-Placeholder {
@apply px-3 !important;
}
.DocSearch-Screen-Icon > svg {
display: inline !important;
}
.dark {
.DocSearch {
--docsearch-text-color: #fff;
--docsearch-container-background: rgba(9, 10, 17, 0.8);
--docsearch-modal-background: hsl(240 6% 9%);
--docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;
--docsearch-searchbox-background: hsl(0 0% 29%);
--docsearch-searchbox-focus-background: hsl(0 0% 29%);
--docsearch-hit-color: #fff;
--docsearch-hit-shadow: none;
--docsearch-hit-background: #333;
--docsearch-key-gradient: linear-gradient(-26.5deg, #161618, #4a4a4a);
--docsearch-key-shadow: inset 0 -2px 0 0 #5a6069, inset 0 0 1px 1px #959595, 0 2px 2px 0 rgba(3, 4, 9, 0.3);
--docsearch-footer-background: hsl(240 6% 9%);
--docsearch-footer-shadow: inset 0 1px 0 0 rgba(73, 76, 106, 0.5), 0 -4px 8px 0 rgba(0, 0, 0, 0.2);
--docsearch-logo-color: var(--accent);
--docsearch-muted-color: var(--color-gray-500);
}
.DocSearch-NoResults,
.DocSearch-Footer,
.DocSearch-Help,
.DocSearch-Reset {
color: #e8e8e8;
}
}
</style>
================================================
FILE: docs/src/components/DocTip.vue
================================================
<template>
<div
class="p-6 rounded my-8 border-l-4 bg-gray-100 dark:bg-zinc-800"
:class="{
'border-accent-800 text-accent-800': !type || type === 'tip',
'border-warning text-warning': type === 'warn',
'border-error text-error': type === 'danger',
}"
>
<div class="flex flex-row items-center">
<svg v-if="['danger', 'warn'].includes(type)" fill="currentColor" class="h-6 w-6 mr-2" viewBox="0 0 20 20">
<path
fill-rule="evenodd"
d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z"
clip-rule="evenodd"
></path>
</svg>
<svg v-if="type === 'tip' || !type" class="h-6 w-6 mr-2" fill="currentColor" viewBox="0 0 20 20">
<path
d="M11 3a1 1 0 10-2 0v1a1 1 0 102 0V3zM15.657 5.757a1 1 0 00-1.414-1.414l-.707.707a1 1 0 001.414 1.414l.707-.707zM18 10a1 1 0 01-1 1h-1a1 1 0 110-2h1a1 1 0 011 1zM5.05 6.464A1 1 0 106.464 5.05l-.707-.707a1 1 0 00-1.414 1.414l.707.707zM5 10a1 1 0 01-1 1H3a1 1 0 110-2h1a1 1 0 011 1zM8 16v-1h4v1a2 2 0 11-4 0zM12 14c.015-.34.208-.646.477-.859a4 4 0 10-4.954 0c.27.213.462.519.476.859h4.002z"
></path>
</svg>
<p v-if="title" class="font-bold text-base">{{ title }}</p>
<p v-else class="font-bold text-base uppercase">{{ type || 'tip' }}</p>
</div>
<div class="mt-4 text-black dark:text-white">
<slot />
</div>
</div>
</template>
<script setup lang="ts">
defineProps<{
title?: string;
type?: 'tip' | 'warn' | 'danger';
}>();
</script>
================================================
FILE: docs/src/components/DocToc.vue
================================================
<template>
<nav class="py-4 overflow-y-auto overscroll-y-contain" v-show="headings.length">
<p class="font-bold text-xs uppercase text-gray-400">On this page</p>
<ul class="mt-4 space-y-1 text-sm">
<li v-for="heading in headings" :key="heading.slug" :class="{ 'ml-4': heading.depth === 3 }">
<a class="inline-block py-1" :href="`#${heading.slug}`">{{ heading.text }}</a>
</li>
</ul>
</nav>
</template>
<script setup lang="ts">
import { computed } from 'vue';
const props = defineProps<{
headings: { depth: number; slug: string; text: string }[];
}>();
const headings = computed(() => {
return props.headings.filter(h => h.depth <= 3 && h.depth !== 1);
});
</script>
<style lang="postcss" scoped>
nav {
a {
@screen motion {
transition: transform 0.3s ease-in-out, color 0.2s ease-in-out;
}
&:hover {
@apply text-accent-800;
@screen motion {
transform: translate3d(10px, 0, 0);
}
}
}
}
nav {
max-height: calc(80vh - 225px);
a {
@screen motion {
transition: color 0.2s ease-in-out;
}
&:hover {
@apply text-accent-800;
}
&[aria-current='page'] {
@apply text-accent-800;
}
}
/* Global Scrollbar styling */
&::-webkit-scrollbar {
width: 7px;
cursor: pointer;
/*background-color: rgba(229, 231, 235, var(--bg-opacity));*/
}
&::-webkit-scrollbar-track {
background-color: none;
cursor: pointer;
/*background: red;*/
}
&::-webkit-scrollbar-thumb {
cursor: pointer;
background-color: #e8e8e8; /* #E7E5E4; */
border-radius: 50px;
/*outline: 1px solid grey;*/
}
}
.dark {
nav {
/* Global Scrollbar styling */
&::-webkit-scrollbar {
width: 7px;
cursor: pointer;
/*background-color: rgba(229, 231, 235, var(--bg-opacity));*/
}
&::-webkit-scrollbar-track {
background-color: none;
cursor: pointer;
/*background: red;*/
}
&::-webkit-scrollbar-thumb {
cursor: pointer;
background-color: #333; /* #E7E5E4; */
border-radius: 50px;
/*outline: 1px solid grey;*/
}
}
}
</style>
================================================
FILE: docs/src/components/EditPage.vue
================================================
<template>
<div class="flex items-center">
<a
:href="pageLink"
target="_blank"
rel="noopener"
class="flex items-center text-sm font-bold text-carbon dark:text-gray-400"
>
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"
></path>
</svg>
<span class="ml-2">Edit This Page on GitHub</span>
</a>
</div>
</template>
<script lang="ts" setup>
import { computed } from 'vue';
const props = defineProps<{
path: string;
}>();
const pageLink = computed(() => {
const path = props.path.replace(/\/$/g, '');
return `https://github.com/logaretm/vee-validate/edit/main/${path}`;
});
</script>
================================================
FILE: docs/src/components/ExpandTransition.vue
================================================
<template>
<transition name="expand" :appear="appear" @enter="enter" @after-enter="afterEnter" @leave="leave">
<slot />
</transition>
</template>
<script>
export default {
name: 'TransitionExpand',
props: {
appear: {
type: Boolean,
default: false,
},
},
methods: {
enter(element) {
const width = getComputedStyle(element).width;
element.style.width = width;
element.style.position = 'absolute';
element.style.visibility = 'hidden';
element.style.height = 'auto';
requestAnimationFrame(() => {
const height = getComputedStyle(element).height;
element.style.width = null;
element.style.position = null;
element.style.visibility = null;
element.style.height = 0;
requestAnimationFrame(() => {
element.style.height = height;
});
});
},
afterEnter(element) {
element.style.height = 'auto';
},
leave(element) {
const height = getComputedStyle(element).height;
element.style.height = height;
// Force repaint to make sure the
// animation is triggered correctly.
// eslint-disable-next-line no-unused-expressions
getComputedStyle(element).height;
setTimeout(() => {
element.style.height = 0;
});
},
},
};
</script>
<style lang="postcss" scoped>
.expand-enter-active,
.expand-leave-active {
transition-property: opacity, height;
transition-duration: 0.3s;
transition-timing-function: ease-in-out;
overflow: hidden;
}
.expand-enter,
.expand-leave-to {
height: 0;
}
* {
will-change: height;
transform: translateZ(0);
backface-visibility: hidden;
perspective: 1000px;
}
</style>
================================================
FILE: docs/src/components/FeatureCard.vue
================================================
<template>
<div
ref="elementRef"
class="FeatureCard bg-gradient-to-br from-gray-200 to-gray-100 dark:from-zinc-800 dark:to-zinc-900 p-6 rounded-3xl font-display shadow-sm"
>
<h3 class="text-xl font-bold z-10">{{ feature.title }}</h3>
<p class="z-10 mt-4 font-display font-medium text-gray-600 dark:text-gray-300" v-html="feature.details" />
</div>
</template>
<script setup lang="ts">
import { shallowRef } from 'vue';
import { useEventListener } from '@vueuse/core';
const props = defineProps<{
feature: {
title: string;
details: string;
};
}>();
const elementRef = shallowRef<HTMLElement>();
useEventListener(
elementRef,
'mousemove',
evt => {
if (!elementRef.value) {
return;
}
const { x, y } = elementRef.value.getBoundingClientRect();
elementRef.value.style.setProperty('--x', `${evt.clientX - x}px`);
elementRef.value.style.setProperty('--y', `${evt.clientY - y}px`);
},
{ passive: true },
);
</script>
<style lang="postcss" scoped>
.FeatureCard {
@apply relative;
&:before {
@apply pointer-events-none absolute select-none rounded-3xl opacity-0;
z-index: -1;
content: '';
inset: -1px;
transition-property: opacity;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 0.3s;
animation-duration: 0.3s;
background: radial-gradient(200px circle at var(--x) var(--y), #009f53 0, #06d77b 0, #009f53 25%, transparent 80%);
}
&:hover:before {
@apply opacity-100;
}
}
</style>
================================================
FILE: docs/src/components/FloatingMenu.vue
================================================
<template>
<slot name="trigger" :toggle="onMenuToggle" :isOpen="isOpen" />
<div ref="menuRef" class="fixed z-40 max-w-xs top-0 left-0">
<transition name="menu">
<div
v-if="isOpen"
class="bg-white shadow border border-gray-200 dark:bg-zinc-800 dark:border-zinc-700 p-3 rounded-md"
>
<slot name="menu" />
</div>
</transition>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { onClickOutside } from '@vueuse/core';
import { computePosition, Placement, offset } from '@floating-ui/dom';
const props = defineProps<{
placement?: Placement;
}>();
const menuRef = ref<HTMLElement>();
const isOpen = ref(false);
async function updateStyle(reference: HTMLElement) {
if (!menuRef.value) {
return;
}
const { x, y } = await computePosition(reference, menuRef.value, {
strategy: 'fixed',
placement: props.placement || 'bottom',
middleware: [offset({ mainAxis: 10 })],
});
menuRef.value.style.transform = `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`;
}
function onMenuToggle(e: Event) {
isOpen.value = !isOpen.value;
if (isOpen.value) {
updateStyle(e.target as HTMLElement);
}
}
onClickOutside(menuRef, () => {
isOpen.value = false;
});
</script>
<style scoped lang="postcss">
.menu-enter-active,
.menu-leave-active {
transition: opacity 0.2s ease-in-out, transform 0.2s ease-in-out;
}
.menu-enter-from,
.menu-leave-to {
opacity: 0;
transform: scale(0.8);
}
</style>
================================================
FILE: docs/src/components/Icon.vue
================================================
<template>
<svg class="icon flex-shrink-0">
<use :xlink:href="`${basePath}#icon-${name}`"></use>
</svg>
</template>
<script setup lang="ts">
const props = defineProps<{
name: string;
}>();
const basePath = import.meta.env.DEV ? '' : '/v5/sprite.svg';
</script>
================================================
FILE: docs/src/components/LiveExample.vue
================================================
<template>
<div ref="elRef"></div>
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue';
import sdk from '@stackblitz/sdk';
const props = defineProps<{
id: string;
previewOnly?: boolean;
clickToLoad?: boolean;
}>();
const elRef = ref<HTMLElement>();
onMounted(() => {
if (!elRef.value) {
return;
}
sdk.embedProjectId(elRef.value, props.id, {
forceEmbedLayout: true,
openFile: 'src/App.vue',
hideNavigation: true,
height: 500,
view: props.previewOnly ? 'preview' : undefined,
clickToLoad: props.clickToLoad,
});
});
</script>
================================================
FILE: docs/src/components/LogQueryStr.vue
================================================
<template>
<div>
Submitted data:
<pre>{{ queryObj }}</pre>
</div>
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue';
const queryObj = ref();
onMounted(() => {
try {
const query = new URLSearchParams(window.location.search);
queryObj.value = Object.fromEntries(query.entries());
} catch {
queryObj.value = { Error: 'Invalid query string in URL' };
}
});
</script>
<style scoped></style>
================================================
FILE: docs/src/components/MainPageExample.vue
================================================
<template>
<div class="mt-14 flex flex-col items-center">
<div
class="bg-gray-200 dark:bg-black max-w-xs p-1 rounded-md flex items-center gap-2 font-display font-semibold text-sm mb-8"
>
<button
type="button"
class="flavor-btn"
:aria-pressed="currentFlavor === 'components'"
@click="setFlavor('components')"
>
Components
</button>
<button
type="button"
class="flavor-btn"
:aria-pressed="currentFlavor === 'composition'"
@click="setFlavor('composition')"
>
Composition API
</button>
</div>
<div v-if="currentFlavor === 'components'" class="w-full">
<MdxRepl :files="{ 'App.vue': 'ComponentsBasic' }" />
</div>
<div v-else class="w-full">
<MdxRepl :files="{ 'App.vue': 'CompositionBasic' }" />
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import MdxRepl from './MdxRepl.vue';
const currentFlavor = ref<'components' | 'composition'>('components');
function setFlavor(flavor: (typeof currentFlavor)['value']) {
currentFlavor.value = flavor;
}
</script>
<style lang="postcss" scoped>
.flavor-btn {
@apply px-3 py-1.5 rounded-md hover:text-emerald-500 select-none;
&[aria-pressed='true'] {
@apply bg-emerald-500 dark:bg-emerald-600 text-white hover:text-white;
}
}
iframe {
@apply w-full min-h-[800px] rounded-md border-4 border-emerald-500 border-opacity-60;
}
</style>
================================================
FILE: docs/src/components/MdxRepl.vue
================================================
<template>
<div class="my-8 relative">
<Suspense v-if="editor">
<Repl :editor="editor" :files="files" />
<template #fallback>
<div class="bg-gray-200 dark:bg-zinc-950 w-full h-full rounded-md absolute inset-0"></div>
</template>
</Suspense>
<div v-else class="bg-gray-200 dark:bg-zinc-950 w-full h-full rounded-md absolute inset-0"></div>
</div>
</template>
<script setup lang="ts">
import { defineAsyncComponent, onMounted, shallowRef } from 'vue';
const Repl = defineAsyncComponent(() => import('./Repl.vue'));
const props = defineProps<{
files: Record<string, string>;
}>();
let editor = shallowRef();
onMounted(async () => {
editor.value = (await import('@vue/repl/codemirror-editor')).default;
});
</script>
================================================
FILE: docs/src/components/Repl.vue
================================================
<script setup lang="ts" async>
import { ref, version } from 'vue';
import { useFullscreen } from '@vueuse/core';
import { Repl, ReplStore } from '@vue/repl';
import { getViteProjectConfig } from '@/utils/examples';
import StackBlitzSdk from '@stackblitz/sdk';
const props = defineProps<{
files: Record<string, string>;
editor: any;
}>();
const containerRef = ref<HTMLElement>();
const { isFullscreen, toggle: toggleFullscreen } = useFullscreen(containerRef);
const files = await Promise.all(
Object.entries(props.files).map(async ([filename, componentName]) => {
const code = await import(`./examples/${componentName}.vue?raw`);
return [filename, code.default];
}),
);
const store = new ReplStore({
serializedState: btoa(JSON.stringify(Object.fromEntries(files))),
});
// pre-set import map
store.setImportMap({
imports: {
'vee-validate': 'https://unpkg.com/vee-validate@latest/dist/vee-validate.mjs',
'@vee-validate/i18n': 'https://unpkg.com/@vee-validate/i18n@latest/dist/vee-validate-i18n.esm.js',
'@vee-validate/rules': 'https://unpkg.com/@vee-validate/rules@latest/dist/vee-validate-rules.esm.js',
'property-expr': 'https://esm-repo.netlify.app/property-expr.esm.js',
'tiny-case': 'https://esm-repo.netlify.app/tiny-case.esm.js',
toposort: 'https://esm-repo.netlify.app/topsort.esm.js',
yup: 'https://unpkg.com/yup@1.2.0/index.esm.js',
zod: 'https://unpkg.com/zod@3.21.4/lib/index.mjs',
valibot: 'https://unpkg.com/valibot@1.0.0-beta.7/dist/index.js',
'@vue/devtools-api': 'https://unpkg.com/@vue/devtools-api@6.5.0/lib/esm/index.js',
vue: `https://unpkg.com/vue@${version}/dist/vue.esm-browser.prod.js`,
},
});
// use a specific version of Vue
store.setVueVersion(version);
function onForkClick() {
const exampleFiles = files.reduce(
(acc, file) => {
acc[file[0]] = file[1];
return acc;
},
{} as Record<string, string>,
);
StackBlitzSdk.openProject(getViteProjectConfig(exampleFiles), {
newWindow: true,
startScript: 'dev',
openFile: 'src/App.vue',
});
}
</script>
<template>
<div
class="flex flex-col border border-gray-300 dark:border-emerald-500 border-opacity-80 rounded-md shadow-sm overflow-hidden relative"
ref="containerRef"
>
<div class="flex items-center justify-end py-1.5 px-2 absolute z-10 right-0 h-[var(--header-height)]">
<button
type="button"
class="ml-1 p-1 hover:bg-white hover:bg-opacity-10 rounded"
title="Go full screen"
@click="toggleFullscreen"
>
<svg
class="w-4 h-4 text-white"
fill="currentColor"
viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg"
aria-hidden="true"
>
<path
v-if="!isFullscreen"
d="M13.28 7.78l3.22-3.22v2.69a.75.75 0 001.5 0v-4.5a.75.75 0 00-.75-.75h-4.5a.75.75 0 000 1.5h2.69l-3.22 3.22a.75.75 0 001.06 1.06zM2 17.25v-4.5a.75.75 0 011.5 0v2.69l3.22-3.22a.75.75 0 011.06 1.06L4.56 16.5h2.69a.75.75 0 010 1.5h-4.5a.747.747 0 01-.75-.75zM12.22 13.28l3.22 3.22h-2.69a.75.75 0 000 1.5h4.5a.747.747 0 00.75-.75v-4.5a.75.75 0 00-1.5 0v2.69l-3.22-3.22a.75.75 0 10-1.06 1.06zM3.5 4.56l3.22 3.22a.75.75 0 001.06-1.06L4.56 3.5h2.69a.75.75 0 000-1.5h-4.5a.75.75 0 00-.75.75v4.5a.75.75 0 001.5 0V4.56z"
></path>
<path
v-else
d="M3.28 2.22a.75.75 0 00-1.06 1.06L5.44 6.5H2.75a.75.75 0 000 1.5h4.5A.75.75 0 008 7.25v-4.5a.75.75 0 00-1.5 0v2.69L3.28 2.22zM13.5 2.75a.75.75 0 00-1.5 0v4.5c0 .414.336.75.75.75h4.5a.75.75 0 000-1.5h-2.69l3.22-3.22a.75.75 0 00-1.06-1.06L13.5 5.44V2.75zM3.28 17.78l3.22-3.22v2.69a.75.75 0 001.5 0v-4.5a.75.75 0 00-.75-.75h-4.5a.75.75 0 000 1.5h2.69l-3.22 3.22a.75.75 0 101.06 1.06zM13.5 14.56l3.22 3.22a.75.75 0 101.06-1.06l-3.22-3.22h2.69a.75.75 0 000-1.5h-4.5a.75.75 0 00-.75.75v4.5a.75.75 0 001.5 0v-2.69z"
></path>
</svg>
</button>
<button
type="button"
class="ml-1 p-1 hover:bg-white hover:bg-opacity-10 rounded"
title="Fork in StackBlitz"
@click="onForkClick"
>
<svg
class="w-4 h-4 text-white"
fill="currentColor"
viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg"
aria-hidden="true"
>
<path
d="M11.983 1.907a.75.75 0 00-1.292-.657l-8.5 9.5A.75.75 0 002.75 12h6.572l-1.305 6.093a.75.75 0 001.292.657l8.5-9.5A.75.75 0 0017.25 8h-6.572l1.305-6.093z"
></path>
</svg>
</button>
</div>
<Repl
:store="store"
:editor="editor"
:show-ts-config="false"
:showCompileOutput="false"
:ssr="false"
:showImportMap="false"
:class="{ 'no-files': files.length <= 1, 'is-fullscreen': isFullscreen }"
/>
</div>
</template>
<style lang="postcss" scoped>
.vue-repl {
@apply flex-grow;
--bg: #e8e8e8 !important;
--bg-soft: #e8e8e8 !important;
--border: hsl(0 0% 74%) !important;
--text-light: #000 !important;
--color-branding: #009f53 !important;
--color-branding-dark: #009f53 !important;
&:deep(iframe) {
margin: 0;
}
&:deep(.wrapper) {
&:has(.toggle) {
@apply hidden;
}
}
&:deep(.stretch) {
@apply items-stretch;
}
&:deep(.right) {
height: unset;
.active {
@apply border-none;
}
}
&:deep(.add) {
@apply hidden;
}
&:deep(.right .tab-buttons) {
@apply invisible;
}
&:deep(.output-container) {
@apply h-full;
}
&:deep(.editor-container) {
@apply h-full;
}
&.no-files {
&:deep(.file-selector) {
@apply hidden;
}
}
&:deep(.file .remove) {
@apply hidden;
}
&:deep(.CodeMirror) {
background-color: #f6f6f6;
color: var(--symbols);
--symbols: #2c3e50;
--base: #2c3e50;
--comment: #848486;
--keyword: #b2085f;
--string: #0a7a34;
--variable: #c25205;
--number: #9580ff;
--tags: #b2085f;
--brackets: var(--symbols);
--property: var(--symbols);
--attribute: #c25205;
--cursor: #fff;
--selected-bg: #454158;
--selected-bg-non-focus: rgba(255, 255, 255, 0.15);
}
&:deep(.CodeMirror-scroll) {
max-height: 500px;
}
&.is-fullscreen {
&:deep(.CodeMirror-scroll) {
max-height: unset;
}
}
}
.dark {
.vue-repl {
--bg: #1c1c21 !important;
--bg-soft: hsl(240 6% 9%) !important;
--border: #333 !important;
--text-light: #aaa !important;
--color-branding: #06d77b !important;
--color-branding-dark: #06d77b !important;
&:deep(.CodeMirror) {
color: var(--symbols);
background-color: #1c1c21;
--symbols: #f8f8f2;
--base: #f8f8f2;
--comment: #7970a9;
--keyword: #ff80bf;
--string: #ffff80;
--variable: #8aff80;
--number: #9580ff;
--tags: #ff80bf;
--brackets: var(--symbols);
--property: var(--symbols);
--attribute: #8aff80;
--cursor: #fff;
--selected-bg: #454158;
--selected-bg-non-focus: rgba(255, 255, 255, 0.15);
}
}
}
</style>
================================================
FILE: docs/src/components/SideMenu.vue
================================================
<template>
<transition name="slide">
<div v-if="modelValue" class="SideMenu lg:hidden">
<DocMenu :menu="menu" :current-url="currentUrl" />
</div>
</transition>
</template>
<script setup lang="ts">
import { watch } from 'vue';
import DocMenu from '@/components/DocMenu.vue';
const props = defineProps<{
modelValue: boolean;
menu: { title: string; pages: any[] }[];
currentUrl: string;
}>();
watch(
() => props.modelValue,
val => {
document.body.classList.toggle('overflow-hidden', val);
}
);
</script>
<style lang="postcss" scoped>
.SideMenu {
@apply fixed h-screen w-screen inset-0 z-20 overflow-y-auto bg-white dark:bg-dark dark:text-white text-dark flex flex-col overflow-hidden;
}
@screen motion {
.slide-enter-active,
.slide-leave-active {
transition: transform 0.25s ease-in-out, opacity 0.25s ease-in-out;
}
.slide-enter,
.slide-leave-to {
opacity: 0;
transform: translate3d(100%, 0, 0);
}
}
nav {
a {
transition: color 0.3s ease-in-out;
&::-moz-focus-inner {
border: 0;
}
&:hover {
@apply text-accent-800;
}
&:focus {
@apply text-accent-800;
outline: 2px dotted currentColor;
outline-offset: 2px;
}
&::after {
@apply absolute inset-0 w-full h-full;
border: 6px solid transparent;
transition: border-color 0.3s ease-in-out;
content: '';
}
&.active {
&::after {
transition: border-color 0.3s ease-in-out;
@apply border-accent-800;
}
}
}
}
</style>
================================================
FILE: docs/src/components/SideMenuButton.vue
================================================
<template>
<button
@click="$emit('update:modelValue', !modelValue)"
class="burger burger-squeeze"
aria-label="Menu"
:class="{ open: modelValue }"
>
<div class="burger-lines"></div>
</button>
</template>
<script setup lang="ts">
defineProps({
modelValue: {
type: Boolean,
required: true,
},
});
</script>
<style lang="postcss" scoped>
.burger {
height: 3em;
width: 3em;
font-size: 12px;
cursor: pointer;
-webkit-transition: 0.2s all;
-o-transition: 0.2s all;
transition: 0.2s all;
-webkit-tap-highlight-color: transparent;
&:focus {
outline: none;
}
}
.burger .burger-lines:after {
left: 0;
top: -1em;
}
.burger .burger-lines:before {
left: 1em;
top: 1em;
}
.burger:after {
content: '';
display: block;
position: absolute;
height: 150%;
width: 150%;
top: -25%;
left: -25%;
}
.burger .burger-lines {
top: 50%;
margin-top: -0.125em;
}
.burger .burger-lines,
.burger .burger-lines:after,
.burger .burger-lines:before {
pointer-events: none;
display: block;
content: '';
width: 100%;
border-radius: 0.25em;
background-color: #000;
height: 0.25em;
position: absolute;
-webkit-transform: rotate(0);
-ms-transform: rotate(0);
transform: rotate(0);
}
.dark {
.burger .burger-lines,
.burger .burger-lines:after,
.burger .burger-lines:before {
background-color: #fff;
}
}
.burger .burger-lines:after {
left: 0;
top: -1em;
}
.burger .burger-lines:before {
left: 1em;
top: 1em;
}
.burger.burger-squeeze .burger-lines:after,
.burger.burger-squeeze .burger-lines:before {
width: 2em;
}
@screen motion {
.burger.burger-squeeze .burger-lines,
.burger.burger-squeeze .burger-lines:after,
.burger.burger-squeeze .burger-lines:before {
-webkit-transition:
0.2s top 0.2s,
0.1s left,
0.2s transform,
0.4s background-color 0.2s;
-o-transition:
0.2s top 0.2s,
0.1s left,
0.2s transform,
0.4s background-color 0.2s;
transition:
0.2s top 0.2s,
0.1s left,
0.2s transform,
0.4s background-color 0.2s;
}
.burger.burger-squeeze.open .burger-lines,
.burger.burger-squeeze.open .burger-lines:after,
.burger.burger-squeeze.open .burger-lines:before {
-webkit-transition:
0.2s background-color,
0.2s top,
0.2s left,
0.2s transform 0.15s;
-o-transition:
0.2s background-color,
0.2s top,
0.2s left,
0.2s transform 0.15s;
transition:
0.2s background-color,
0.2s top,
0.2s left,
0.2s transform 0.15s;
}
}
.burger.burger-squeeze.open .burger-lines {
background-color: transparent;
}
.burger.burger-squeeze.open .burger-lines:before,
.burger.burger-squeeze.open .burger-lines:after {
left: 0.5em;
top: 0px;
}
.burger.burger-squeeze.open .burger-lines:before {
-webkit-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
transform: rotate(-45deg);
}
.burger.burger-squeeze.open .burger-lines:after {
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
</style>
================================================
FILE: docs/src/components/SiteHead.astro
================================================
---
import { generateLinks, generateMetaTags, generateSocialImage } from '@/utils/seo';
import config from '@/config';
const { frontmatter } = Astro.props;
const title = frontmatter?.title || 'VeeValidate: Painless Vue.js forms';
const description = frontmatter?.description || 'Painless Vue.js forms';
const path = frontmatter?.url || '/v5/';
const image = generateSocialImage({
title: title,
tagline: description,
imagePublicID: 'open-source/vee-validate-share.png',
});
const metaTags = generateMetaTags({
title,
description,
url: `${config.appURL}${path}`,
image,
});
const links = generateLinks({
url: `${config.appURL}${path}`,
});
---
<head>
<title>{title}</title>
<meta charset="utf-8" />
<link rel="icon" type="image/x-icon" href="/v5/img/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
{metaTags.map(t => <meta content={t.content} name={t.name} property={t.property} />)}
{links.map(t => <link href={t.href} rel={t.rel} />)}
<script is:inline src="/v5/loadTheme.js"></script>
<script type="text/partytown" src="https://www.googletagmanager.com/gtag/js?id=G-T7VXTJ0MFH"></script>
<script type="text/partytown">
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-T7VXTJ0MFH');
</script>
<script async src="https://media.bitterbrains.com/main.js?from=AWADDEV&type=top"></script>
</head>
================================================
FILE: docs/src/components/SponsorButton.vue
================================================
<template>
<a
target="_blank"
rel="noopener"
href="https://github.com/sponsors/logaretm"
class="flex items-center group text-white bg-pink-600 rounded-md shadow hover:bg-pink-700 focus:ring focus:ring-pink-500 focus:outline-none"
:class="{ 'px-3.5 py-1': !size || size === 'sm', 'px-5 py-2.5': size === 'lg' }"
>
<svg
class="stroke-current transform transition duration-200 group-hover:scale-110"
:class="{ 'w-5 h-5': !size || size === 'sm', 'w-6 h-6': size === 'lg' }"
fill="none"
viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"
></path>
</svg>
<span class="ml-1 font-display" :class="{ 'text-sm': !size || size === 'sm', 'font-medium': size === 'lg' }"
>Sponsor</span
>
</a>
</template>
<script setup lang="ts">
defineProps<{
size?: 'sm' | 'lg';
}>();
</script>
================================================
FILE: docs/src/components/SpriteSheet.astro
================================================
---
const iconModules = import.meta.env.DEV ? await import.meta.glob('../icons/*.svg', { as: 'raw' }) : {};
const icons = import.meta.env.DEV
? await Promise.all(
Object.keys(iconModules).map(k => {
return iconModules[k]().then(content => {
const id = k.split('/').pop().split('.').shift();
return content.replace('<svg', `<symbol id="icon-${id}"`).replace('</svg>', '</symbol>');
});
})
)
: [];
---
{
import.meta.env.DEV && (
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="hidden">
{icons.map(icon => {
return <Fragment set:html={icon} />;
})}
</svg>
)
}
================================================
FILE: docs/src/components/StarCount.vue
================================================
<template>
<a
href="https://github.com/logaretm/vee-validate/stargazers"
target="_blank"
rel="noopener"
class="flex items-center text-xs font-bold font-body border-2 text-zinc-400 border-zinc-400 rounded-full px-3 py-1.5 hover:border-emerald-500 hover:text-emerald-500 select-none transition-colors duration-300"
>
<Icon name="star" class="w-4 h-4 mr-1" />
{{ format(count) }}
</a>
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue';
import Icon from '@/components/Icon.vue';
import { fetchStarCount } from '@/utils/github';
const props = defineProps<{
initialCount?: number;
}>();
function format(number: number) {
return number.toLocaleString();
}
const count = ref(props.initialCount || 10000);
onMounted(async () => {
count.value = (await fetchStarCount()) || count.value;
});
</script>
================================================
FILE: docs/src/components/TheHeader.vue
================================================
<template>
<header class="pt-3 pb-3 sticky top-0 dark:bg-gray-700 bg-white z-20 border-b dark:border-gray-600 border-gray-200">
<div
class="px-4 lg:px-8 py-2 lg:py-0 text-sm lg:text-base w-full text-black bg-warning fixed font-bold bottom-0 lg:top-0 lg:h-10 flex items-center"
v-if="displayWarning"
>
<p class="ml-auto">
⛔️ HEADS UP: You are viewing the documentation for v4.x (Vue 3.0) For Vue 2.x head over to
<a href="https://vee-validate.logaretm.com/v3/" class="underline"> v3.x documentation</a>
</p>
<button class="ml-auto" title="close warning" @click="hideWarning">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
</svg>
</button>
</div>
<svg style="width: 0; height: 0; position: absolute" aria-hidden="true" focusable="false">
<linearGradient id="logo-fill" x2="1" y2="1">
<stop offset="0" stop-color="#06d77b"></stop>
<stop offset="1" stop-color="#009f53"></stop>
</linearGradient>
</svg>
<div class="flex items-center header__content px-6 lg:px-10" :class="{ 'lg:mt-8': displayWarning }">
<a class="mr-auto flex items-center" href="/v5/">
<Icon name="logo" class="h-8 w-8 lg:w-10 lg:h-10 logo" />
<span
class="ml-2 font-display text-xl bg-clip-text bg-gradient-to-r from-emerald-400 to-emerald-500 text-transparent font-semibold"
>VeeValidate</span
>
</a>
<SideMenuButton class="ml-auto block lg:hidden relative z-30" v-model="isMenuOpen" />
<SideMenu v-model="isMenuOpen" :menu="menu" :current-url="currentUrl" />
<VersionSwitcher />
<a
href="https://github.com/logaretm/vee-validate/"
target="_blank"
rel="noopener"
class="ml-4 transition-opacity opacity-50 dark:text-white hover:opacity-100 text-gray-700 duration-200 hidden lg:block"
>
<Icon name="github" class="fill-current w-5 h-5" />
</a>
<ThemeSwitcher class="ml-4 hidden lg:flex" />
</div>
</header>
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue';
import SideMenuButton from '@/components/SideMenuButton.vue';
import Icon from '@/components/Icon.vue';
import ThemeSwitcher from '@/components/ThemeSwitcher.vue';
import SideMenu from '@/components/SideMenu.vue';
import VersionSwitcher from '@/components/VersionSwitcher.vue';
const props = defineProps<{
menu: { title: string; pages: any[] }[];
currentUrl: string;
}>();
const isMenuOpen = ref(false);
const displayWarning = ref(false);
onMounted(() => {
displayWarning.value = !localStorage.getItem('hide_version_warning');
});
function hideWarning() {
displayWarning.value = false;
localStorage.setItem('hide_version_warning', '1');
}
</script>
<style lang="postcss" scoped>
.header__content {
max-width: 1300px;
@apply mx-auto;
}
.logo {
fill: url(#logo-fill) #06d77b;
}
</style>
================================================
FILE: docs/src/components/ThemeSwitcher.vue
================================================
<template>
<button class="opacity-50 transition-opacity duration-200 hover:opacity-100" @click="isDark = !isDark">
<transition name="popup" mode="out-in">
<Icon v-if="isDark" name="dark" class="w-6 h-6 fill-current text-white" />
<Icon v-else name="light" class="w-6 h-6 fill-current text-dark" />
</transition>
</button>
</template>
<script setup lang="ts">
import { onMounted, ref, watch } from 'vue';
import Icon from '@/components/Icon.vue';
const isDark = ref(false);
watch(isDark, val => {
document.documentElement.classList.toggle('dark', val);
localStorage.setItem('theme', val ? 'dark' : 'light');
});
onMounted(() => {
const themeSetting = localStorage.getItem('theme');
isDark.value = themeSetting === 'dark';
});
</script>
<style lang="postcss" scoped>
button {
@apply outline-none items-center justify-center relative;
min-width: 24px;
min-height: 24px;
}
svg {
@apply absolute;
}
@screen motion {
.popup-enter-active,
.popup-leave-active {
transition: transform 0.5s ease-in-out, opacity 0.3s ease-in-out;
}
.popup-enter,
.popup-leave-to {
transform: translate3d(0, -50px, 0);
opacity: 0;
}
}
</style>
================================================
FILE: docs/src/components/UiLibraries.vue
================================================
<template>
<div class="grid grid-flow-col justify-center content-center py-8 gap-10">
<div v-for="lib in libraries" :key="lib.name">
<a :href="lib.link" :title="lib.name" target="_blank" rel="noopener">
<img :src="lib.logoLight" loading="lazy" class="dark:hidden w-24 h-24" :alt="lib.name" />
<img :src="lib.logoDark" loading="lazy" class="hidden dark:block w-24 h-24" :alt="lib.name" />
</a>
</div>
</div>
</template>
<script setup lang="ts">
const libraries = [
{
name: 'Shadcn Vue',
link: 'https://www.shadcn-vue.com/docs/components/form',
logoLight: '/v5/img/shadcn.svg',
logoDark: '/v5/img/shadcn.svg',
},
{
name: 'Vuetify',
link: 'https://vuetifyjs.com/en/components/forms/#vee-validate',
logoLight: 'https://cdn.vuetifyjs.com/docs/images/logos/vuetify-logo-v3-light.svg',
logoDark: 'https://cdn.vuetifyjs.com/docs/images/logos/vuetify-logo-v3-light.svg',
},
];
</script>
================================================
FILE: docs/src/components/VersionSwitcher.vue
================================================
<template>
<FloatingMenu>
<template #trigger="{ toggle, isOpen }">
<button
type="button"
@click="toggle"
class="group hidden lg:flex items-center text-sm font-semibold text-gray-400 hover:text-gray-500 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600 px-2 py-1 rounded-md font-display"
:class="{ 'bg-gray-200 text-gray-500 dark:bg-gray-600 dark:text-gray-400': isOpen }"
>
{{ versions[0].text }}
<svg class="ml-2 fill-current h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
<path d="M9.293 12.95l.707.707L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z"></path>
</svg>
</button>
</template>
<template #menu>
<ul class="text-sm space-y-1">
<li
v-for="(version, idx) in versions"
:key="idx"
@click="onChange(version)"
class="hover:bg-gray-200 hover:dark:bg-gray-500 hover:dark:text-white cursor-pointer select-none px-2 py-1 rounded-md text-gray-600 dark:text-gray-200 font-semibold font-display"
>
<div class="flex items-center">
<span class="text-sm"> {{ version.text }}</span>
<span class="ml-3 text-xs text-gray-400">Vue {{ version.vueVersion }}</span>
</div>
</li>
</ul>
</template>
</FloatingMenu>
</template>
<script setup lang="ts">
import FloatingMenu from '@/components/FloatingMenu.vue';
const versions = [
{
text: 'v5.x',
vueVersion: '3.x',
link: 'https://vee-validate.logaretm.com/v5/',
},
{
text: 'v4.x',
vueVersion: '3.x',
link: 'https://vee-validate.logaretm.com/v4/',
},
{
text: 'v3.x',
vueVersion: '2.x',
link: 'https://vee-validate.logaretm.com/v3/',
},
{
text: 'v2.x',
vueVersion: '2.x',
link: 'https://vee-validate.logaretm.com/v2/',
},
];
function onChange(version: (typeof versions)[0]) {
window.location.href = version.link;
}
</script>
================================================
FILE: docs/src/components/examples/ComponentsBasic.vue
================================================
<script setup>
import { Field, Form, ErrorMessage } from 'vee-validate';
import * as yup from 'yup';
const schema = yup.object({
email: yup.string().email().required(),
password: yup.string().min(6).required(),
});
function onSubmit(values) {
alert(JSON.stringify(values, null, 2));
}
</script>
<template>
<Form :validation-schema="schema" @submit="onSubmit">
<Field name="email" type="email" />
<ErrorMessage name="email" />
<Field name="password" type="password" />
<ErrorMessage name="password" />
<button>Submit</button>
</Form>
</template>
================================================
FILE: docs/src/components/examples/CompositionBasic.vue
================================================
<script setup>
import { useForm } from 'vee-validate';
import * as yup from 'yup';
const schema = yup.object({
email: yup.string().email().required(),
password: yup.string().min(6).required(),
});
const { defineField, errors, handleSubmit } = useForm({
validationSchema: schema,
});
const [email, emailAttrs] = defineField('email');
const [password, passwordAttrs] = defineField('password');
const onSubmit = handleSubmit(values => {
alert(JSON.stringify(values, null, 2));
});
</script>
<template>
<form @submit="onSubmit">
<input v-model="email" v-bind="emailAttrs" name="email" type="email" />
<span>{{ errors.email }}</span>
<input v-model="password" v-bind="passwordAttrs" name="password" type="password" />
<span>{{ errors.password }}</span>
<button>Submit</button>
</form>
</template>
================================================
FILE: docs/src/components/examples/CompositionComponentBindsBasic01.vue
================================================
<script setup>
import { useForm } from 'vee-validate';
import CustomInput from './CustomInput.vue';
const { values, defineField } = useForm();
const [email, emailProps] = defineField('email');
</script>
<template>
<CustomInput v-model="email" v-bind="emailProps" />
<pre>values: {{ values }}</pre>
</template>
================================================
FILE: docs/src/components/examples/CompositionComponentBindsBasic02.vue
================================================
<script setup>
import { useForm } from 'vee-validate';
import * as yup from 'yup';
import CustomInput from './CustomInput.vue';
const { values, errors, defineField } = useForm({
validationSchema: yup.object({
email: yup.string().email().required(),
}),
});
const [email, emailProps] = defineField('email');
</script>
<template>
<CustomInput v-model="email" v-bind="emailProps" />
<pre>errors: {{ errors }}</pre>
<pre>values: {{ values }}</pre>
</template>
================================================
FILE: docs/src/components/examples/CompositionComponentBindsBasic03.vue
================================================
<script setup>
import { useForm } from 'vee-validate';
import * as yup from 'yup';
import CustomInput from './CustomInput.vue';
const { values, errors, defineField } = useForm({
validationSchema: yup.object({
email: yup.string().email().required(),
}),
});
const [email, emailProps] = defineField('email', {
validateOnModelUpdate: false,
});
</script>
<template>
<CustomInput v-model="email" v-bind="emailProps" />
<div>{{ errors.email }}</div>
<pre>values: {{ values }}</pre>
</template>
================================================
FILE: docs/src/components/examples/CompositionComponentBindsBasic04.vue
================================================
<script setup>
import { useForm } from 'vee-validate';
import * as yup from 'yup';
import CustomInput from './CustomInput.vue';
const { values, errors, defineField } = useForm({
validationSchema: yup.object({
email: yup.string().email().required(),
}),
});
const [email, emailProps] = defineField('email', {
props: state => ({
error: state.errors[0],
}),
});
</script>
<template>
<CustomInput v-model="email" v-bind="emailProps" />
<pre>values: {{ values }}</pre>
<pre>errors: {{ errors }}</pre>
</template>
================================================
FILE: docs/src/components/examples/CompositionComponentBindsBasic05.vue
================================================
<script setup>
import { useForm } from 'vee-validate';
import * as yup from 'yup';
const { values, errors, defineField } = useForm({
validationSchema: yup.object({
email: yup.string().email().required(),
}),
});
const [email, emailAttrs] = defineField('email', state => {
return {
// validate aggressively as long as there are errors on the input
validateOnModelUpdate: state.errors.length > 0,
};
});
</script>
<template>
<input v-model="email" v-bind="emailAttrs" />
<div>{{ errors.email }}</div>
<pre>values: {{ values }}</pre>
</template>
================================================
FILE: docs/src/components/examples/CompositionCustomField01.vue
================================================
<template>
<form @submit="onSubmit">
<InputText name="firstName" />
<InputText name="lastName" />
<InputText name="email" type="email" />
<InputText name="password" type="password" />
<InputText name="passwordConfirm" type="password" />
<button>Submit</button>
</form>
</template>
<script setup>
import { useForm } from 'vee-validate';
import * as yup from 'yup';
import InputText from './InputText.vue';
const { handleSubmit } = useForm({
validationSchema: yup.object({
firstName: yup.string().required(),
lastName: yup.string().required(),
email: yup.string().required().email(),
password: yup.string().required().min(6),
passwordConfirm: yup
.string()
.required()
.min(6)
.oneOf([yup.ref('password')]),
}),
});
const onSubmit = handleSubmit(values => {
alert(JSON.stringify(values, null, 2));
});
</script>
================================================
FILE: docs/src/components/examples/CompositionCustomField02.vue
================================================
<template>
<InputText name="email" type="email" v-model="email" />
<pre>Model: {{ email }}</pre>
</template>
<script setup>
import { ref } from 'vue';
import InputText from './InputText.vue';
const email = ref('');
</script>
================================================
FILE: docs/src/components/examples/CompositionCustomField03.vue
================================================
<template>
<InputText name="email" type="email" />
</template>
<script setup>
import { useForm } from 'vee-validate';
import * as yup from 'yup';
import InputText from './InputText.vue';
useForm({
validationSchema: yup.object({
email: yup.string().required().email(),
}),
});
</script>
================================================
FILE: docs/src/components/examples/CompositionCustomField04.vue
================================================
<template>
<form @submit="onSubmit">
<InputText name="firstName" />
<InputText name="lastName" />
<InputText name="email" type="email" />
<InputText name="password" type="password" />
<InputText name="passwordConfirm" type="password" />
<button>Submit</button>
</form>
</template>
<script setup>
import { useForm } from 'vee-validate';
import * as yup from 'yup';
import InputText from './InputText.vue';
const { handleSubmit } = useForm({
validationSchema: yup.object({
firstName: yup.string().required().min(1),
lastName: yup.string().required().min(2),
email: yup.string().required().email(),
password: yup.string().required().min(6),
passwordConfirm: yu
gitextract_83vgg6c_/ ├── .changeset/ │ ├── README.md │ ├── config.json │ ├── evil-loops-shine.md │ ├── gentle-geckos-share.md │ ├── happy-wasps-rush.md │ ├── pre.json │ ├── pretty-onions-add.md │ ├── revert-number-to-string.md │ ├── six-parrots-flash.md │ ├── smart-needles-own.md │ └── stupid-friends-relate.md ├── .circleci/ │ └── config.yml ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── Feature_request.md │ │ └── bug_report.yaml │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── ci.yml │ └── release.yml ├── .gitignore ├── .husky/ │ ├── .gitignore │ ├── commit-msg │ └── pre-commit ├── .prettierrc ├── CHANGELOG.md ├── CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── commitlint.config.mjs ├── docs/ │ ├── .gitignore │ ├── CHANGELOG.md │ ├── _redirects │ ├── astro.config.ts │ ├── baseLink.ts │ ├── highlight.ts │ ├── package.json │ ├── postcss.config.js │ ├── public/ │ │ ├── img/ │ │ │ ├── browserconfig.xml │ │ │ └── manifest.json │ │ └── loadTheme.js │ ├── scripts/ │ │ └── afterBuild.js │ ├── src/ │ │ ├── components/ │ │ │ ├── Ad.vue │ │ │ ├── CodeTitle.vue │ │ │ ├── ContentWrapper.vue │ │ │ ├── DocBadge.vue │ │ │ ├── DocFlavor.vue │ │ │ ├── DocMenu.vue │ │ │ ├── DocNextStep.vue │ │ │ ├── DocSearch.vue │ │ │ ├── DocTip.vue │ │ │ ├── DocToc.vue │ │ │ ├── EditPage.vue │ │ │ ├── ExpandTransition.vue │ │ │ ├── FeatureCard.vue │ │ │ ├── FloatingMenu.vue │ │ │ ├── Icon.vue │ │ │ ├── LiveExample.vue │ │ │ ├── LogQueryStr.vue │ │ │ ├── MainPageExample.vue │ │ │ ├── MdxRepl.vue │ │ │ ├── Repl.vue │ │ │ ├── SideMenu.vue │ │ │ ├── SideMenuButton.vue │ │ │ ├── SiteHead.astro │ │ │ ├── SponsorButton.vue │ │ │ ├── SpriteSheet.astro │ │ │ ├── StarCount.vue │ │ │ ├── TheHeader.vue │ │ │ ├── ThemeSwitcher.vue │ │ │ ├── UiLibraries.vue │ │ │ ├── VersionSwitcher.vue │ │ │ └── examples/ │ │ │ ├── ComponentsBasic.vue │ │ │ ├── CompositionBasic.vue │ │ │ ├── CompositionComponentBindsBasic01.vue │ │ │ ├── CompositionComponentBindsBasic02.vue │ │ │ ├── CompositionComponentBindsBasic03.vue │ │ │ ├── CompositionComponentBindsBasic04.vue │ │ │ ├── CompositionComponentBindsBasic05.vue │ │ │ ├── CompositionCustomField01.vue │ │ │ ├── CompositionCustomField02.vue │ │ │ ├── CompositionCustomField03.vue │ │ │ ├── CompositionCustomField04.vue │ │ │ ├── CompositionCustomField05.vue │ │ │ ├── CompositionCustomFieldCheckbox.vue │ │ │ ├── CompositionDynamicSchemaComputed.vue │ │ │ ├── CompositionDynamicSchemaYupLazy.vue │ │ │ ├── CompositionHandlingForms01.vue │ │ │ ├── CompositionHandlingForms02.vue │ │ │ ├── CompositionHandlingForms03.vue │ │ │ ├── CompositionHandlingForms04.vue │ │ │ ├── CompositionHandlingForms05.vue │ │ │ ├── CompositionHandlingForms06.vue │ │ │ ├── CompositionHandlingForms07.vue │ │ │ ├── CompositionHandlingForms08.vue │ │ │ ├── CompositionHandlingForms09.vue │ │ │ ├── CompositionHandlingForms10.vue │ │ │ ├── CompositionHandlingForms11.vue │ │ │ ├── CompositionHandlingForms12.vue │ │ │ ├── CompositionHandlingForms13.vue │ │ │ ├── CompositionHandlingForms14.vue │ │ │ ├── CompositionInputBindsBasic01.vue │ │ │ ├── CompositionInputBindsBasic02.vue │ │ │ ├── CompositionInputBindsBasic03.vue │ │ │ ├── CompositionInputFieldFn.vue │ │ │ ├── CompositionInputFieldValibot.vue │ │ │ ├── CompositionInputFieldYup.vue │ │ │ ├── CompositionInputFieldZod.vue │ │ │ ├── CompositionNested01.vue │ │ │ ├── CompositionNested02.vue │ │ │ ├── CompositionNested03.vue │ │ │ ├── CompositionNested04.vue │ │ │ ├── CompositionNested05.vue │ │ │ ├── CompositionValibotBasic.vue │ │ │ ├── CompositionValidateFnBasic.vue │ │ │ ├── CompositionYupBasic.vue │ │ │ ├── CompositionZodBasic.vue │ │ │ ├── CustomCheckboxInputBasic.vue │ │ │ ├── CustomInputBasic.vue │ │ │ ├── CustomInputBasicError.vue │ │ │ ├── CustomInputBasicValueEvent.vue │ │ │ ├── CustomInputFieldAggressive.vue │ │ │ ├── CustomInputFieldBasic.vue │ │ │ ├── CustomInputFieldEager.vue │ │ │ ├── CustomInputFieldMeta.vue │ │ │ ├── CustomInputFieldMultiErrors.vue │ │ │ └── CustomInputFieldVModel.vue │ │ ├── config.ts │ │ ├── constants.ts │ │ ├── env.d.ts │ │ ├── integrations/ │ │ │ └── svgSprite.ts │ │ ├── layouts/ │ │ │ ├── HomeLayout.astro │ │ │ └── PageLayout.astro │ │ ├── pages/ │ │ │ ├── api/ │ │ │ │ ├── composition-helpers.mdx │ │ │ │ ├── configuration.mdx │ │ │ │ ├── error-message.mdx │ │ │ │ ├── field-array.mdx │ │ │ │ ├── field.mdx │ │ │ │ ├── form.mdx │ │ │ │ ├── use-field-array.mdx │ │ │ │ ├── use-field.mdx │ │ │ │ └── use-form.mdx │ │ │ ├── examples/ │ │ │ │ ├── array-fields.mdx │ │ │ │ ├── async-validation.mdx │ │ │ │ ├── checkboxes-and-radio.mdx │ │ │ │ ├── cross-field-validation.mdx │ │ │ │ ├── custom-checkboxes.mdx │ │ │ │ ├── custom-inputs.mdx │ │ │ │ ├── dynamic-validation-triggers.mdx │ │ │ │ ├── multistep-form-wizard.mdx │ │ │ │ ├── ui-libraries.mdx │ │ │ │ ├── using-stores.mdx │ │ │ │ └── value-formatting.mdx │ │ │ ├── guide/ │ │ │ │ ├── components/ │ │ │ │ │ ├── handling-forms.mdx │ │ │ │ │ ├── nested-objects-and-arrays.mdx │ │ │ │ │ └── validation.mdx │ │ │ │ ├── composition-api/ │ │ │ │ │ ├── caveats.mdx │ │ │ │ │ ├── custom-inputs.mdx │ │ │ │ │ ├── getting-started.mdx │ │ │ │ │ ├── handling-forms.mdx │ │ │ │ │ ├── helpers.mdx │ │ │ │ │ └── nested-objects-and-arrays.mdx │ │ │ │ ├── devtools.mdx │ │ │ │ ├── global-validators.mdx │ │ │ │ ├── i18n.mdx │ │ │ │ ├── migration.mdx │ │ │ │ ├── overview.mdx │ │ │ │ └── testing.mdx │ │ │ ├── index.astro │ │ │ ├── integrations/ │ │ │ │ └── nuxt.mdx │ │ │ ├── resources.mdx │ │ │ ├── submit-target.astro │ │ │ └── tutorials/ │ │ │ ├── basics.mdx │ │ │ └── dynamic-form-generator.mdx │ │ ├── styles/ │ │ │ ├── home.css │ │ │ ├── page.css │ │ │ └── tailwind.css │ │ └── utils/ │ │ ├── examples.ts │ │ ├── github.ts │ │ └── seo.ts │ ├── tailwind.config.js │ ├── theme.json │ └── tsconfig.json ├── eslint.config.js ├── package.json ├── packages/ │ ├── i18n/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── locale/ │ │ │ │ ├── ar.json │ │ │ │ ├── az.json │ │ │ │ ├── bg.json │ │ │ │ ├── bn.json │ │ │ │ ├── ca.json │ │ │ │ ├── ckb.json │ │ │ │ ├── cs.json │ │ │ │ ├── cy.json │ │ │ │ ├── da.json │ │ │ │ ├── de.json │ │ │ │ ├── el.json │ │ │ │ ├── en.json │ │ │ │ ├── es.json │ │ │ │ ├── et.json │ │ │ │ ├── eu.json │ │ │ │ ├── fa.json │ │ │ │ ├── fi.json │ │ │ │ ├── fr.json │ │ │ │ ├── he.json │ │ │ │ ├── hr.json │ │ │ │ ├── hu.json │ │ │ │ ├── id.json │ │ │ │ ├── it.json │ │ │ │ ├── ja.json │ │ │ │ ├── ka.json │ │ │ │ ├── km.json │ │ │ │ ├── ko.json │ │ │ │ ├── kz.json │ │ │ │ ├── lt.json │ │ │ │ ├── lv.json │ │ │ │ ├── mn.json │ │ │ │ ├── ms_MY.json │ │ │ │ ├── nb_NO.json │ │ │ │ ├── ne.json │ │ │ │ ├── nl.json │ │ │ │ ├── nn_NO.json │ │ │ │ ├── pl.json │ │ │ │ ├── pt_BR.json │ │ │ │ ├── pt_PT.json │ │ │ │ ├── ro.json │ │ │ │ ├── ru.json │ │ │ │ ├── sk.json │ │ │ │ ├── sl.json │ │ │ │ ├── so.json │ │ │ │ ├── sq.json │ │ │ │ ├── sr.json │ │ │ │ ├── sr_Latin.json │ │ │ │ ├── sv.json │ │ │ │ ├── th.json │ │ │ │ ├── tr.json │ │ │ │ ├── ug.json │ │ │ │ ├── uk.json │ │ │ │ ├── uz.json │ │ │ │ ├── vi.json │ │ │ │ ├── zh_CN.json │ │ │ │ └── zh_TW.json │ │ │ └── utils.ts │ │ └── tests/ │ │ └── index.spec.ts │ ├── nuxt/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ └── src/ │ │ └── module.ts │ ├── rules/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── alpha.ts │ │ │ ├── alpha_dash.ts │ │ │ ├── alpha_helper.ts │ │ │ ├── alpha_num.ts │ │ │ ├── alpha_spaces.ts │ │ │ ├── between.ts │ │ │ ├── confirmed.ts │ │ │ ├── digits.ts │ │ │ ├── dimensions.ts │ │ │ ├── email.ts │ │ │ ├── ext.ts │ │ │ ├── image.ts │ │ │ ├── index.ts │ │ │ ├── integer.ts │ │ │ ├── is.ts │ │ │ ├── is_not.ts │ │ │ ├── length.ts │ │ │ ├── max.ts │ │ │ ├── max_value.ts │ │ │ ├── mimes.ts │ │ │ ├── min.ts │ │ │ ├── min_value.ts │ │ │ ├── not_one_of.ts │ │ │ ├── numeric.ts │ │ │ ├── one_of.ts │ │ │ ├── regex.ts │ │ │ ├── required.ts │ │ │ ├── size.ts │ │ │ ├── toTypedSchema.ts │ │ │ ├── url.ts │ │ │ └── utils.ts │ │ └── tests/ │ │ ├── .eslintrc.json │ │ ├── alpha.spec.ts │ │ ├── alpha_dash.spec.ts │ │ ├── alpha_num.spec.ts │ │ ├── alpha_spaces.spec.ts │ │ ├── between.spec.ts │ │ ├── confirmed.spec.ts │ │ ├── digits.spec.ts │ │ ├── dimensions.spec.ts │ │ ├── email.spec.ts │ │ ├── ext.spec.ts │ │ ├── helpers/ │ │ │ └── index.ts │ │ ├── image.spec.ts │ │ ├── integer.spec.ts │ │ ├── is.spec.ts │ │ ├── is_not.spec.ts │ │ ├── length.spec.ts │ │ ├── max.spec.ts │ │ ├── max_value.spec.ts │ │ ├── mimes.spec.ts │ │ ├── min.spec.ts │ │ ├── min_value.spec.ts │ │ ├── not_one_of.spec.ts │ │ ├── numeric.spec.ts │ │ ├── one_of.spec.ts │ │ ├── regex.spec.ts │ │ ├── required.spec.ts │ │ ├── size.spec.ts │ │ ├── toTypedSchema.spec.ts │ │ └── url.spec.ts │ ├── shared/ │ │ ├── README.md │ │ ├── index.ts │ │ ├── types.ts │ │ ├── utils.spec.ts │ │ └── utils.ts │ └── vee-validate/ │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── ErrorMessage.ts │ │ ├── Field.ts │ │ ├── FieldArray.ts │ │ ├── Form.ts │ │ ├── config.ts │ │ ├── defineRule.ts │ │ ├── devtools.ts │ │ ├── globals.d.ts │ │ ├── index.ts │ │ ├── symbols.ts │ │ ├── types/ │ │ │ ├── common.ts │ │ │ ├── devtools.ts │ │ │ ├── forms.ts │ │ │ ├── index.ts │ │ │ └── paths.ts │ │ ├── useField.ts │ │ ├── useFieldArray.ts │ │ ├── useFieldError.ts │ │ ├── useFieldState.ts │ │ ├── useFieldValue.ts │ │ ├── useForm.ts │ │ ├── useFormErrors.ts │ │ ├── useFormValues.ts │ │ ├── useIsFieldDirty.ts │ │ ├── useIsFieldTouched.ts │ │ ├── useIsFieldValid.ts │ │ ├── useIsFormDirty.ts │ │ ├── useIsFormTouched.ts │ │ ├── useIsFormValid.ts │ │ ├── useIsSubmitting.ts │ │ ├── useIsValidating.ts │ │ ├── useResetForm.ts │ │ ├── useSetFieldError.ts │ │ ├── useSetFieldTouched.ts │ │ ├── useSetFieldValue.ts │ │ ├── useSetFormErrors.ts │ │ ├── useSetFormTouched.ts │ │ ├── useSetFormValues.ts │ │ ├── useSubmitCount.ts │ │ ├── useSubmitForm.ts │ │ ├── useValidateField.ts │ │ ├── useValidateForm.ts │ │ ├── utils/ │ │ │ ├── assertions.ts │ │ │ ├── common.ts │ │ │ ├── events.ts │ │ │ ├── index.ts │ │ │ ├── rules.ts │ │ │ └── vnode.ts │ │ └── validate.ts │ └── tests/ │ ├── .eslintrc.json │ ├── ErrorMessage.spec.ts │ ├── Field.spec.ts │ ├── FieldArray.spec.ts │ ├── Form.spec.ts │ ├── define.spec.ts │ ├── helpers/ │ │ ├── ModelComp.ts │ │ └── index.ts │ ├── useField.spec.ts │ ├── useFieldArray.spec.ts │ ├── useFieldError.spec.ts │ ├── useFieldValue.spec.ts │ ├── useForm.spec.ts │ ├── useFormErrors.spec.ts │ ├── useFormValues.spec.ts │ ├── useIsFieldDirty.spec.ts │ ├── useIsFieldTouched.spec.ts │ ├── useIsFieldValid.spec.ts │ ├── useIsFormDirty.spec.ts │ ├── useIsFormTouched.spec.ts │ ├── useIsFormValid.spec.ts │ ├── useIsSubmitting.spec.ts │ ├── useIsValidating.spec.ts │ ├── useResetForm.spec.ts │ ├── useSetFieldError.spec.ts │ ├── useSetFieldTouched.spec.ts │ ├── useSetFieldValue.spec.ts │ ├── useSetFormErrors.spec.ts │ ├── useSetFormTouched.spec.ts │ ├── useSetFormValues.spec.ts │ ├── useSubmitCount.spec.ts │ ├── useSubmitForm.spec.ts │ ├── useValidateField.spec.ts │ ├── useValidateForm.spec.ts │ ├── utils/ │ │ └── assertions.spec.ts │ └── validate.spec.ts ├── pnpm-workspace.yaml ├── scripts/ │ ├── build.mjs │ ├── config.mjs │ ├── copy-mds.mjs │ ├── generate-dts.mjs │ ├── info.mjs │ ├── normalize-path.mjs │ ├── release.sh │ └── tag-release.mjs ├── tsconfig.json ├── vitest.config.ts └── vitest.setup.ts
SYMBOL INDEX (596 symbols across 99 files)
FILE: docs/baseLink.ts
function addBasePath (line 3) | function addBasePath(basePath: string) {
function addProperties (line 24) | function addProperties(node: any, props: Record<string, string>) {
FILE: docs/highlight.ts
constant LANG_REPLACEMENTS (line 12) | const LANG_REPLACEMENTS = {
function highlight (line 22) | function highlight() {
function createSpan (line 71) | function createSpan(text: string, className: string, attrs?: Record<stri...
function replaceColorsWithVariables (line 86) | function replaceColorsWithVariables(html) {
function parseLines (line 108) | function parseLines(lines) {
function parseParts (line 130) | function parseParts(lang) {
FILE: docs/src/integrations/svgSprite.ts
method 'astro:build:done' (line 8) | async 'astro:build:done'() {
FILE: docs/src/utils/examples.ts
function getViteProjectConfig (line 4) | function getViteProjectConfig(files: Record<string, string>): Project {
FILE: docs/src/utils/github.ts
function fetchStarCount (line 1) | function fetchStarCount() {
FILE: docs/src/utils/seo.ts
function generateSocialImage (line 1) | function generateSocialImage({
function generateMetaTags (line 65) | function generateMetaTags({ title, description, image, url, keywords }: ...
function generateLinks (line 144) | function generateLinks({ url }) {
type Frontmatter (line 154) | interface Frontmatter {
function buildMenu (line 168) | function buildMenu(pages: { url?: string; frontmatter: Frontmatter; chil...
FILE: packages/i18n/src/index.ts
type ValidationMessageTemplate (line 7) | type ValidationMessageTemplate = ValidationMessageGenerator | string;
type PartialI18nDictionary (line 9) | interface PartialI18nDictionary {
type RootI18nDictionary (line 16) | type RootI18nDictionary = Record<string, PartialI18nDictionary>;
class Dictionary (line 18) | class Dictionary {
method constructor (line 25) | public constructor(
method resolve (line 36) | public resolve(ctx: FieldValidationMetaInfo, interpolateOptions?: Inte...
method getDefaultMessage (line 45) | public getDefaultMessage(locale: string, ctx: FieldValidationMetaInfo) {
method getLocaleDefault (line 52) | public getLocaleDefault(locale: string, field: string): string | Valid...
method resolveLabel (line 56) | public resolveLabel(locale: string, name: string, label?: string): str...
method format (line 64) | public format(locale: string, ctx: FieldValidationMetaInfo, interpolat...
method merge (line 91) | public merge(dictionary: RootI18nDictionary) {
constant DICTIONARY (line 96) | const DICTIONARY: Dictionary = new Dictionary('en', {});
function localize (line 106) | function localize(
function setLocale (line 133) | function setLocale(locale: string) {
function setFallbackLocale (line 140) | function setFallbackLocale(locale: string) {
function loadLocaleFromURL (line 147) | async function loadLocaleFromURL(url: string) {
FILE: packages/i18n/src/utils.ts
function interpolate (line 6) | function interpolate(template: string, values: Record<string, any>, opti...
function escapeRegex (line 32) | function escapeRegex(string: string) {
function buildRegex (line 36) | function buildRegex(prefix: string, suffix: string): RegExp {
FILE: packages/i18n/tests/index.spec.ts
method setup (line 143) | setup() {
method setup (line 245) | setup() {
FILE: packages/nuxt/src/module.ts
type ComponentName (line 4) | type ComponentName = 'Field' | 'Form' | 'ErrorMessage' | 'FieldArray';
type VeeValidateNuxtOptions (line 6) | interface VeeValidateNuxtOptions {
method setup (line 46) | setup(options, nuxt) {
function addMjsAlias (line 70) | function addMjsAlias(pkgName: string, fileName: string, nuxt: Nuxt) {
type NuxtConfig (line 80) | interface NuxtConfig {
type NuxtOptions (line 83) | interface NuxtOptions {
function prepareVeeValidate (line 94) | function prepareVeeValidate(nuxt: Nuxt) {
FILE: packages/rules/src/between.ts
type BetweenParams (line 4) | type BetweenParams = [string | number, string | number] | { min: number ...
function getParams (line 6) | function getParams(params: BetweenParams) {
FILE: packages/rules/src/dimensions.ts
type Params (line 16) | type Params = [number | string, number | string] | { width: string | num...
function getParams (line 18) | function getParams(params: Params) {
FILE: packages/rules/src/mimes.ts
constant ADDED_MIME_RE (line 3) | const ADDED_MIME_RE = /\+(.+)?/;
function buildRegExp (line 5) | function buildRegExp(mime: string) {
FILE: packages/rules/src/toTypedSchema.ts
function toTypedSchema (line 4) | function toTypedSchema<TInput, TOutput = TInput>(
FILE: packages/rules/src/utils.ts
function getSingleParam (line 1) | function getSingleParam<TParam = unknown>(params: [TParam] | Record<stri...
function isEmpty (line 5) | function isEmpty(value: unknown): boolean {
FILE: packages/rules/tests/dimensions.spec.ts
method createObjectURL (line 12) | createObjectURL() {
method src (line 18) | get src() {
method src (line 22) | set src(_: any) {
FILE: packages/rules/tests/toTypedSchema.spec.ts
constant REQUIRED_MSG (line 8) | const REQUIRED_MSG = 'field is required';
constant MIN_MSG (line 9) | const MIN_MSG = 'field is too short';
constant EMAIL_MSG (line 10) | const EMAIL_MSG = 'field must be a valid email';
method setup (line 18) | setup() {
method setup (line 74) | setup() {
FILE: packages/shared/types.ts
type FieldValidationMetaInfo (line 1) | interface FieldValidationMetaInfo {
type ValidationRuleFunction (line 13) | type ValidationRuleFunction<TValue = unknown, TParams = unknown[] | Reco...
type SimpleValidationRuleFunction (line 19) | type SimpleValidationRuleFunction<TValue = unknown, TParams = unknown[] ...
type ValidationMessageGenerator (line 24) | type ValidationMessageGenerator = (ctx: FieldValidationMetaInfo) => string;
type Optional (line 26) | type Optional<T> = T extends Record<string, any> ? Partial<T> : T | unde...
type InterpolateOptions (line 28) | type InterpolateOptions = {
FILE: packages/shared/utils.ts
function isCallable (line 1) | function isCallable(fn: unknown): fn is (...args: any[]) => any {
function isNullOrUndefined (line 5) | function isNullOrUndefined(value: unknown): value is undefined | null {
function isEmptyArray (line 9) | function isEmptyArray(arr: unknown): boolean {
function isIndex (line 16) | function isIndex(value: unknown): value is number {
function toNumber (line 20) | function toNumber(value: string): number | string {
function isObjectLike (line 26) | function isObjectLike(value: any) {
function getTag (line 30) | function getTag(value: any) {
function isPlainObject (line 38) | function isPlainObject(value: any) {
function merge (line 52) | function merge(target: any, source: any) {
function normalizeFormPath (line 72) | function normalizeFormPath(path: string): string {
FILE: packages/vee-validate/src/ErrorMessage.ts
type ErrorMessageSlotProps (line 5) | interface ErrorMessageSlotProps {
method setup (line 21) | setup(props, ctx) {
FILE: packages/vee-validate/src/Field.ts
type ValidationTriggersProps (line 20) | interface ValidationTriggersProps {
type SharedBindingObject (line 28) | interface SharedBindingObject<TValue = any> {
type FieldBindingObject (line 36) | interface FieldBindingObject<TValue = any> extends SharedBindingObject<T...
type ComponentFieldBindingObject (line 41) | interface ComponentFieldBindingObject<TValue = any> extends SharedBindin...
type FieldSlotProps (line 45) | interface FieldSlotProps<TValue = unknown>
method setup (line 128) | setup(props, ctx) {
function resolveTag (line 283) | function resolveTag(props: Record<string, any>, ctx: SetupContext<any>) {
function resolveValidationTriggers (line 293) | function resolveValidationTriggers(props: Partial<ValidationTriggersProp...
function resolveInitialValue (line 304) | function resolveInitialValue(props: Record<string, unknown>, ctx: SetupC...
FILE: packages/vee-validate/src/FieldArray.ts
method setup (line 15) | setup(props, ctx) {
FILE: packages/vee-validate/src/Form.ts
type FormSlotProps (line 7) | type FormSlotProps = UnwrapRef<
method setup (line 83) | setup(props, ctx) {
FILE: packages/vee-validate/src/config.ts
type VeeValidateConfig (line 3) | interface VeeValidateConfig {
constant DEFAULT_CONFIG (line 12) | const DEFAULT_CONFIG: VeeValidateConfig = {
FILE: packages/vee-validate/src/defineRule.ts
constant RULES (line 3) | const RULES: Record<string, ValidationRuleFunction | SimpleValidationRul...
function defineRule (line 8) | function defineRule<TValue = unknown, TParams = any[] | Record<string, a...
function resolveRule (line 21) | function resolveRule(id: string) {
function guardExtend (line 28) | function guardExtend<TValue, TParams>(
FILE: packages/vee-validate/src/devtools.ts
constant DEVTOOLS_FORMS (line 7) | const DEVTOOLS_FORMS: Record<string, PrivateFormContext & { _vm?: Compon...
constant DEVTOOLS_FIELDS (line 8) | const DEVTOOLS_FIELDS: Record<string, PrivateFieldContext & { _vm?: Comp...
constant INSPECTOR_ID (line 10) | const INSPECTOR_ID = 'vee-validate-inspector';
constant COLORS (line 12) | const COLORS = {
constant SELECTED_NODE (line 24) | let SELECTED_NODE:
constant API (line 33) | let API: any;
function installDevtoolsPlugin (line 35) | async function installDevtoolsPlugin(app: App) {
function registerFormWithDevTools (line 178) | function registerFormWithDevTools(form: PrivateFormContext) {
function registerSingleFieldWithDevtools (line 203) | function registerSingleFieldWithDevtools(field: PrivateFieldContext) {
function mapFormForDevtoolsInspector (line 229) | function mapFormForDevtoolsInspector(form: PrivateFormContext): CustomIn...
function mapPathForDevtoolsInspector (line 286) | function mapPathForDevtoolsInspector(state: PathState, form?: PrivateFor...
function mapFieldForDevtoolsInspector (line 294) | function mapFieldForDevtoolsInspector(field: PrivateFieldContext, form?:...
function getFieldNodeTags (line 302) | function getFieldNodeTags(
function encodeNodeId (line 350) | function encodeNodeId(form?: PrivateFormContext, stateOrField?: PathStat...
function decodeNodeId (line 359) | function decodeNodeId(nodeId: string): {
function buildFieldState (line 399) | function buildFieldState(
function buildFormState (line 429) | function buildFormState(form: PrivateFormContext): CustomInspectorState {
function getValidityColors (line 487) | function getValidityColors(valid: boolean) {
FILE: packages/vee-validate/src/symbols.ts
constant IS_ABSENT (line 10) | const IS_ABSENT = Symbol('Default empty value');
FILE: packages/vee-validate/src/types/common.ts
type GenericObject (line 5) | type GenericObject = Record<string, any>;
type MaybeArray (line 7) | type MaybeArray<T> = T | T[];
type MaybePromise (line 9) | type MaybePromise<T> = T | Promise<T>;
type FlattenAndSetPathsType (line 11) | type FlattenAndSetPathsType<TRecord, TType> = { [K in Path<TRecord>]: TT...
type MapValuesPathsToRefs (line 13) | type MapValuesPathsToRefs<
FILE: packages/vee-validate/src/types/devtools.ts
type DevtoolsPluginFieldState (line 3) | interface DevtoolsPluginFieldState {
type DevtoolsPluginFormState (line 11) | interface DevtoolsPluginFormState {
FILE: packages/vee-validate/src/types/forms.ts
type ValidationResult (line 8) | interface ValidationResult<TValue = unknown> {
type FlattenAndMapPathsValidationResult (line 14) | type FlattenAndMapPathsValidationResult<TInput extends GenericObject, TO...
type Locator (line 18) | type Locator = { __locatorRef: string } & ((values: GenericObject) => un...
type FieldMeta (line 20) | interface FieldMeta<TValue> {
type FormMeta (line 29) | interface FormMeta<TValues extends GenericObject> {
type FieldState (line 37) | interface FieldState<TValue = unknown> {
type InputType (line 43) | type InputType = 'checkbox' | 'radio' | 'default';
type SchemaValidationMode (line 50) | type SchemaValidationMode = 'validated-only' | 'silent' | 'force';
type ValidationOptions (line 52) | interface ValidationOptions {
type FieldValidator (line 57) | type FieldValidator<TOutput> = (opts?: Partial<ValidationOptions>) => Pr...
type PathStateConfig (line 59) | interface PathStateConfig<TOutput> {
type IssueCollection (line 67) | type IssueCollection<TPath = string> = {
type PathState (line 72) | interface PathState<TInput = unknown, TOutput = TInput> {
type FieldEntry (line 95) | interface FieldEntry<TValue = unknown> {
type FieldArrayContext (line 102) | interface FieldArrayContext<TValue = unknown> {
type PrivateFieldArrayContext (line 114) | interface PrivateFieldArrayContext<TValue = unknown> extends FieldArrayC...
type PrivateFieldContext (line 119) | interface PrivateFieldContext<TInput = unknown, TOutput = TInput> {
type FieldContext (line 144) | type FieldContext<TValue = unknown> = Omit<PrivateFieldContext<TValue>, ...
type GenericValidateFunction (line 146) | type GenericValidateFunction<TValue = unknown> = (
type FormState (line 151) | interface FormState<TValues> {
type FormErrors (line 158) | type FormErrors<TValues extends GenericObject> = Partial<Record<Path<TVa...
type FormErrorBag (line 159) | type FormErrorBag<TValues extends GenericObject> = Partial<Record<Path<T...
type ResetFormOpts (line 161) | interface ResetFormOpts {
type FormActions (line 166) | interface FormActions<TValues extends GenericObject, TOutput = TValues> {
type FormValidationResult (line 177) | interface FormValidationResult<TInput extends GenericObject, TOutput ext...
type SubmissionContext (line 185) | interface SubmissionContext<TInput extends GenericObject = GenericObject...
type SubmissionHandler (line 190) | type SubmissionHandler<TInput extends GenericObject = GenericObject, TOu...
type InvalidSubmissionContext (line 195) | interface InvalidSubmissionContext<
type InvalidSubmissionHandler (line 205) | type InvalidSubmissionHandler<
type RawFormSchema (line 210) | type RawFormSchema<TValues> = Record<Path<TValues>, string | GenericVali...
type FieldPathLookup (line 212) | type FieldPathLookup<TValues extends GenericObject = GenericObject> = Pa...
type HandleSubmitFactory (line 216) | type HandleSubmitFactory<TValues extends GenericObject, TOutput extends ...
type PublicPathState (line 221) | type PublicPathState<TValue = unknown> = Omit<
type BaseFieldProps (line 226) | interface BaseFieldProps {
type InputBindsConfig (line 232) | interface InputBindsConfig<TValue = unknown, TExtraProps extends Generic...
type LazyInputBindsConfig (line 241) | type LazyInputBindsConfig<TValue = unknown, TExtraProps extends GenericO...
type ComponentBindsConfig (line 251) | interface ComponentBindsConfig<
type LazyComponentBindsConfig (line 262) | type LazyComponentBindsConfig<
type ComponentModellessBinds (line 273) | interface ComponentModellessBinds {
type ComponentModelBinds (line 277) | type ComponentModelBinds<TValue = any, TModel extends string = 'modelVal...
type BaseComponentBinds (line 281) | type BaseComponentBinds<TValue = any, TModel extends string = 'modelValu...
type BaseInputBinds (line 288) | interface BaseInputBinds<TValue = unknown> {
type PrivateFormContext (line 295) | interface PrivateFormContext<
type FormContext (line 345) | interface FormContext<TValues extends GenericObject = GenericObject, TOu...
FILE: packages/vee-validate/src/types/paths.ts
type BrowserNativeObject (line 6) | type BrowserNativeObject = Date | FileList | File;
type Primitive (line 8) | type Primitive = null | undefined | string | number | boolean | symbol |...
type IsAny (line 19) | type IsAny<T> = 0 extends 1 & T ? true : false;
type IsEqual (line 35) | type IsEqual<T1, T2> = T1 extends T2
type IsTuple (line 50) | type IsTuple<T extends ReadonlyArray<any>> = number extends T['length'] ...
type ArrayKey (line 55) | type ArrayKey = number;
type AnyIsEqual (line 62) | type AnyIsEqual<T1, T2> = T1 extends T2 ? (IsEqual<T1, T2> extends true ...
type TupleKeys (line 72) | type TupleKeys<T extends ReadonlyArray<any>> = Exclude<keyof T, keyof an...
type PathInternalTuple (line 79) | type PathInternalTuple<TValue extends ReadonlyArray<any>, TraversedTypes...
type PathInternalArray (line 88) | type PathInternalArray<TValue extends ReadonlyArray<any>, TraversedTypes> =
type PathInternalObject (line 97) | type PathInternalObject<TValue, TraversedTypes, First extends boolean> = {
type PathInternalAny (line 108) | type PathInternalAny = `.${string}` | `[${string}]` | `[${string}].${str...
type PathInternal (line 117) | type PathInternal<TValue, TraversedTypes, First extends boolean> = TValu...
type ArrayPathImpl (line 141) | type ArrayPathImpl<K extends string | number, V, TraversedTypes> = V ext...
type ArrayPathInternal (line 166) | type ArrayPathInternal<T, TraversedTypes = T> =
type ArrayPath (line 188) | type ArrayPath<T> = T extends any ? ArrayPathInternal<T> : never;
type PathValue (line 200) | type PathValue<T, P extends Path<T> | ArrayPath<T>> = T extends any
type Path (line 230) | type Path<T> = T extends any ? PathInternal<T, T, true> & string : never;
FILE: packages/vee-validate/src/useField.ts
type FieldOptions (line 48) | interface FieldOptions<TValue = unknown> {
type RuleExpression (line 63) | type RuleExpression<TValue> =
function useField (line 74) | function useField<TValue = unknown>(
function _useField (line 86) | function _useField<TValue = unknown>(
function normalizeOptions (line 421) | function normalizeOptions<TValue>(opts: Partial<FieldOptions<TValue>> | ...
function useFieldWithChecked (line 457) | function useFieldWithChecked<TValue = unknown>(
type ModelOpts (line 513) | interface ModelOpts<TValue> {
function useVModel (line 520) | function useVModel<TValue = unknown>({ prop, value, handleChange, should...
function getCurrentModelValue (line 564) | function getCurrentModelValue<TValue = unknown>(vm: ComponentInternalIns...
FILE: packages/vee-validate/src/useFieldArray.ts
function useFieldArray (line 8) | function useFieldArray<TValue = unknown>(arrayPath: MaybeRefOrGetter<str...
FILE: packages/vee-validate/src/useFieldError.ts
function useFieldError (line 8) | function useFieldError(path?: MaybeRefOrGetter<string>) {
FILE: packages/vee-validate/src/useFieldState.ts
type StateSetterInit (line 5) | interface StateSetterInit<TValue = unknown> extends FieldState<TValue> {
type FieldStateComposable (line 9) | interface FieldStateComposable<TValue = unknown> {
type StateInit (line 20) | interface StateInit<TInput = unknown, TOutput = TInput> {
constant ID_COUNTER (line 29) | let ID_COUNTER = 0;
function useFieldState (line 31) | function useFieldState<TValue = unknown>(
type FieldValueComposable (line 111) | interface FieldValueComposable<TValue = unknown> {
function _useFieldValue (line 120) | function _useFieldValue<TValue = unknown>(
function resolveModelValue (line 186) | function resolveModelValue<TValue>(
function createFieldMeta (line 206) | function createFieldMeta<TValue>(
function createFieldErrors (line 239) | function createFieldErrors() {
FILE: packages/vee-validate/src/useFieldValue.ts
function useFieldValue (line 8) | function useFieldValue<TValue = unknown>(path?: MaybeRefOrGetter<string>) {
FILE: packages/vee-validate/src/useForm.ts
type FormSchema (line 73) | type FormSchema<TValues extends Record<string, unknown>> =
type FormOptions (line 77) | interface FormOptions<
constant FORM_COUNTER (line 91) | let FORM_COUNTER = 0;
constant PRIVATE_PATH_STATE_KEYS (line 93) | const PRIVATE_PATH_STATE_KEYS: (keyof PathState)[] = ['bails', 'fieldsCo...
function resolveInitialValues (line 95) | function resolveInitialValues<TValues extends GenericObject = GenericObj...
function useForm (line 102) | function useForm<
function useFormMeta (line 1102) | function useFormMeta<TValues extends Record<string, unknown>>(
type SetFormInitialValuesOpts (line 1151) | interface SetFormInitialValuesOpts {
function useFormInitialValues (line 1159) | function useFormInitialValues<TValues extends GenericObject>(
function mergeValidationResults (line 1209) | function mergeValidationResults<TValue extends GenericObject>(
function useFormContext (line 1223) | function useFormContext<
FILE: packages/vee-validate/src/useFormErrors.ts
function useFormErrors (line 9) | function useFormErrors<TValues extends Record<string, unknown> = Record<...
FILE: packages/vee-validate/src/useFormValues.ts
function useFormValues (line 9) | function useFormValues<TValues extends Record<string, any> = Record<stri...
FILE: packages/vee-validate/src/useIsFieldDirty.ts
function useIsFieldDirty (line 7) | function useIsFieldDirty(path?: MaybeRefOrGetter<string>) {
FILE: packages/vee-validate/src/useIsFieldTouched.ts
function useIsFieldTouched (line 7) | function useIsFieldTouched(path?: MaybeRefOrGetter<string>) {
FILE: packages/vee-validate/src/useIsFieldValid.ts
function useIsFieldValid (line 7) | function useIsFieldValid(path?: MaybeRefOrGetter<string>) {
FILE: packages/vee-validate/src/useIsFormDirty.ts
function useIsFormDirty (line 8) | function useIsFormDirty() {
FILE: packages/vee-validate/src/useIsFormTouched.ts
function useIsFormTouched (line 8) | function useIsFormTouched() {
FILE: packages/vee-validate/src/useIsFormValid.ts
function useIsFormValid (line 8) | function useIsFormValid() {
FILE: packages/vee-validate/src/useIsSubmitting.ts
function useIsSubmitting (line 8) | function useIsSubmitting() {
FILE: packages/vee-validate/src/useIsValidating.ts
function useIsValidating (line 8) | function useIsValidating() {
FILE: packages/vee-validate/src/useResetForm.ts
function useResetForm (line 5) | function useResetForm<TValues extends Record<string, unknown> = Record<s...
FILE: packages/vee-validate/src/useSetFieldError.ts
function useSetFieldError (line 8) | function useSetFieldError(path?: MaybeRefOrGetter<string>) {
FILE: packages/vee-validate/src/useSetFieldTouched.ts
function useSetFieldTouched (line 8) | function useSetFieldTouched(path?: MaybeRefOrGetter<string>) {
FILE: packages/vee-validate/src/useSetFieldValue.ts
function useSetFieldValue (line 8) | function useSetFieldValue<TValue = unknown>(path?: MaybeRefOrGetter<stri...
FILE: packages/vee-validate/src/useSetFormErrors.ts
function useSetFormErrors (line 7) | function useSetFormErrors() {
FILE: packages/vee-validate/src/useSetFormTouched.ts
function useSetFormTouched (line 7) | function useSetFormTouched() {
FILE: packages/vee-validate/src/useSetFormValues.ts
function useSetFormValues (line 7) | function useSetFormValues<TValues extends Record<string, unknown> = Reco...
FILE: packages/vee-validate/src/useSubmitCount.ts
function useSubmitCount (line 8) | function useSubmitCount() {
FILE: packages/vee-validate/src/useSubmitForm.ts
function useSubmitForm (line 5) | function useSubmitForm<TValues extends Record<string, unknown> = Record<...
FILE: packages/vee-validate/src/useValidateField.ts
function useValidateField (line 9) | function useValidateField<TOutput>(path?: MaybeRefOrGetter<string>) {
FILE: packages/vee-validate/src/useValidateForm.ts
function useValidateForm (line 8) | function useValidateForm<TValues extends Record<string, unknown> = Recor...
FILE: packages/vee-validate/src/utils/assertions.ts
function isLocator (line 8) | function isLocator(value: unknown): value is Locator {
function isStandardSchema (line 12) | function isStandardSchema(value: unknown): value is StandardSchemaV1 {
function hasCheckedAttr (line 16) | function hasCheckedAttr(type: unknown) {
function isContainerValue (line 20) | function isContainerValue(value: unknown): value is Record<string, unkno...
function isEmptyContainer (line 27) | function isEmptyContainer(value: unknown): boolean {
function isNotNestedPath (line 38) | function isNotNestedPath(path: string) {
function isNativeMultiSelect (line 45) | function isNativeMultiSelect(el: HTMLElement): el is HTMLSelectElement {
function isNativeSelect (line 52) | function isNativeSelect(el: HTMLElement): el is HTMLSelectElement {
function isNativeMultiSelectNode (line 59) | function isNativeMultiSelectNode(tag: string, attrs: Record<string, unkn...
function shouldHaveValueBinding (line 74) | function shouldHaveValueBinding(tag: string, attrs: Record<string, unkno...
function isFormSubmitEvent (line 78) | function isFormSubmitEvent(evt: unknown): evt is Event & { target: HTMLF...
function isEvent (line 82) | function isEvent(evt: unknown): evt is Event {
function isPropPresent (line 100) | function isPropPresent(obj: Record<string, unknown>, prop: string) {
function isEqual (line 111) | function isEqual(a: any, b: any) {
function normalizeObject (line 191) | function normalizeObject(a: Record<PropertyKey, unknown>) {
function isFile (line 195) | function isFile(a: unknown): a is File {
FILE: packages/vee-validate/src/utils/common.ts
function cleanupNonNestedPath (line 22) | function cleanupNonNestedPath(path: string) {
type NestedRecord (line 30) | type NestedRecord = Record<string, unknown> | { [k: string]: NestedRecor...
function getFromPath (line 41) | function getFromPath<TValue = unknown, TFallback = TValue>(
function setInPath (line 71) | function setInPath(object: NestedRecord, path: string, value: unknown): ...
function unset (line 96) | function unset(object: Record<string, unknown> | unknown[], key: string ...
function unsetPath (line 110) | function unsetPath(object: NestedRecord, path: string): void {
function keysOf (line 154) | function keysOf<TRecord extends Record<string, unknown>>(record: TRecord...
function injectWithSelf (line 160) | function injectWithSelf<T>(symbol: InjectionKey<T>, def: T | undefined =...
function warn (line 166) | function warn(message: string) {
function resolveNextCheckboxValue (line 172) | function resolveNextCheckboxValue<T>(currentValue: T | T[], checkedValue...
type ThrottledFunction (line 186) | type ThrottledFunction<T extends (...args: any) => any> = (...args: Para...
function throttle (line 192) | function throttle<T extends (...args: any) => any>(func: T, limit: numbe...
function debounceAsync (line 212) | function debounceAsync<TFunction extends (...args: any) => Promise<any>,...
function applyModelModifiers (line 239) | function applyModelModifiers<TValue = unknown>(value: TValue, modifiers:...
function withLatest (line 251) | function withLatest<
function computedDeep (line 271) | function computedDeep<TValue = unknown>({ get, set }: { get(): TValue; s...
function normalizeErrorItem (line 305) | function normalizeErrorItem(message: string | string[] | null | undefine...
function resolveFieldOrPathState (line 309) | function resolveFieldOrPathState(path?: MaybeRefOrGetter<string>) {
function omit (line 323) | function omit<TObj extends GenericObject>(obj: TObj, keys: (keyof Generi...
function debounceNextTick (line 335) | function debounceNextTick<
function _combineIssueItems (line 365) | function _combineIssueItems<TItem extends StandardSchemaV1.Issue | Issue...
function combineStandardIssues (line 392) | function combineStandardIssues(
FILE: packages/vee-validate/src/utils/events.ts
function parseInputValue (line 4) | function parseInputValue(el: HTMLInputElement) {
function normalizeEventValue (line 12) | function normalizeEventValue(value: Event | unknown): unknown {
FILE: packages/vee-validate/src/utils/rules.ts
function normalizeRules (line 9) | function normalizeRules(
function normalizeParams (line 61) | function normalizeParams(params: unknown) {
function buildParams (line 77) | function buildParams(provided: unknown[] | Record<string, unknown>) {
function createLocator (line 120) | function createLocator(value: string): Locator {
function extractLocators (line 132) | function extractLocators(params: Record<string, unknown> | unknown[]): L...
FILE: packages/vee-validate/src/utils/vnode.ts
type HTMLElementWithValueBinding (line 3) | type HTMLElementWithValueBinding = HTMLElement & { _value: unknown };
function normalizeChildren (line 5) | function normalizeChildren(
function getBoundValue (line 27) | function getBoundValue(el: HTMLElement): unknown {
function hasValueBinding (line 39) | function hasValueBinding(el: HTMLElement): el is HTMLElementWithValueBin...
FILE: packages/vee-validate/src/validate.ts
type FieldValidationContext (line 20) | interface FieldValidationContext<TInput = unknown, TOutput = TInput> {
type ValidationOptions (line 33) | interface ValidationOptions {
function validate (line 43) | async function validate<TInput, TOutput>(
function _validate (line 73) | async function _validate<TInput = unknown, TOutput = TInput>(
function validateFieldWithStandardSchema (line 156) | async function validateFieldWithStandardSchema(
function _test (line 183) | async function _test(
function _generateFieldError (line 222) | function _generateFieldError(fieldCtx: FieldValidationMetaInfo) {
function fillTargetValues (line 231) | function fillTargetValues(params: unknown[] | Record<string, unknown>, c...
function validateStandardSchema (line 254) | async function validateStandardSchema<TValues extends GenericObject, TOu...
function validateObjectSchema (line 293) | async function validateObjectSchema<TValues extends GenericObject, TOutp...
FILE: packages/vee-validate/tests/Field.spec.ts
method setup (line 85) | setup() {
method setup (line 110) | setup() {
method setup (line 217) | setup() {
method setup (line 383) | setup() {
method setup (line 433) | setup() {
method setup (line 563) | setup() {
method setup (line 594) | setup() {
method setup (line 725) | setup() {
method setup (line 758) | setup() {
method setup (line 777) | setup() {
method setup (line 804) | setup() {
method setup (line 830) | setup() {
method setup (line 929) | setup() {
method setup (line 962) | setup() {
method setup (line 985) | setup() {
method setup (line 1018) | setup() {
method setup (line 1043) | setup() {
method setup (line 1125) | setup() {
FILE: packages/vee-validate/tests/FieldArray.spec.ts
constant REQUIRED_MESSAGE (line 6) | const REQUIRED_MESSAGE = 'REQUIRED';
method setup (line 45) | setup() {
method setup (line 108) | setup() {
method setup (line 160) | setup() {
method setup (line 255) | setup() {
method setup (line 333) | setup() {
method setup (line 381) | setup() {
method setup (line 430) | setup() {
method setup (line 476) | setup() {
method setup (line 528) | setup() {
method setup (line 583) | setup() {
method setup (line 650) | setup(props) {
method setup (line 673) | setup() {
method setup (line 738) | setup(props) {
method setup (line 760) | setup() {
method setup (line 809) | setup() {
method setup (line 866) | setup() {
method setup (line 907) | setup() {
method setup (line 940) | setup() {
method setup (line 992) | setup() {
FILE: packages/vee-validate/tests/Form.spec.ts
method setup (line 65) | setup() {
method setup (line 103) | setup() {
method setup (line 188) | setup() {
method setup (line 304) | setup() {
method setup (line 358) | setup() {
method setup (line 393) | setup() {
method setup (line 441) | setup() {
method setup (line 489) | setup() {
method setup (line 535) | setup() {
method setup (line 578) | setup() {
method setup (line 629) | setup() {
method setup (line 670) | setup() {
method setup (line 731) | setup() {
method setup (line 793) | setup() {
method setup (line 856) | setup() {
method setup (line 920) | setup() {
method setup (line 986) | setup() {
method setup (line 1052) | setup() {
method setup (line 1115) | setup() {
method setup (line 1166) | setup() {
method setup (line 1218) | setup() {
method setup (line 1268) | setup() {
method setup (line 1320) | setup() {
method setup (line 1372) | setup() {
method setup (line 1406) | setup() {
method setup (line 1456) | setup() {
method setup (line 1489) | setup() {
class NonPlain (line 1638) | class NonPlain {
method setup (line 1655) | setup() {
method setup (line 1707) | setup() {
method setup (line 1783) | setup() {
method setup (line 1810) | setup() {
method setup (line 1834) | setup() {
method setup (line 1863) | setup() {
method setup (line 1938) | setup() {
method setup (line 2058) | setup() {
method setup (line 2121) | setup() {
function addItem (line 2160) | function addItem(item: string) {
method setup (line 2165) | setup() {
method setup (line 2208) | setup() {
method setup (line 2240) | setup() {
method setup (line 2272) | setup() {
method setup (line 2397) | setup() {
method setup (line 2428) | setup() {
method setup (line 2459) | setup() {
method setup (line 2486) | setup() {
method setup (line 2522) | setup() {
method setup (line 2551) | setup() {
method setup (line 2578) | setup() {
method setup (line 2601) | setup() {
method setup (line 2660) | setup() {
method setup (line 2720) | setup() {
method setup (line 2775) | setup() {
method setup (line 2793) | setup() {
method setup (line 2889) | setup() {
method setup (line 2918) | setup() {
method setup (line 2975) | setup() {
method setup (line 3029) | setup() {
method setup (line 3078) | setup() {
method setup (line 3122) | setup() {
method setup (line 3171) | setup() {
type FormValues (line 3203) | type FormValues = z.infer<typeof schema>;
method setup (line 3211) | setup() {
FILE: packages/vee-validate/tests/helpers/index.ts
function mount (line 5) | function mount(component: Record<string, any>) {
function mountWithHoc (line 16) | function mountWithHoc(component: Record<string, any>) {
constant HTML_TAGS (line 28) | const HTML_TAGS = ['INPUT', 'SELECT'];
function setValue (line 30) | function setValue(node: ComponentPublicInstance | HTMLInputElement, valu...
function getValue (line 42) | function getValue(selectorOrNode: HTMLElement | string) {
function setChecked (line 51) | function setChecked(node: HTMLInputElement, status?: boolean) {
function dispatchEvent (line 57) | function dispatchEvent(node: ComponentPublicInstance | HTMLElement | str...
function flushPromises (line 76) | async function flushPromises() {
function dispatchFileEvent (line 82) | async function dispatchFileEvent(input: HTMLInputElement, name: string |...
function runInSetup (line 103) | async function runInSetup(cb: () => any) {
FILE: packages/vee-validate/tests/useField.spec.ts
method setup (line 10) | setup() {
method setup (line 38) | setup() {
method setup (line 64) | setup() {
method setup (line 120) | setup() {
method setup (line 154) | setup() {
method setup (line 188) | setup() {
method setup (line 223) | setup() {
method setup (line 260) | setup() {
method setup (line 284) | setup() {
method setup (line 315) | setup() {
method setup (line 340) | setup() {
method setup (line 446) | setup() {
method setup (line 563) | setup() {
method setup (line 580) | setup() {
method setup (line 606) | setup() {
method setup (line 623) | setup() {
method setup (line 648) | setup() {
method setup (line 667) | setup() {
method setup (line 691) | setup() {
method setup (line 710) | setup() {
method setup (line 736) | setup() {
method setup (line 755) | setup() {
function validator (line 777) | function validator(value: string | undefined) {
method setup (line 799) | setup() {
method setup (line 831) | setup() {
method setup (line 860) | setup() {
method setup (line 885) | setup() {
method setup (line 903) | setup() {
method setup (line 923) | setup() {
method setup (line 949) | setup() {
method setup (line 976) | setup() {
method setup (line 997) | setup() {
method setup (line 1017) | setup() {
method setup (line 1046) | setup(props: any) {
FILE: packages/vee-validate/tests/useFieldArray.spec.ts
method setup (line 8) | setup() {
method setup (line 37) | setup() {
method setup (line 82) | setup() {
method setup (line 113) | setup() {
method setup (line 131) | setup() {
method setup (line 172) | setup() {
method setup (line 199) | setup() {
method setup (line 228) | setup() {
method setup (line 255) | setup() {
method setup (line 284) | setup() {
method setup (line 311) | setup() {
method setup (line 338) | setup() {
method setup (line 365) | setup() {
method setup (line 392) | setup() {
method setup (line 419) | setup() {
method setup (line 446) | setup() {
method setup (line 473) | setup() {
method setup (line 500) | setup() {
method setup (line 534) | setup(props) {
method setup (line 547) | setup() {
FILE: packages/vee-validate/tests/useFieldError.spec.ts
method setup (line 11) | setup() {
method setup (line 38) | setup() {
method setup (line 50) | setup() {
method setup (line 74) | setup() {
method setup (line 101) | setup() {
method setup (line 121) | setup() {
FILE: packages/vee-validate/tests/useFieldValue.spec.ts
method setup (line 11) | setup() {
method setup (line 47) | setup() {
method setup (line 60) | setup() {
method setup (line 85) | setup() {
method setup (line 105) | setup() {
FILE: packages/vee-validate/tests/useForm.spec.ts
method setup (line 22) | setup() {
method setup (line 50) | setup() {
method setup (line 77) | setup() {
method setup (line 107) | setup() {
method setup (line 137) | setup() {
method setup (line 174) | setup() {
method setup (line 194) | setup() {
method setup (line 214) | setup() {
method setup (line 251) | setup() {
method setup (line 295) | setup() {
method setup (line 327) | setup() {
method setup (line 350) | setup() {
method setup (line 377) | setup() {
method setup (line 411) | setup() {
method setup (line 459) | setup() {
method setup (line 492) | setup() {
function validator (line 537) | function validator(value: string | undefined) {
method setup (line 559) | setup() {
method setup (line 602) | setup() {
method setup (line 640) | setup() {
method setup (line 674) | setup() {
method setup (line 705) | setup() {
method setup (line 734) | setup() {
method setup (line 780) | setup() {
method setup (line 817) | setup() {
method setup (line 857) | setup() {
method setup (line 890) | setup() {
method setup (line 923) | setup() {
method setup (line 957) | setup() {
method setup (line 991) | setup() {
method setup (line 1023) | setup() {
method setup (line 1056) | setup() {
method setup (line 1094) | setup() {
method setup (line 1123) | setup() {
method setup (line 1146) | setup() {
method setup (line 1173) | setup() {
method setup (line 1194) | setup() {
method setup (line 1215) | setup() {
method setup (line 1241) | setup() {
method setup (line 1267) | setup() {
method setup (line 1295) | setup() {
method setup (line 1332) | setup() {
method setup (line 1355) | setup() {
method setup (line 1386) | setup() {
method setup (line 1412) | setup() {
method setup (line 1441) | setup() {
method setup (line 1472) | setup() {
FILE: packages/vee-validate/tests/useFormErrors.spec.ts
method setup (line 10) | setup() {
method setup (line 40) | setup() {
FILE: packages/vee-validate/tests/useFormValues.spec.ts
method setup (line 10) | setup() {
method setup (line 41) | setup() {
FILE: packages/vee-validate/tests/useIsFieldDirty.spec.ts
method setup (line 8) | setup() {
method setup (line 38) | setup() {
method setup (line 50) | setup() {
method setup (line 77) | setup() {
method setup (line 111) | setup() {
method setup (line 137) | setup() {
FILE: packages/vee-validate/tests/useIsFieldTouched.spec.ts
method setup (line 8) | setup() {
method setup (line 39) | setup() {
method setup (line 51) | setup() {
method setup (line 79) | setup() {
method setup (line 114) | setup() {
method setup (line 140) | setup() {
FILE: packages/vee-validate/tests/useIsFieldValid.spec.ts
method setup (line 11) | setup() {
method setup (line 41) | setup() {
method setup (line 53) | setup() {
method setup (line 81) | setup() {
method setup (line 115) | setup() {
method setup (line 141) | setup() {
FILE: packages/vee-validate/tests/useIsFormDirty.spec.ts
method setup (line 7) | setup() {
method setup (line 39) | setup() {
FILE: packages/vee-validate/tests/useIsFormTouched.spec.ts
method setup (line 7) | setup() {
method setup (line 39) | setup() {
FILE: packages/vee-validate/tests/useIsFormValid.spec.ts
method setup (line 10) | setup() {
method setup (line 43) | setup() {
FILE: packages/vee-validate/tests/useIsSubmitting.spec.ts
method setup (line 14) | setup() {
method setup (line 48) | setup() {
FILE: packages/vee-validate/tests/useIsValidating.spec.ts
method setup (line 11) | setup() {
method setup (line 50) | setup() {
FILE: packages/vee-validate/tests/useResetForm.spec.ts
method setup (line 13) | setup() {
method setup (line 58) | setup() {
method setup (line 82) | setup() {
FILE: packages/vee-validate/tests/useSetFieldError.spec.ts
method setup (line 12) | setup() {
method setup (line 42) | setup() {
method setup (line 52) | setup() {
method setup (line 81) | setup() {
FILE: packages/vee-validate/tests/useSetFieldTouched.spec.ts
method setup (line 12) | setup() {
method setup (line 40) | setup() {
method setup (line 50) | setup() {
method setup (line 80) | setup() {
FILE: packages/vee-validate/tests/useSetFieldValue.spec.ts
method setup (line 12) | setup() {
method setup (line 40) | setup() {
method setup (line 50) | setup() {
method setup (line 81) | setup() {
FILE: packages/vee-validate/tests/useSetFormErrors.spec.ts
method setup (line 13) | setup() {
method setup (line 41) | setup() {
FILE: packages/vee-validate/tests/useSetFormTouched.spec.ts
method setup (line 11) | setup() {
method setup (line 42) | setup() {
method setup (line 74) | setup() {
FILE: packages/vee-validate/tests/useSetFormValues.spec.ts
method setup (line 11) | setup() {
method setup (line 47) | setup() {
FILE: packages/vee-validate/tests/useSubmitCount.spec.ts
method setup (line 7) | setup() {
method setup (line 37) | setup() {
FILE: packages/vee-validate/tests/useSubmitForm.spec.ts
method setup (line 11) | setup() {
method setup (line 54) | setup() {
FILE: packages/vee-validate/tests/useValidateField.spec.ts
method setup (line 12) | setup() {
method setup (line 38) | setup() {
method setup (line 51) | setup() {
method setup (line 78) | setup() {
method setup (line 109) | setup() {
method setup (line 130) | setup() {
FILE: packages/vee-validate/tests/useValidateForm.spec.ts
method setup (line 11) | setup() {
method setup (line 42) | setup() {
FILE: scripts/build.mjs
function buildLocales (line 18) | async function buildLocales() {
function minify (line 34) | async function minify({ code, pkg, bundleName }) {
function build (line 48) | async function build(pkg) {
FILE: scripts/config.mjs
function createConfig (line 30) | async function createConfig(pkg, format) {
FILE: scripts/generate-dts.mjs
function generateDts (line 14) | async function generateDts(pkg) {
function bundleDts (line 42) | async function bundleDts(declarationDir, pkg) {
FILE: scripts/info.mjs
function reportSize (line 5) | function reportSize({ path, code }) {
FILE: scripts/normalize-path.mjs
function slashes (line 3) | function slashes(path) {
function normalizePath (line 7) | function normalizePath(path) {
Condensed preview — 420 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,472K chars).
[
{
"path": ".changeset/README.md",
"chars": 510,
"preview": "# Changesets\n\nHello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that wo"
},
{
"path": ".changeset/config.json",
"chars": 354,
"preview": "{\n \"$schema\": \"https://unpkg.com/@changesets/config@2.3.0/schema.json\",\n \"changelog\": \"@changesets/cli/changelog\",\n \""
},
{
"path": ".changeset/evil-loops-shine.md",
"chars": 70,
"preview": "---\n'vee-validate': minor\n---\n\nfeat: remove deprecated useField props\n"
},
{
"path": ".changeset/gentle-geckos-share.md",
"chars": 94,
"preview": "---\n'vee-validate': patch\n---\n\nfix(devtools): prevent SSR memory leak in DevTools integration\n"
},
{
"path": ".changeset/happy-wasps-rush.md",
"chars": 72,
"preview": "---\n'vee-validate': patch\n---\n\nfeat: expose `getConfig` as a public API\n"
},
{
"path": ".changeset/pre.json",
"chars": 466,
"preview": "{\n \"mode\": \"pre\",\n \"tag\": \"beta\",\n \"initialVersions\": {\n \"vee-validate-docs\": null,\n \"@vee-validate/i18n\": \"4.1"
},
{
"path": ".changeset/pretty-onions-add.md",
"chars": 74,
"preview": "---\n'vee-validate': patch\n---\n\nFix dev tools not showing all field states\n"
},
{
"path": ".changeset/revert-number-to-string.md",
"chars": 111,
"preview": "---\n'vee-validate': patch\n---\n\nfix: revert number input type back to string from number, closes #4699 and #4482"
},
{
"path": ".changeset/six-parrots-flash.md",
"chars": 78,
"preview": "---\n'vee-validate': minor\n---\n\nfeat: remove deprecated useForm define methods\n"
},
{
"path": ".changeset/smart-needles-own.md",
"chars": 148,
"preview": "---\n'vee-validate': major\n'@vee-validate/rules': major\n'@vee-validate/nuxt': major\n'@vee-validate/i18n': major\n---\n\nfeat"
},
{
"path": ".changeset/stupid-friends-relate.md",
"chars": 89,
"preview": "---\n'vee-validate': patch\n---\n\nFix dev tools do not display nested fields with name 'id'\n"
},
{
"path": ".circleci/config.yml",
"chars": 1677,
"preview": "# Use the latest 2.1 version of CircleCI pipeline process engine.\n# See: https://circleci.com/docs/2.0/configuration-ref"
},
{
"path": ".github/FUNDING.yml",
"chars": 548,
"preview": "# These are supported funding model platforms\n\ngithub: logaretm\n# patreon: logaretm\n# open_collective: vee-validate\nko_f"
},
{
"path": ".github/ISSUE_TEMPLATE/Feature_request.md",
"chars": 517,
"preview": "---\r\nname: 🚀 Feature request\r\nabout: Suggest an idea for this project.\r\n---\r\n\r\n**Is your feature request related to a pr"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yaml",
"chars": 1939,
"preview": "name: Bug Report\r\ndescription: File a bug report\r\ntitle: '<title>'\r\nbody:\r\n - type: markdown\r\n attributes:\r\n va"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 386,
"preview": "🔎 __Overview__\n\n<!-- Explain the why behind adding this PR, here is a couple of examples -->\n<!--\n This PR {adds/fixes/"
},
{
"path": ".github/workflows/ci.yml",
"chars": 1217,
"preview": "name: CI\n\non: [push, workflow_call]\n\njobs:\n lint:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout code\n "
},
{
"path": ".github/workflows/release.yml",
"chars": 1042,
"preview": "name: Release\n\non: workflow_dispatch\n\npermissions:\n id-token: write\n contents: write\n\njobs:\n checks:\n uses: ./.git"
},
{
"path": ".gitignore",
"chars": 163,
"preview": "node_modules\n.nyc_output\nnpm-debug.log\ncoverage\n.idea\n.vscode\n.vs\nyarn-error.log\ndist\n.rpt2_cache\n./types\n\n.DS_STORE\n\nle"
},
{
"path": ".husky/.gitignore",
"chars": 2,
"preview": "_\n"
},
{
"path": ".husky/commit-msg",
"chars": 68,
"preview": "#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\npnpm commitlint --edit $1\n"
},
{
"path": ".husky/pre-commit",
"chars": 59,
"preview": "#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\npnpm lint-staged\n"
},
{
"path": ".prettierrc",
"chars": 307,
"preview": " {\n \"printWidth\": 120,\n \"tabWidth\": 2,\n \"semi\": true,\n \"singleQuote\": true,\n \"bracketSpacing\": true,\n \"arrowParens"
},
{
"path": "CHANGELOG.md",
"chars": 87698,
"preview": "# Change Log\n\n## 5.0.0-beta.1\n\n### Minor Changes\n\n- f629397: feat: remove deprecated useField props\n- fb5e04e: feat: rem"
},
{
"path": "CONDUCT.md",
"chars": 3216,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "CONTRIBUTING.md",
"chars": 4648,
"preview": "# Contributing to Vee-Validate\n\nFirst of all, thanks for taking interest into contributing to this repository, below is "
},
{
"path": "LICENSE",
"chars": 1100,
"preview": "The MIT License (MIT)\n\nCopyright (c) Abdelrahman Awad <logaretm1@gmail.com>\n\nPermission is hereby granted, free of charg"
},
{
"path": "README.md",
"chars": 5592,
"preview": "<p align=\"center\">\r\n <a href=\"https://vee-validate.logaretm.com\" target=\"_blank\">\r\n <img src=\"https://raw.githubuser"
},
{
"path": "commitlint.config.mjs",
"chars": 665,
"preview": "export default {\n extends: ['@commitlint/config-conventional'],\n rules: {\n 'body-leading-blank': [1, 'always'],\n "
},
{
"path": "docs/.gitignore",
"chars": 29,
"preview": ".nuxt\ndist\nnode_modules\n\nsw.*"
},
{
"path": "docs/CHANGELOG.md",
"chars": 2314,
"preview": "# vee-validate-docs\n\n## null\n\n### Patch Changes\n\n- Updated dependencies [9867e59]\n- Updated dependencies [721e980]\n- Upd"
},
{
"path": "docs/_redirects",
"chars": 352,
"preview": "# redirects old component api paths to new one\n/guide/validation /v5/guide/components/validation\n/gu"
},
{
"path": "docs/astro.config.ts",
"chars": 876,
"preview": "import { defineConfig } from 'astro/config';\nimport vue from '@astrojs/vue';\nimport remarkGfm from 'remark-gfm';\nimport "
},
{
"path": "docs/baseLink.ts",
"chars": 785,
"preview": "import { visit } from 'unist-util-visit';\n\nexport default function addBasePath(basePath: string) {\n return function () "
},
{
"path": "docs/highlight.ts",
"chars": 4364,
"preview": "import * as shiki from 'shiki';\nimport { JSDOM } from 'jsdom';\nimport { visit } from 'unist-util-visit';\nimport theme fr"
},
{
"path": "docs/package.json",
"chars": 994,
"preview": "{\n \"private\": true,\n \"name\": \"vee-validate-docs\",\n \"scripts\": {\n \"dev\": \"astro dev\",\n \"start\": \"astro dev\",\n "
},
{
"path": "docs/postcss.config.js",
"chars": 114,
"preview": "module.exports = {\n plugins: {\n 'tailwindcss/nesting': {},\n tailwindcss: {},\n autoprefixer: {},\n },\n};\n"
},
{
"path": "docs/public/img/browserconfig.xml",
"chars": 281,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<browserconfig><msapplication><tile><square70x70logo src=\"/ms-icon-70x70.png\"/><s"
},
{
"path": "docs/public/img/manifest.json",
"chars": 720,
"preview": "{\n \"name\": \"App\",\n \"icons\": [\n {\n \"src\": \"\\/android-icon-36x36.png\",\n \"sizes\": \"36x36\",\n \"type\": \"image\\/png\",\n "
},
{
"path": "docs/public/loadTheme.js",
"chars": 290,
"preview": "(function setUserPreferredTheme() {\n const themeSetting = localStorage.getItem('theme');\n // no dark setting, get it f"
},
{
"path": "docs/scripts/afterBuild.js",
"chars": 214,
"preview": "/* eslint-disable @typescript-eslint/no-var-requires */\n\nconst path = require('path');\nconst fs = require('fs');\n\nfs.cop"
},
{
"path": "docs/src/components/Ad.vue",
"chars": 2856,
"preview": "<template>\n <div v-if=\"!hasError\" id=\"ad\" :class=\"{ 'placement-home': placement === 'home-page' }\">\n <!-- Show an im"
},
{
"path": "docs/src/components/CodeTitle.vue",
"chars": 370,
"preview": "<template>\n <component :is=\"tag\">\n <slot />\n </component>\n</template>\n\n<script>\nexport default {\n props: {\n lev"
},
{
"path": "docs/src/components/ContentWrapper.vue",
"chars": 4638,
"preview": "<template>\n <div class=\"rendered-content\">\n <slot />\n </div>\n</template>\n\n<style lang=\"postcss\">\n.rendered-content "
},
{
"path": "docs/src/components/DocBadge.vue",
"chars": 185,
"preview": "<template>\n <span class=\"px-2 py-1 bg-accent-800 text-white text-sm rounded-lg\">{{ title }}</span>\n</template>\n\n<script"
},
{
"path": "docs/src/components/DocFlavor.vue",
"chars": 2746,
"preview": "<template>\n <div class=\"mt-8\">\n <h2 class=\"text-2xl font-display inline-block\">Choose a flavor</h2>\n <p class=\"mt"
},
{
"path": "docs/src/components/DocMenu.vue",
"chars": 5753,
"preview": "<template>\n <div class=\"relative mt-20 lg:mt-4 font-ui\">\n <div\n class=\"bg-gradient-to-b from-white dark:from-da"
},
{
"path": "docs/src/components/DocNextStep.vue",
"chars": 1473,
"preview": "<template>\n <div class=\"pt-4\">\n <h2 class=\"text-xl\">Next Step</h2>\n\n <p v-if=\"intro\">{{ intro }}</p>\n\n <a :hre"
},
{
"path": "docs/src/components/DocSearch.vue",
"chars": 4155,
"preview": "<template>\n <div>\n <button\n type=\"button\"\n class=\"border border-gray-200 hover:border-gray-300 dark:border"
},
{
"path": "docs/src/components/DocTip.vue",
"chars": 1686,
"preview": "<template>\n <div\n class=\"p-6 rounded my-8 border-l-4 bg-gray-100 dark:bg-zinc-800\"\n :class=\"{\n 'border-accen"
},
{
"path": "docs/src/components/DocToc.vue",
"chars": 2152,
"preview": "<template>\n <nav class=\"py-4 overflow-y-auto overscroll-y-contain\" v-show=\"headings.length\">\n <p class=\"font-bold te"
},
{
"path": "docs/src/components/EditPage.vue",
"chars": 957,
"preview": "<template>\n <div class=\"flex items-center\">\n <a\n :href=\"pageLink\"\n target=\"_blank\"\n rel=\"noopener\"\n "
},
{
"path": "docs/src/components/ExpandTransition.vue",
"chars": 1729,
"preview": "<template>\n <transition name=\"expand\" :appear=\"appear\" @enter=\"enter\" @after-enter=\"afterEnter\" @leave=\"leave\">\n <sl"
},
{
"path": "docs/src/components/FeatureCard.vue",
"chars": 1530,
"preview": "<template>\n <div\n ref=\"elementRef\"\n class=\"FeatureCard bg-gradient-to-br from-gray-200 to-gray-100 dark:from-zinc"
},
{
"path": "docs/src/components/FloatingMenu.vue",
"chars": 1507,
"preview": "<template>\n <slot name=\"trigger\" :toggle=\"onMenuToggle\" :isOpen=\"isOpen\" />\n\n <div ref=\"menuRef\" class=\"fixed z-40 max"
},
{
"path": "docs/src/components/Icon.vue",
"chars": 273,
"preview": "<template>\n <svg class=\"icon flex-shrink-0\">\n <use :xlink:href=\"`${basePath}#icon-${name}`\"></use>\n </svg>\n</templa"
},
{
"path": "docs/src/components/LiveExample.vue",
"chars": 595,
"preview": "<template>\n <div ref=\"elRef\"></div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, ref } from 'vue';\nimport "
},
{
"path": "docs/src/components/LogQueryStr.vue",
"chars": 446,
"preview": "<template>\n <div>\n Submitted data:\n\n <pre>{{ queryObj }}</pre>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimp"
},
{
"path": "docs/src/components/MainPageExample.vue",
"chars": 1486,
"preview": "<template>\n <div class=\"mt-14 flex flex-col items-center\">\n <div\n class=\"bg-gray-200 dark:bg-black max-w-xs p-1"
},
{
"path": "docs/src/components/MdxRepl.vue",
"chars": 765,
"preview": "<template>\n <div class=\"my-8 relative\">\n <Suspense v-if=\"editor\">\n <Repl :editor=\"editor\" :files=\"files\" />\n\n "
},
{
"path": "docs/src/components/Repl.vue",
"chars": 7094,
"preview": "<script setup lang=\"ts\" async>\nimport { ref, version } from 'vue';\nimport { useFullscreen } from '@vueuse/core';\nimport "
},
{
"path": "docs/src/components/SideMenu.vue",
"chars": 1555,
"preview": "<template>\n <transition name=\"slide\">\n <div v-if=\"modelValue\" class=\"SideMenu lg:hidden\">\n <DocMenu :menu=\"menu"
},
{
"path": "docs/src/components/SideMenuButton.vue",
"chars": 3110,
"preview": "<template>\n <button\n @click=\"$emit('update:modelValue', !modelValue)\"\n class=\"burger burger-squeeze\"\n aria-lab"
},
{
"path": "docs/src/components/SiteHead.astro",
"chars": 1506,
"preview": "---\nimport { generateLinks, generateMetaTags, generateSocialImage } from '@/utils/seo';\nimport config from '@/config';\n\n"
},
{
"path": "docs/src/components/SponsorButton.vue",
"chars": 1101,
"preview": "<template>\n <a\n target=\"_blank\"\n rel=\"noopener\"\n href=\"https://github.com/sponsors/logaretm\"\n class=\"flex i"
},
{
"path": "docs/src/components/SpriteSheet.astro",
"chars": 690,
"preview": "---\nconst iconModules = import.meta.env.DEV ? await import.meta.glob('../icons/*.svg', { as: 'raw' }) : {};\n\nconst icons"
},
{
"path": "docs/src/components/StarCount.vue",
"chars": 855,
"preview": "<template>\n <a\n href=\"https://github.com/logaretm/vee-validate/stargazers\"\n target=\"_blank\"\n rel=\"noopener\"\n "
},
{
"path": "docs/src/components/TheHeader.vue",
"chars": 3105,
"preview": "<template>\n <header class=\"pt-3 pb-3 sticky top-0 dark:bg-gray-700 bg-white z-20 border-b dark:border-gray-600 border-g"
},
{
"path": "docs/src/components/ThemeSwitcher.vue",
"chars": 1187,
"preview": "<template>\n <button class=\"opacity-50 transition-opacity duration-200 hover:opacity-100\" @click=\"isDark = !isDark\">\n "
},
{
"path": "docs/src/components/UiLibraries.vue",
"chars": 959,
"preview": "<template>\n <div class=\"grid grid-flow-col justify-center content-center py-8 gap-10\">\n <div v-for=\"lib in libraries"
},
{
"path": "docs/src/components/VersionSwitcher.vue",
"chars": 1986,
"preview": "<template>\n <FloatingMenu>\n <template #trigger=\"{ toggle, isOpen }\">\n <button\n type=\"button\"\n @cl"
},
{
"path": "docs/src/components/examples/ComponentsBasic.vue",
"chars": 580,
"preview": "<script setup>\nimport { Field, Form, ErrorMessage } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst schema = yup"
},
{
"path": "docs/src/components/examples/CompositionBasic.vue",
"chars": 831,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst schema = yup.object({\n email:"
},
{
"path": "docs/src/components/examples/CompositionComponentBindsBasic01.vue",
"chars": 318,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport CustomInput from './CustomInput.vue';\n\nconst { values, def"
},
{
"path": "docs/src/components/examples/CompositionComponentBindsBasic02.vue",
"chars": 474,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\nimport CustomInput from './CustomInpu"
},
{
"path": "docs/src/components/examples/CompositionComponentBindsBasic03.vue",
"chars": 509,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\nimport CustomInput from './CustomInpu"
},
{
"path": "docs/src/components/examples/CompositionComponentBindsBasic04.vue",
"chars": 534,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\nimport CustomInput from './CustomInpu"
},
{
"path": "docs/src/components/examples/CompositionComponentBindsBasic05.vue",
"chars": 573,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst { values, errors, defineField "
},
{
"path": "docs/src/components/examples/CompositionCustomField01.vue",
"chars": 892,
"preview": "<template>\n <form @submit=\"onSubmit\">\n <InputText name=\"firstName\" />\n <InputText name=\"lastName\" />\n <InputTe"
},
{
"path": "docs/src/components/examples/CompositionCustomField02.vue",
"chars": 232,
"preview": "<template>\n <InputText name=\"email\" type=\"email\" v-model=\"email\" />\n\n <pre>Model: {{ email }}</pre>\n</template>\n\n<scri"
},
{
"path": "docs/src/components/examples/CompositionCustomField03.vue",
"chars": 298,
"preview": "<template>\n <InputText name=\"email\" type=\"email\" />\n</template>\n\n<script setup>\nimport { useForm } from 'vee-validate';"
},
{
"path": "docs/src/components/examples/CompositionCustomField04.vue",
"chars": 906,
"preview": "<template>\n <form @submit=\"onSubmit\">\n <InputText name=\"firstName\" />\n <InputText name=\"lastName\" />\n <InputTe"
},
{
"path": "docs/src/components/examples/CompositionCustomField05.vue",
"chars": 906,
"preview": "<template>\n <form @submit=\"onSubmit\">\n <InputText name=\"firstName\" />\n <InputText name=\"lastName\" />\n <InputTe"
},
{
"path": "docs/src/components/examples/CompositionCustomFieldCheckbox.vue",
"chars": 599,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\nimport CustomCheckbox from './CustomC"
},
{
"path": "docs/src/components/examples/CompositionDynamicSchemaComputed.vue",
"chars": 514,
"preview": "<script setup>\nimport { ref, computed } from 'vue';\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n"
},
{
"path": "docs/src/components/examples/CompositionDynamicSchemaYupLazy.vue",
"chars": 504,
"preview": "<script setup>\nimport { ref } from 'vue';\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst lim"
},
{
"path": "docs/src/components/examples/CompositionHandlingForms01.vue",
"chars": 278,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\n\nconst { meta, defineField } = useForm();\n\nconst [name, nameAttrs"
},
{
"path": "docs/src/components/examples/CompositionHandlingForms02.vue",
"chars": 897,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst { errors, handleSubmit, define"
},
{
"path": "docs/src/components/examples/CompositionHandlingForms03.vue",
"chars": 1109,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst { errors, handleSubmit, define"
},
{
"path": "docs/src/components/examples/CompositionHandlingForms04.vue",
"chars": 865,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\n\nconst { handleSubmit, defineField, isSubmitting, errors } = useF"
},
{
"path": "docs/src/components/examples/CompositionHandlingForms05.vue",
"chars": 803,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\n\nconst { handleSubmit, defineField, submitCount, errors } = useFo"
},
{
"path": "docs/src/components/examples/CompositionHandlingForms06.vue",
"chars": 631,
"preview": "<template>\n <form @submit=\"onSubmit\">\n <input type=\"email\" v-model=\"email\" v-bind=\"emailAttrs\" />\n\n <input type=\""
},
{
"path": "docs/src/components/examples/CompositionHandlingForms07.vue",
"chars": 667,
"preview": "<template>\n <input type=\"email\" v-model=\"email\" v-bind=\"emailAttrs\" />\n\n <input type=\"password\" v-model=\"password\" v-b"
},
{
"path": "docs/src/components/examples/CompositionHandlingForms08.vue",
"chars": 1094,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst { resetForm, defineField, meta"
},
{
"path": "docs/src/components/examples/CompositionHandlingForms09.vue",
"chars": 1009,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst { defineField, errors, handleS"
},
{
"path": "docs/src/components/examples/CompositionHandlingForms10.vue",
"chars": 449,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst { defineField, errorBag } = us"
},
{
"path": "docs/src/components/examples/CompositionHandlingForms11.vue",
"chars": 926,
"preview": "<template>\n <form @submit=\"onSubmit\">\n <input type=\"email\" v-model=\"email\" v-bind=\"emailAttrs\" />\n {{ errors.emai"
},
{
"path": "docs/src/components/examples/CompositionHandlingForms12.vue",
"chars": 712,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst initialUserData = {\n id: 1,\n "
},
{
"path": "docs/src/components/examples/CompositionHandlingForms13.vue",
"chars": 752,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst { errors, submitForm, defineFi"
},
{
"path": "docs/src/components/examples/CompositionHandlingForms14.vue",
"chars": 1149,
"preview": "<script setup>\nimport { onMounted } from 'vue';\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\n/**"
},
{
"path": "docs/src/components/examples/CompositionInputBindsBasic01.vue",
"chars": 279,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\n\nconst { values, defineField } = useForm();\n\nconst [email, emailA"
},
{
"path": "docs/src/components/examples/CompositionInputBindsBasic02.vue",
"chars": 423,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst { values, errors, defineField "
},
{
"path": "docs/src/components/examples/CompositionInputBindsBasic03.vue",
"chars": 460,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst { values, errors, defineField "
},
{
"path": "docs/src/components/examples/CompositionInputFieldFn.vue",
"chars": 353,
"preview": "<template>\n <input type=\"text\" v-model=\"value\" />\n {{ errorMessage }}\n</template>\n\n<script setup>\nimport { useField } "
},
{
"path": "docs/src/components/examples/CompositionInputFieldValibot.vue",
"chars": 303,
"preview": "<template>\n <input type=\"text\" v-model=\"value\" />\n {{ errorMessage }}\n</template>\n\n<script setup>\nimport { useField } "
},
{
"path": "docs/src/components/examples/CompositionInputFieldYup.vue",
"chars": 264,
"preview": "<template>\n <input type=\"text\" v-model=\"value\" />\n {{ errorMessage }}\n</template>\n\n<script setup>\nimport { useField } "
},
{
"path": "docs/src/components/examples/CompositionInputFieldZod.vue",
"chars": 267,
"preview": "<template>\n <input type=\"text\" v-model=\"value\" />\n {{ errorMessage }}\n</template>\n\n<script setup>\nimport { useField } "
},
{
"path": "docs/src/components/examples/CompositionNested01.vue",
"chars": 517,
"preview": "<template>\n <form @submit=\"onSubmit\">\n <input v-model=\"twitter\" type=\"url\" placeholder=\"twitter\" />\n <input v-mod"
},
{
"path": "docs/src/components/examples/CompositionNested02.vue",
"chars": 508,
"preview": "<template>\n <form @submit=\"onSubmit\">\n <input v-model=\"twitter\" type=\"url\" placeholder=\"twitter\" />\n <input v-mod"
},
{
"path": "docs/src/components/examples/CompositionNested03.vue",
"chars": 531,
"preview": "<template>\n <form @submit=\"onSubmit\">\n <input v-model=\"twitter\" type=\"url\" placeholder=\"twitter\" />\n <input v-mod"
},
{
"path": "docs/src/components/examples/CompositionNested04.vue",
"chars": 685,
"preview": "<template>\n <form @submit=\"onSubmit\" novalidate>\n <div v-for=\"(field, idx) in fields\" :key=\"field.key\">\n <input"
},
{
"path": "docs/src/components/examples/CompositionNested05.vue",
"chars": 824,
"preview": "<template>\n <form @submit=\"onSubmit\">\n <input v-model=\"name\" v-bind=\"nameAttrs\" />\n <span>{{ errors['user.name'] "
},
{
"path": "docs/src/components/examples/CompositionValibotBasic.vue",
"chars": 645,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as v from 'valibot';\n\nconst { errors, defineField } = us"
},
{
"path": "docs/src/components/examples/CompositionValidateFnBasic.vue",
"chars": 435,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\n\nfunction isEmail(value) {\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/."
},
{
"path": "docs/src/components/examples/CompositionYupBasic.vue",
"chars": 573,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport * as yup from 'yup';\n\nconst { errors, defineField } = useF"
},
{
"path": "docs/src/components/examples/CompositionZodBasic.vue",
"chars": 549,
"preview": "<script setup>\nimport { useForm } from 'vee-validate';\nimport { z } from 'zod';\n\nconst { errors, defineField } = useForm"
},
{
"path": "docs/src/components/examples/CustomCheckboxInputBasic.vue",
"chars": 545,
"preview": "<template>\n <input :value=\"checkedValue\" :checked=\"checked\" @change=\"handleChange\" type=\"checkbox\" />\n</template>\n\n<scr"
},
{
"path": "docs/src/components/examples/CustomInputBasic.vue",
"chars": 272,
"preview": "<template>\n <input :value=\"modelValue\" @input=\"$emit('update:modelValue', $event.target.value)\" @blur=\"$emit('blur')\" /"
},
{
"path": "docs/src/components/examples/CustomInputBasicError.vue",
"chars": 337,
"preview": "<template>\n <div>\n <input :value=\"modelValue\" @input=\"$emit('update:modelValue', $event.target.value)\" @blur=\"$emit("
},
{
"path": "docs/src/components/examples/CustomInputBasicValueEvent.vue",
"chars": 252,
"preview": "<template>\n <input :value=\"value\" @input=\"$emit('update:value', $event.target.value)\" @blur=\"$emit('blur')\" />\n</templa"
},
{
"path": "docs/src/components/examples/CustomInputFieldAggressive.vue",
"chars": 325,
"preview": "<template>\n <input @input=\"handleChange\" :value=\"value\" type=\"text\" />\n <span>{{ errorMessage }}</span>\n</template>\n\n<"
},
{
"path": "docs/src/components/examples/CustomInputFieldBasic.vue",
"chars": 443,
"preview": "<template>\n <input v-model=\"value\" :type=\"type || 'text'\" />\n {{ errorMessage }}\n</template>\n\n<script setup>\nimport { "
},
{
"path": "docs/src/components/examples/CustomInputFieldEager.vue",
"chars": 543,
"preview": "<template>\n <input :value=\"value\" v-on=\"validationListeners\" type=\"text\" />\n <span>{{ errorMessage }}</span>\n</templat"
},
{
"path": "docs/src/components/examples/CustomInputFieldMeta.vue",
"chars": 999,
"preview": "<template>\n <div class=\"input-field\">\n <input\n :value=\"value\"\n :type=\"type || 'text'\"\n :class=\"{ dirt"
},
{
"path": "docs/src/components/examples/CustomInputFieldMultiErrors.vue",
"chars": 512,
"preview": "<template>\n <input v-model=\"value\" :type=\"type || 'text'\" />\n <ul v-if=\"errors.length\">\n <li v-for=\"error in errors"
},
{
"path": "docs/src/components/examples/CustomInputFieldVModel.vue",
"chars": 501,
"preview": "<template>\n <input v-model=\"value\" :type=\"type || 'text'\" />\n {{ errorMessage }}\n</template>\n\n<script setup>\nimport { "
},
{
"path": "docs/src/config.ts",
"chars": 293,
"preview": "export default {\n algolia: {\n apiKey: '63f5a0934f840b36e5d33af009ddff15',\n appId: 'F6BYW6NAIH',\n indexName: 'v"
},
{
"path": "docs/src/constants.ts",
"chars": 1373,
"preview": "export const features = [\n { title: 'Form-level validation', description: '' },\n { title: 'Field-level validation', de"
},
{
"path": "docs/src/env.d.ts",
"chars": 39,
"preview": "/// <reference types=\"astro/client\" />\n"
},
{
"path": "docs/src/integrations/svgSprite.ts",
"chars": 958,
"preview": "import path from 'path';\nimport { AstroIntegration } from 'astro';\nimport { writeFile } from 'fs-extra';\n\nconst integrat"
},
{
"path": "docs/src/layouts/HomeLayout.astro",
"chars": 1307,
"preview": "---\nimport TheHeader from '@/components/TheHeader.vue';\nimport SiteHead from '@/components/SiteHead.astro';\nimport Ad fr"
},
{
"path": "docs/src/layouts/PageLayout.astro",
"chars": 3489,
"preview": "---\nimport path from 'path';\nimport SiteHead from '@/components/SiteHead.astro';\nimport Ad from '@/components/Ad.vue';\ni"
},
{
"path": "docs/src/pages/api/composition-helpers.mdx",
"chars": 9540,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Composition Helpers\ndescription: Various composable functions to compo"
},
{
"path": "docs/src/pages/api/configuration.mdx",
"chars": 4401,
"preview": "---\r\nlayout: ../../layouts/PageLayout.astro\r\ntitle: Configuration\r\ndescription: VeeValidate Global Config Reference\r\nord"
},
{
"path": "docs/src/pages/api/error-message.mdx",
"chars": 2848,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: ErrorMessage\ndescription: API reference for the ErrorMessage component"
},
{
"path": "docs/src/pages/api/field-array.mdx",
"chars": 3751,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: FieldArray\ndescription: API reference for the Field Array component\nme"
},
{
"path": "docs/src/pages/api/field.mdx",
"chars": 15820,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Field\ndescription: API reference for the Field component\nmenuTitle: '<"
},
{
"path": "docs/src/pages/api/form.mdx",
"chars": 11414,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Form\ndescription: API reference for the Form component\nmenuTitle: '<Fo"
},
{
"path": "docs/src/pages/api/use-field-array.mdx",
"chars": 6130,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: useFieldArray\ndescription: API reference for the useFieldArray composi"
},
{
"path": "docs/src/pages/api/use-field.mdx",
"chars": 10854,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: useField\ndescription: API reference for the useField composition API f"
},
{
"path": "docs/src/pages/api/use-form.mdx",
"chars": 21707,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: useForm\ndescription: API reference for the useForm composition API fun"
},
{
"path": "docs/src/pages/examples/array-fields.mdx",
"chars": 340,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Array Fields\ndescription: How to implement array fields in vee-validat"
},
{
"path": "docs/src/pages/examples/async-validation.mdx",
"chars": 369,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Async Validation\ndescription: Using async validation with vee-validate"
},
{
"path": "docs/src/pages/examples/checkboxes-and-radio.mdx",
"chars": 2066,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Checkbox and Radio Inputs\ndescription: Validating checkboxes and Radio"
},
{
"path": "docs/src/pages/examples/cross-field-validation.mdx",
"chars": 426,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Cross-Field Validation\ndescription: Validating input values depending "
},
{
"path": "docs/src/pages/examples/custom-checkboxes.mdx",
"chars": 2994,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Custom Checkboxes\ndescription: Creating validatable checkbox inputs\nor"
},
{
"path": "docs/src/pages/examples/custom-inputs.mdx",
"chars": 1149,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Custom Inputs\ndescription: Building custom inputs with useField()\norde"
},
{
"path": "docs/src/pages/examples/dynamic-validation-triggers.mdx",
"chars": 690,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Dynamic validation triggers\ndescription: Dynamic interaction for your "
},
{
"path": "docs/src/pages/examples/multistep-form-wizard.mdx",
"chars": 715,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Multi-step Form Wizard\ndescription: a multi-step form wizard\norder: 7\n"
},
{
"path": "docs/src/pages/examples/ui-libraries.mdx",
"chars": 4213,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Popular UI Libraries\ndescription: Validating popular Vue.js UI librari"
},
{
"path": "docs/src/pages/examples/using-stores.mdx",
"chars": 1004,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: State Stores\ndescription: using vee-validate with state stores\norder: "
},
{
"path": "docs/src/pages/examples/value-formatting.mdx",
"chars": 1452,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Value formatting and Masks\ndescription: using vee-validate with masked"
},
{
"path": "docs/src/pages/guide/components/handling-forms.mdx",
"chars": 23170,
"preview": "---\nlayout: ../../../layouts/PageLayout.astro\ntitle: Handling Forms\ndescription: Handling form state and submissions\nord"
},
{
"path": "docs/src/pages/guide/components/nested-objects-and-arrays.mdx",
"chars": 10559,
"preview": "---\nlayout: ../../../layouts/PageLayout.astro\ntitle: Nested Objects and Arrays\ndescription: Structuring forms in nested "
},
{
"path": "docs/src/pages/guide/components/validation.mdx",
"chars": 19304,
"preview": "---\nlayout: ../../../layouts/PageLayout.astro\ntitle: Validation\ndescription: Field-level and form-level validation and v"
},
{
"path": "docs/src/pages/guide/composition-api/caveats.mdx",
"chars": 4571,
"preview": "---\nlayout: ../../../layouts/PageLayout.astro\ntitle: Caveats and best practices\ndescription: Things to watch out for whe"
},
{
"path": "docs/src/pages/guide/composition-api/custom-inputs.mdx",
"chars": 16430,
"preview": "---\nlayout: ../../../layouts/PageLayout.astro\ntitle: Custom inputs\ndescription: Field-level and form-level validation an"
},
{
"path": "docs/src/pages/guide/composition-api/getting-started.mdx",
"chars": 12799,
"preview": "---\nlayout: ../../../layouts/PageLayout.astro\ntitle: Getting started\ndescription: Field-level and form-level validation "
},
{
"path": "docs/src/pages/guide/composition-api/handling-forms.mdx",
"chars": 17277,
"preview": "---\nlayout: ../../../layouts/PageLayout.astro\ntitle: Handling Forms\ndescription: Handling form state and submissions\nord"
},
{
"path": "docs/src/pages/guide/composition-api/helpers.mdx",
"chars": 1921,
"preview": "---\nlayout: ../../../layouts/PageLayout.astro\ntitle: Composition Helpers\ndescription: Composition API helpers\nmenuTitle:"
},
{
"path": "docs/src/pages/guide/composition-api/nested-objects-and-arrays.mdx",
"chars": 8736,
"preview": "---\nlayout: ../../../layouts/PageLayout.astro\ntitle: Nested Objects and Arrays\ndescription: Structuring form values in n"
},
{
"path": "docs/src/pages/guide/devtools.mdx",
"chars": 2410,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Devtools Plugin\ndescription: Using the vee-validate Vue.js devtools pl"
},
{
"path": "docs/src/pages/guide/global-validators.mdx",
"chars": 24078,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Global Validators\ndescription: Defining global rules to be used throug"
},
{
"path": "docs/src/pages/guide/i18n.mdx",
"chars": 9587,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Localization (i18n)\ndescription: Localization support with the first p"
},
{
"path": "docs/src/pages/guide/migration.mdx",
"chars": 3764,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Migration Guide\ndescription: How to migrate from vee-validate v4 to v5"
},
{
"path": "docs/src/pages/guide/overview.mdx",
"chars": 3150,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Overview\ndescription: Getting started with VeeValidate\norder: 1\n---\n\ni"
},
{
"path": "docs/src/pages/guide/testing.mdx",
"chars": 5077,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Testing\ndescription: Testing form validation in your apps\norder: 8\n---"
},
{
"path": "docs/src/pages/index.astro",
"chars": 5504,
"preview": "---\nimport HomeLayout from '@/layouts/HomeLayout.astro';\nimport SponsorButton from '@/components/SponsorButton.vue';\nimp"
},
{
"path": "docs/src/pages/integrations/nuxt.mdx",
"chars": 2393,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Nuxt integration\ndescription: VeeValidate Nuxt module\norder: 3\n---\n\nim"
},
{
"path": "docs/src/pages/resources.mdx",
"chars": 3494,
"preview": "---\nlayout: ../layouts/PageLayout.astro\ntitle: Resources\ndescription: Articles, Tutorials, and Products on VeeValidate\no"
},
{
"path": "docs/src/pages/submit-target.astro",
"chars": 391,
"preview": "---\nimport LogQueryStr from '@/components/LogQueryStr.vue';\n---\n\n<html lang=\"en\">\n <head>\n <title>Submit target</tit"
},
{
"path": "docs/src/pages/tutorials/basics.mdx",
"chars": 10338,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Validation Basics\ndescription: Build a newsletter form with vee-valida"
},
{
"path": "docs/src/pages/tutorials/dynamic-form-generator.mdx",
"chars": 12254,
"preview": "---\nlayout: ../../layouts/PageLayout.astro\ntitle: Build a Form Generator\ndescription: Learn how to build a schema-genera"
},
{
"path": "docs/src/styles/home.css",
"chars": 328,
"preview": ".App {\n @apply h-full mx-auto;\n max-width: 1500px;\n grid-template-areas:\n 'content'\n 'footer';\n display: grid;"
},
{
"path": "docs/src/styles/page.css",
"chars": 708,
"preview": ".PageApp {\n @apply h-full mx-auto;\n max-width: 1600px;\n grid-template-areas:\n 'content'\n 'footer';\n display: g"
},
{
"path": "docs/src/styles/tailwind.css",
"chars": 2220,
"preview": "@import url('https://fonts.googleapis.com/css?family=Montserrat:700,400,600,500|Noto+Sans:400,500,700&display=swap');\n@i"
},
{
"path": "docs/src/utils/examples.ts",
"chars": 1538,
"preview": "import { Project } from '@stackblitz/sdk';\nimport { version } from '../../../packages/vee-validate/package.json';\n\nexpor"
},
{
"path": "docs/src/utils/github.ts",
"chars": 324,
"preview": "export function fetchStarCount() {\n return fetch('https://api.github.com/repos/logaretm/vee-validate')\n .then(res =>"
},
{
"path": "docs/src/utils/seo.ts",
"chars": 4415,
"preview": "export function generateSocialImage({\n title,\n tagline,\n cloudName = 'logaretm',\n imagePublicID,\n cloudinaryUrlBase"
},
{
"path": "docs/tailwind.config.js",
"chars": 1645,
"preview": "/*\n ** TailwindCSS Configuration File\n **\n ** Docs: https://tailwindcss.com/docs/configuration\n ** Default: https://gith"
},
{
"path": "docs/theme.json",
"chars": 21564,
"preview": "{\n \"$schema\": \"vscode://schemas/color-theme\",\n \"name\": \"custom\",\n \"author\": \"Abdelrahman Awad\",\n \"maintainers\": [\"Ab"
},
{
"path": "docs/tsconfig.json",
"chars": 756,
"preview": "// Example: starter tsconfig.json for Astro projects\n{\n \"compilerOptions\": {\n \"baseUrl\": \".\",\n \"allowSyntheticDef"
},
{
"path": "eslint.config.js",
"chars": 1587,
"preview": "import eslint from '@eslint/js';\r\nimport globals from 'globals';\r\nimport tseslint from 'typescript-eslint';\r\n\r\nexport de"
},
{
"path": "package.json",
"chars": 2783,
"preview": "{\n \"name\": \"vee-validate-monorepo\",\n \"private\": true,\n \"description\": \"Painless forms for Vue.js\",\n \"author\": \"Abdel"
},
{
"path": "packages/i18n/CHANGELOG.md",
"chars": 19696,
"preview": "# Change Log\n\n## 5.0.0-beta.1\n\n## 5.0.0-beta.0\n\n### Major Changes\n\n- 04ff47c: feat: implement standard schema\n\n## 4.15.1"
},
{
"path": "packages/i18n/README.md",
"chars": 2723,
"preview": "# @vee-validate/i18n\n\n<p align=\"center\">\n <a href=\"https://vee-validate.logaretm.com/v5/guide/i18n\" target=\"_blank\">\n "
},
{
"path": "packages/i18n/package.json",
"chars": 1112,
"preview": "{\n \"name\": \"@vee-validate/i18n\",\n \"version\": \"5.0.0-beta.1\",\n \"description\": \"Localization module for VeeValidate\",\n "
},
{
"path": "packages/i18n/src/index.ts",
"chars": 5084,
"preview": "import { isCallable, FieldValidationMetaInfo, ValidationMessageGenerator, merge } from '../../shared';\nimport { Interpol"
},
{
"path": "packages/i18n/src/locale/ar.json",
"chars": 1508,
"preview": "{\n \"code\": \"ar\",\n \"messages\": {\n \"alpha\": \"{field} يجب ان يحتوي على حروف فقط\",\n \"alpha_num\": \"{field} قد يحتوي ف"
},
{
"path": "packages/i18n/src/locale/az.json",
"chars": 1521,
"preview": "{\n \"code\": \"az\",\n \"messages\": {\n \"alpha\": \"{field} yalnız hərflərdən ibarət olmalıdır\",\n \"alpha_num\": \"{field} y"
},
{
"path": "packages/i18n/src/locale/bg.json",
"chars": 1764,
"preview": "{\n \"code\": \"bg\",\n \"messages\": {\n \"alpha\": \"Полето {field} може да съдържа само азбучни знаци\",\n \"alpha_num\": \"По"
},
{
"path": "packages/i18n/src/locale/bn.json",
"chars": 1715,
"preview": "{\n \"code\": \"bn\",\n \"messages\": {\n \"alpha\": \"এই {field} ক্ষেত্রে কেবলমাত্র অক্ষর থাকতে পারে\",\n \"alpha_num\": \"এই {f"
},
{
"path": "packages/i18n/src/locale/ca.json",
"chars": 1587,
"preview": "{\n \"code\": \"ca\",\n \"messages\": {\n \"alpha\": \"El camp {field} només ha de contenir lletres\",\n \"alpha_num\": \"El camp"
},
{
"path": "packages/i18n/src/locale/ckb.json",
"chars": 1626,
"preview": "{\n \"code\": \"ckb\",\n \"messages\": {\n \"_default\": \"{field}ەکە دروست نییە\",\n \"alpha\": \" {field} دەکرێت تەنها کاراکتەر"
},
{
"path": "packages/i18n/src/locale/cs.json",
"chars": 1648,
"preview": "{\n \"code\": \"cs\",\n \"messages\": {\n \"_default\": \"Pole {field} není platné\",\n \"alpha\": \"Pole {field} může obsahovat "
},
{
"path": "packages/i18n/src/locale/cy.json",
"chars": 1640,
"preview": "{\n \"code\": \"cy\",\n \"messages\": {\n \"alpha\": \"Gall {field} ond gynnwys llythrennau'r wyddor\",\n \"alpha_num\": \"Gall {"
},
{
"path": "packages/i18n/src/locale/da.json",
"chars": 1593,
"preview": "{\n \"code\": \"da\",\n \"messages\": {\n \"_default\": \"{field} er ikke gyldigt\",\n \"alpha\": \"{field} må kun indeholde bogs"
},
{
"path": "packages/i18n/src/locale/de.json",
"chars": 1701,
"preview": "{\n \"code\": \"de\",\n \"messages\": {\n \"_default\": \"{field} ist ungültig\",\n \"alpha\": \"{field} darf nur alphabetische Z"
},
{
"path": "packages/i18n/src/locale/el.json",
"chars": 1645,
"preview": "{\n \"code\": \"el\",\n \"messages\": {\n \"alpha\": \"{field} πρέπει να περιέχει μόνο αλφαβητικούς χαρακτήρες\",\n \"alpha_num"
},
{
"path": "packages/i18n/src/locale/en.json",
"chars": 1823,
"preview": "{\n \"code\": \"en\",\n \"messages\": {\n \"_default\": \"The {field} is not valid\",\n \"alpha\": \"The {field} field may only c"
}
]
// ... and 220 more files (download for full content)
About this extraction
This page contains the full source code of the logaretm/vee-validate GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 420 files (1.3 MB), approximately 389.2k tokens, and a symbol index with 596 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.