Form
Validação e envio montados a partir de partes que ligam valores, rótulos, dicas e erros a qualquer controle Vitral, com regras ou um schema.
Importação
import { Form } from '@vitral/vue';Cadastro
Regras prontas em cada campo. Nada é verificado até o primeiro envio; depois disso, cada campo é verificado de novo à medida que muda, então um erro corrigido some na hora.
Validar no blur ou no envio
`validate-on` diz quando um campo é verificado pela primeira vez: `submit` (o padrão), `blur`, `change` ou `input`. Verificar no blur avisa cedo; verificar no envio nunca interrompe ninguém. Cada campo pode escolher o seu.
Rules cover a field at a time; a schema covers the form. @vitral/forms ships adapters for Zod, Yup, Valibot, Superstruct and anything carrying ~standard (ArkType, Effect Schema), each written against the smallest shape its library exposes, so the package depends on none of them — the whole of it is documented here, including the same form without a framework.
Com um resolver
Um resolver valida todos os valores de uma vez: `zodResolver(schema)`, `yupResolver`, `valibotResolver`, `superstructResolver`, `standardSchemaResolver` ou `functionResolver`, em `Form.Root` ou em `createForm`. Um adaptador só precisa do formato do schema — `safeParse`, `validate`, `~standard` —, por isso nenhuma biblioteca de schema está instalada aqui e a de baixo foi escrita à mão. As verificações entre campos (os anos) e as transformações (o handle perde os espaços das pontas e vai para minúsculas no envio) vêm do schema, e o que ele transforma é o que é enviado.
Validação assíncrona
Uma regra pode retornar uma promise. Aqui o nome é verificado enquanto você digita, 300 ms depois da última tecla; uma verificação mais nova aborta a que ainda está rodando (o `signal` dela dispara), então uma resposta lenta nunca sobrescreve uma recente. Experimente “ada” ou “admin”.
Arrays de campos
`Form.FieldArray` repete um grupo: cada entrada tem uma chave estável e um caminho para nomear seus campos, e o slot pode adicionar, inserir, remover, mover e trocar. Os erros acompanham suas linhas. As regras da própria lista aparecem num `Form.Message` colocado diretamente dentro dele.
Resumo de erros
`Form.Summary` (também `Form.Errors`) aparece depois de um envio que falhou, acima do formulário: um alerta que lista cada erro como um link para o seu campo e que recebe o foco, para que quem usa teclado ou leitor de tela comece por ali. Enquanto isso, as mensagens dos próprios campos ficam em silêncio, e nada é anunciado duas vezes.
Todos os controles
Um de cada input do Vitral, cada um ligado só por estar dentro de um `Form.Field`. Envie o formulário vazio para ver todos eles inválidos.
Usando o formulário sem framework
O estado, as regras e as verificações assíncronas são o @vitral/forms, que não desenha nada e não importa nenhum framework; as partes de Form são um wrapper sobre ele. createForm() guarda os valores e os erros, register() diz como um campo se chama e o que ele precisa ser, e subscribe() informa cada mudança. O formulário abaixo o liga a três inputs comuns à mão — que é tudo o que um adaptador para React ou Angular faria; o código dele mostra como.
API
Lido de packages/vue/src/components/Form/types.ts, então diz o que o componente aceita de fato.
Props
| Nome | Tipo | Descrição |
|---|---|---|
| initialValues | FormValuesLike | Os valores de partida, e para onde voltar ao resetar. O padrão é uma cópia do v-model. |
| resolver | FormResolverLike | Valida o formulário inteiro: `zodResolver(schema)`, `yupResolver(schema)`, `functionResolver(fn)`… |
| validate | (values: FormValuesLike, context: { signal: AbortSignal }) => unknown | Verificações entre campos, ao lado do resolver: devolva mensagens por caminho. |
| rules | Record<string, FormRuleLike | FormRuleLike[]> | Regras por caminho, para um formulário que as declara num só lugar. |
| validateOn | FormValidateOn | FormValidateOn[] | Quando um campo é validado pela primeira vez. O padrão é `submit`. Um campo pode dizer outra coisa. |
| revalidateOn | FormValidateOn | FormValidateOn[] | Quando um campo já validado é validado de novo. O padrão é `input`, então um erro some assim que é corrigido. |
| debounce | number | Milissegundos a esperar depois que a digitação para antes de uma validação disparada por input. |
| form | object | Um formulário criado com `useForm()`, para controlá-lo de fora do template. |
| focusOnInvalid | boolean | Depois de um envio que falhou, move o foco para o resumo de erros (quando há um) ou para o primeiro campo inválido. O padrão é true. |
| disabled | boolean | Desabilita todo controle ligado por um campo, e o botão de envio. |
| errorRelation | FormErrorRelation | Como um controle aponta para o seu erro. O padrão é `both`. |
Mais pt, dt e unstyled de BaseProps; veja pass-through e modo sem estilo.
Emits
| Evento | Payload | Descrição |
|---|---|---|
| submit | event: FormSubmitEvent | Todo envio, com seus valores e se são válidos. Um handler que devolve uma promise mantém o formulário enviando até ela se resolver. |
| invalid-submit | event: FormInvalidSubmitEvent | Um envio barrado por erros. |
| reset | event: FormResetEvent | — |
Slots
| Nome | Props do slot | Descrição |
|---|---|---|
| default | (props: FormRootSlotProps) | — |