A entrada com mask
(máscara) transforma automaticamente a entrada do usuário para corresponder a um formato fornecido. Quando usadas adequadamente, as entradas com máscara podem proporcionar uma experiência de usuário aprimorada, eliminando qualquer ambiguidade para o valor desejado (por exemplo, um número de telefone ou número de segurança social).
A máscara é o formato desejado da entrada. Ela é passada para a propriedade mask
onde é analisada por tokens. A máscara é composta por:
A entrada com máscara vem com 4 tokens integrados:
h
- Aceita um caractere hexadecimal (0-9a-fA-F
).#
- Aceita um caractere numérico.a
- Aceita um caractere alfabético.*
- Aceita qualquer caractere.Se você precisar usar um dos tokens integrados como um literal de string em sua máscara, você pode escapá-los com \
. Aqui estamos escapando o sinal de cerquilha #
para usar em nossa cor hexadecimal:
<FormKit mask="\#hhhhhh" type="mask" />
A entrada com máscara suporta 3 modos de entrada:
Por padrão, os caracteres de uma máscara são automaticamente deslocados para frente ao digitar. Isso é notável quando uma máscara já está preenchida e você coloca o cursor no início ou perto do início da entrada e começa a digitar. Os caracteres que seguem o seu cursor são "deslocados" para frente conforme você digita. No modo replace, no entanto, os caracteres subsequentes são sobrescritos com um novo valor:
No modo select, tokens equivalentes do tipo char
são agrupados em faixas de texto selecionáveis. O FormKit seleciona automaticamente essas faixas de texto ao clicar ou focar na entrada. Essas faixas de seleção são mantidas enquanto o usuário digita. Quando usado com bom gosto, isso produz uma UX clara, pois o usuário está ciente do valor que se espera que ele insira.
Além disso, quando uma entrada está no modo select, o usuário pode usar as teclas de seta ou tab para mover o foco de uma faixa de seleção para outra:
A propriedade selectDirection
do token controla em qual direção os novos
caracteres fluem para a faixa selecionada. Você pode preencher caracteres de seleção "vazios" com um valor predeterminado (como zeros à esquerda "0") usando a propriedade selectFill
. Veja propriedades de tokens.
E se um padrão puder aceitar letras ou números na mesma posição? É relativamente simples criar novos tokens. Existem 2 tipos de tokens:
char
aceita um único caractere.enum
aceita qualquer string de um array de valores possíveis.As seguintes propriedades devem ser definidas para criar um novo token:
{
/**
* O tipo de token. Pode ser `char` ou `enum`.
*/
type: 'char',
/**
* O token a ser extraído da máscara.
*/
token: 'z',
/**
* Um caractere de espaço reservado para exibir na entrada quando `show-mask` está
* habilitado.
*/
placeholder: '_',
/**
* Ao usar o modo `select`, determina em qual direção os novos caracteres fluem
* para dentro.
*/
selectDirection: 'left',
/**
* (Somente para o tipo `char`). Uma expressão regular que descreve os tipos de
* caracteres que podem aparecer neste espaço. Este padrão será avaliado
* contra caracteres individuais — não no contexto da string inteira.
*/
pattern: /[A-Za-z0-9]/,
/**
* (Somente para o tipo `char`, opcional). Um caractere opcional para "preencher" o
* intervalo de seleção quando no modo select. Por exemplo, um selectFill definido como
* "0" pode ser útil com números para produzir zeros à esquerda como "001".
*/
selectFill: "0",
/**
* (Somente para o tipo `enum`). Um array de valores possíveis.
*/
values: [
'March',
'April',
'May'
],
}
Por exemplo, um novo token que aceita letras e números, e é representado pela letra z
na string da máscara seria assim:
{
type: 'char',
token: 'z',
pattern: /[A-Za-z0-9]/,
placeholder: '_',
selectDirection: 'left',
}
Qualquer placeholder
que você definir não deve corresponder ao padrão Regex pattern
fornecido na definição do token.
Para passar um novo token para a entrada de máscara, você pode usar a propriedade tokens
que
espera um objeto com chaves que correspondem à propriedade token
. Por exemplo, nosso novo token no exemplo acima pode ser aplicado diretamente:
Para registrar seus tokens de máscara globalmente, estenda a propriedade config
da sua configuração global do FormKit:
Além de criar novos tokens, a propriedade tokens
também pode modificar tokens existentes. Qualquer valor fornecido para a propriedade tokens
será mesclado aos tokens existentes para aquela entrada. Por exemplo, o token de dígito (#
) não possui selectFill
por padrão. Para adicionar um, basta estendê-lo:
Tokens char
aceitam um único caractere. Para que um caractere seja aceito, ele deve corresponder à expressão regular token.pattern
. Os quatro tokens integrados (h
, #
, a
e *
) são todos tokens do tipo char
.
No modo select
, os tokens char
são agrupados em um intervalo de seleção.
Um token char
deve representar apenas 1 caractere, e seu placeholder também deve ter apenas um único caractere de comprimento.
Tokens Enum permitem máscaras de comprimento variável dentro de um conjunto predefinido de opções. À medida que um usuário começa a digitar, o valor do token Enum mudará para o primeiro valor correspondente, e o intervalo de seleção refletirá os caracteres ainda não correspondidos. Na prática, isso funciona muito como um autocompletar para aquele token específico. Além disso, os usuários podem percorrer as opções disponíveis para um determinado token pressionando as teclas de seta para cima/baixo.
Uma data com nomes de meses que se completam automaticamente poderia ser bem representada com enums:
Enums são suportados apenas no modo select
. Quando qualquer token enum
é encontrado em uma string de máscara, o mode
da entrada é forçosamente definido para select
.
Grupos são uma maneira de tratar vários caracteres de máscara como uma única unidade. Você cria um grupo cercando os caracteres de máscara desejados com {}
:
<FormKit mask="id{-a#a}" type="mask" />
<!-- "-a#a" é o grupo -->
Por si só, grupos não fazem nada a menos que você defina opções de grupo.
Opções de grupo permitem aplicar funcionalidades a um grupo inteiro usando um pipe |
seguido pelo nome da opção e quaisquer argumentos. As opções disponíveis são:
Um placeholder definido dentro de um grupo tem uma especificidade maior do que um placeholder definido na definição do token e irá sobrepô-lo.
Argumentos podem ser passados para uma opção de grupo usando dois pontos, como em placeholder:
, onde o símbolo de mais
é passado para a opção placeholder
.
Você pode encadear opções de grupo:
Grupos não podem ser usados no modo select. Uma exceção será lançada.
Você pode garantir que certos caracteres sempre apareçam no início ou no final de uma entrada usando as props prefix
e suffix
, respectivamente:
Seu conteúdo de prefixo e sufixo não pode corresponder à máscara. Por exemplo, se sua máscara tem um token de dígito #
, seu prefixo/sufixo não pode conter números.
Em circunstâncias específicas, você pode querer executar sua máscara ao contrário. A máscara testará se a entrada do usuário preenche a máscara da direita para a esquerda. Isso é comum em entradas do tipo moeda e pode ser aplicado adicionando a prop reverse
:
Executar uma máscara ao contrário só funciona no modo shift.
O valor de uma máscara não é considerado "completo" até que o usuário tenha preenchido todo o padrão. Até esse ponto, o FormKit considerará o valor da entrada "vazio". Isso torna conveniente usar com regras de validação como required
. No entanto, se você gostaria de aceitar valores incompletos, você pode fazer isso através da prop allow-incomplete
:
Por padrão, o valor de uma entrada de máscara inclui a formatação fornecida através da prop mask
. No entanto, se você deseja o valor bruto sem máscara com os literais de string removidos, você pode usar a prop unmask-value
:
Por padrão, a entrada mask
exibe o caractere de espaço reservado de cada token. Você pode desativar esse comportamento (exceto no modo select) enquanto ainda aplica a formatação automaticamente através da prop show-mask
:
Por padrão, o valor de uma máscara é exibido através do valor do seu elemento de entrada. Embora isso funcione "pronto para uso", não permite que o texto seja diferenciado estilisticamente. Por exemplo, seria bom se as partes "literais" da máscara parecessem diferentes das partes "placeholder".
Para alcançar esse efeito, você pode habilitar uma sobreposição
que renderiza elementos DOM posicionados diretamente sobre a própria entrada. O texto dentro da entrada ainda está lá, mas será transparente. Em geral, os estilos de posicionamento necessários para a sobreposição são aplicados automaticamente para você.
A sobreposição contém 4 seções possíveis nas quais você pode direcionar seus estilos:
.formkit-overlay-literal
ou overlay-literal-class
).formkit-overlay-placeholder
ou overlay-placeholder-class
).formkit-overlay-enum
ou overlay-enum-class
).formkit-overlay-char
ou overlay-char-class
)O tema padrão genesis suporta automaticamente a sobreposição e aplica cores cinza claro ao placeholder. Se você não estiver usando o Genesis, certifique-se de que a seção inner
esteja posicionada (como position: relative
).
Prop | Type | Padrão | Descrição |
---|---|---|---|
allow-incomplete | boolean | false | Por padrão, o valor de uma entrada de máscara está vazio até que o padrão esteja completo. Esta prop permite que a entrada use valores incompletos. |
mask | string | none | A máscara a ser aplicada. Esta é uma string composta de tokens (como “#”) e valores de string literais. |
mode | string | shift | Determina como a entrada de máscara opera. As opções são shift , replace e select . |
overlay | boolean | false | Renderiza elementos DOM que imitam a entrada de texto para permitir a diferenciação na estilização da máscara. |
prefix | string | none | Caracteres que sempre aparecerão no início da entrada. |
reverse | boolean | false | Executa a máscara de trás para frente — da direita para a esquerda. |
show-mask | boolean | true | Exibe uma representação ao vivo do placeholder do padrão como o valor interno da entrada. |
suffix | string | none | Caracteres que sempre aparecerão no final da entrada. |
tokens | Object | {} | Adiciona novos tokens ou modifica os existentes. |
unmask-value | boolean | false | Por padrão, o valor da entrada é o mesmo que é exibido (com formatação). Os literais de string serão removidos do valor se esta prop for definida como verdadeira. |
Mostrar Universal props | |||
config | Object | {} | Opções de configuração a serem fornecidas para o nó do input e qualquer nó descendente deste input. |
delay | Number | 20 | Número de milissegundos para debounce do valor do input antes de despachar o commit hook. |
dirtyBehavior | string | touched | Determina como o indicador "dirty" deste input é definido. Pode ser configurado como touched ou compare - touched (o padrão) é mais performático, mas não detectará quando o formulário corresponder novamente ao seu estado inicial. |
errors | Array | [] | Array de strings para exibir como mensagens de erro neste campo. |
help | String | '' | Texto para o texto de ajuda associado ao input. |
id | String | input_{n} | O ID único do input. Fornecer um ID também permite acesso global ao nó do input. |
ignore | Boolean | false | Impede que um input seja incluído em qualquer pai (grupo, lista, formulário etc). Útil ao usar inputs para a interface do usuário em vez de valores reais. |
index | Number | undefined | Permite que um input seja inserido no índice fornecido, se o pai for uma lista. Se o valor do input for indefinido, ele herda o valor dessa posição de índice. Se ele tiver um valor, ele o insere nos valores da lista no índice fornecido. |
label | String | '' | Texto para o elemento label associado ao input. |
name | String | input_{n} | O nome do input como identificado no objeto de dados. Isso deve ser único dentro de um grupo de campos. |
parent | FormKitNode | contextual | Por padrão, o pai é um grupo, lista ou formulário de envolvimento, mas essa prop permite a atribuição explícita do nó pai. |
prefix-icon | String | '' | Especifica um ícone para colocar na seção prefixIcon . |
preserve | boolean | false | Preserva o valor do input em um grupo pai, lista ou formulário quando o input é desmontado. |
preserve-errors | boolean | false | Por padrão, os erros definidos em inputs usando setErrors são automaticamente limpos no input. Definir essa prop como true mantém o erro até que ele seja explicitamente limpo. |
sections-schema | Object | {} | Um objeto de chaves de seção e valores parciais de esquema, em que cada esquema parcial é aplicado à seção respectiva. |
suffix-icon | String | '' | Especifica um ícone para colocar na seção suffixIcon . |
type | String | text | O tipo de input a ser renderizado pela biblioteca. |
validation | String, Array | [] | As regras de validação a serem aplicadas ao input. |
validation-visibility | String | blur | Determina quando mostrar as regras de validação com falha de um input. Os valores válidos são blur , dirty e live . |
validation-label | String | {label prop} | Determina qual rótulo usar nas mensagens de erro de validação, por padrão, usa a propriedade label , se disponível, caso contrário, usa a propriedade name . |
validation-rules | Object | {} | Regras de validação personalizadas adicionais para disponibilizar na propriedade de validação. |
value | Any | undefined | Inicializa o valor do input e/ou de seus filhos. Não é reativo. Pode inicializar grupos inteiros (formulários) e listas.. |
Você pode direcionar uma seção específica de uma entrada usando a "key" dessa seção, permitindo que você modifique as classes, HTML (por meio de :sections-schema
ou o conteúdo (por meio de slots) dessa seção). Saiba mais sobre as seções aqui.
Section-key | Descrição |
---|---|
outer | O elemento de envolvimento mais externo. |
wrapper | Um invólucro ao redor do rótulo e do input. |
label | O rótulo do input. |
prefix | Por padrão, não gera saída, mas permite conteúdo diretamente antes de um elemento input. |
prefixIcon | Um elemento para gerar um ícone antes da seção de prefixo. |
inner | Um invólucro ao redor do próprio elemento input. |
suffix | Por padrão, não gera saída, mas permite conteúdo diretamente após um elemento input. |
suffixIcon | Um elemento para gerar um ícone após a seção de sufixo. |
input | O próprio elemento input. |
help | O elemento que contém o texto de ajuda. |
messages | Um invólucro ao redor de todas as mensagens. |
message | O elemento (ou muitos elementos) que contém uma mensagem - na maioria das vezes mensagens de validação e erros. |
Todos os campos de entrada do FormKit são projetados levando em consideração as seguintes considerações de acessibilidade. Ajude-nos a melhorar continuamente a acessibilidade para todos, relatando problemas de acessibilidade aqui:
Chave de Seção | Atributo | Padrão | Descrição |
---|---|---|---|
label | label | for | Associa isso a um elemento de entrada, aprimorando acessibilidade e experiência do usuário |
input | input | disabled | Desabilita um elemento HTML, impedindo a interação do usuário e sinalizando um estado não interativo |
aria-describedby | Aprimora a acessibilidade associando um elemento a uma descrição, auxiliando leitores de tela | ||
aria-required | Adiciona o estado necessário quando a validação é exigida. | ||
icon | icon | for | Sempre que um ícone é definido como rótulo, ele o vincula a um elemento de entrada, aprimorando acessibilidade e experiência do usuário |
Evento de Teclado | Descrição |
---|---|
Tab | Move o foco para a próxima entrada focalizável na página. |
Shift Tab | Move o foco para a entrada focalizável anterior na página. |