FormKit vem com mais de 130 ícones prontos para uso! Com exceção dos ícones de marcas (como YouTube, TikTok ou Visa), todos os ícones são originais e licenciados pelo MIT para uso gratuito em seu projeto. Você pode usar nossos ícones, adicionar os seus, ou facilmente conectar a um conjunto de ícones de terceiros.
Usar ícones em seu projeto é tão fácil quanto fornecer o nome do ícone desejado para uma das propriedades de ícone de um input.
<FormKit prefix-icon="email" />
<FormKit suffix-icon="settings" />
<FormKit type="select" select-icon="caretDown" />
É tão fácil! 🎉
O pacote @formkit/icons
vem com mais de 130 ícones comuns para facilitar o início! Use a pesquisa abaixo para filtrar os ícones disponíveis:
Para a maioria dos usuários não é necessária instalação para usar ícones (embora recomendamos adicionar seus ícones ao iconRegistry
para melhor desempenho). O suporte a ícones é fornecido por meio de um plugin FormKit de primeira parte chamado createThemePlugin()
. Este plugin
é habilitado por padrão se você estiver usando o defaultConfig()
do FormKit.
O createThemePlugin()
do FormKit é habilitado por padrão no defaultConfig()
do FormKit. Se o seu
projeto está usando defaultConfig()
(isso é geralmente o caso), então começar é tão simples quanto usar as
propriedades ${section}-icon
disponíveis nos componentes FormKit
— nenhuma configuração adicional necessária.
Ao usar o defaultConfig
que vem com o FormKit, você pode usar várias opções de configuração de nível superior para
personalizar sua experiência. Veja os documentos createThemePlugin
na próxima seção para explicações expandidas de cada uma.
import { createApp } from 'vue'
import App from 'App.vue'
import { plugin, defaultConfig } from '@formkit/vue'
createApp(App).use(plugin, defaultConfig({
...
icons: { heart: '<svg...' }, // permite definir ícones para uso sem busca remota
iconLoaderUrl: (iconName) => `https://...`, // onde carregar ícones remotos
iconLoader: (iconName) => {}, // função para controle mais direto do que a substituição de iconLoaderUrl
...
}).mount('#app')
Se o seu projeto não está usando o defaultConfig
fornecido pelo FormKit, então você precisará instalar
o createThemePlugin()
na configuração do seu projeto FormKit:
createThemePlugin()
do pacote @formkit/themes
.createThemePlugin()
ao array de plugins do seu projeto dentro da sua configuração FormKit.import { createApp } from 'vue'
import App from 'App.vue'
import { createThemePlugin } from '@formkit/themes'
import { plugin } from '@formkit/vue'
// IMPORTANTE: Isso é apenas necessário para aplicativos que NÃO usam defaultConfig()
createApp(App).use(plugin, {
...
plugins: [
createThemePlugin()
]
...
}.mount('#app')
O createThemePlugin
aceita 4 argumentos opcionais:
theme
: Uma representação em string de um nome de tema FormKit, por exemplo, 'genesis'
. Quando fornecido, se um tema FormKit correspondente for encontrado, ele será carregado automaticamente via CDN.icons
: Um objeto de ícones SVG para ser adicionado ao iconRegistry
interno. As chaves são nomes de ícones e os valores são SVGs, por exemplo { heart: '<svg ...' }
iconLoaderUrl
: Uma função que recebe iconName
e retorna uma URL onde os ícones podem ser carregados se não forem encontrados no iconRegistry
. Veja o exemploiconLoader
: Uma função que recebe iconName
e retorna uma Promise que resolve para um SVG (como uma string) ou undefined
. Use isso quando você precisar de mais controle do que apenas substituir o iconLoaderUrl
. Veja o exemploUma vez que o plugin de tema está instalado em seu projeto, seus inputs FormKit terão props de ícones disponíveis para uso.
FormKit passa por 4 etapas ao tentar carregar um ícone. Eles são, em ordem:
prefix-icon="<svg ..."
), então o SVG fornecido será usado.iconRegistry
interno para uma chave correspondente.--fk-icon-${yourIconName}
definida em seu CSS, ela será carregada no iconRegistry
. O valor da variável CSS deve ser um SVG codificado em base64 - não deve ser envolvido em aspas. É assim que FormKit envia ícones padrão para inputs em seus temas de primeira parte.@formkit/icons
via CDN. Se um nome de ícone correspondente for encontrado, ele será usado. Você pode substituir onde os ícones remotos são carregados se quiser usar uma biblioteca de ícones de terceiros como fallback.Como FormKit recorre a solicitações de CDN para ícones, você pode começar facilmente em um novo projeto fornecendo nomes de ícones suportados para as props de ícones de seu input e eles serão carregados para você automaticamente - nenhuma configuração adicional necessária! 🪄
SVGs carregados remotamente são adicionados ao iconRegistry
interno na primeira vez que um ícone é buscado. Solicitações adicionais para o mesmo ícone serão armazenadas em cache até que um usuário recarregue seu aplicativo.
CDNs mágicos são ótimos — mas para obter o melhor desempenho possível, você deve registrar localmente em seu projeto os ícones que sabe que usará.
Você pode fazer isso adicionando ícones à sua configuração FormKit raiz. Os ícones de primeira parte do FormKit podem ser importados do pacote @formkit/icons
.
yarn add @formkit/icons
import { createApp } from 'vue'
import App from 'App.vue'
import { applicationIcons, ethereum } from '@formkit/icons'
import { thirdPartyIcon } from '@some-other-icon-package'
import { plugin, defaultConfig } from '@formkit/vue'
createApp(App).use(plugin, defaultConfig({
...
icons: {
...applicationIcons, // espalhe um grupo inteiro de ícones
ethereum, // ou adicione ícones individuais
thirdPartyIcon, // você pode importar qualquer ícone SVG
formkit: `<svg ...` // ou defina o seu próprio
}
...
}).mount('#app')
O FormKit carrega automaticamente ícones ausentes de seu pacote de ícones via CDN. Isso é ótimo para começar rapidamente,
mas recomendamos registrar os ícones que você sabe que acabará usando no iconRegistry
para obter o melhor desempenho.
Muitas entradas do FormKit suportam ícones suffix
e prefix
. Você pode usar as props prefix-icon
e suffix-icon
em qualquer
entrada do tipo text
como text
, email
, search
, date
, etc. Essas props estão disponíveis nas entradas select
, color
,
e range
também.
A entrada select
tem uma prop select-icon
que permite alterar o ícone usado para o controle de entrada do select.
A entrada file
tem props file-remove-icon
e file-item-icon
:
Às vezes, você precisa renderizar um ícone único em seu projeto. Você pode fornecer diretamente uma definição SVG para uma prop de ícone e o SVG será renderizado para você:
<FormKitIcon />
O FormKit vem com um componente chamado <FormKitIcon />
que permite exibir qualquer ícone do iconRegistry
em qualquer lugar
dentro do seu projeto. Precisa de um ícone que você está usando no FormKit em alguma outra parte da sua UI? Sem problemas:
Cada prop de ícone registra uma prop de manipulador de clique. Por exemplo, a prop prefix-icon
terá
uma prop correspondente @prefix-icon-click
.
Cada prop de manipulador de clique recebe o núcleo node
da entrada e o event
de clique como argumentos.
Se você deseja usar um conjunto de ícones de terceiros em seu projeto FormKit, você pode fornecer um iconLoaderUrl
personalizado ou um iconLoader
completo
(globalmente, no nível de configuração do nó, ou como uma propriedade de componente) que é responsável por recuperar ícones que ainda não
existem no iconRegistry
.
As funções iconLoaderUrl
e iconLoader
são apenas para lidar com ícones ausentes! Para o melhor desempenho possível
você pode (e deve) carregar quaisquer ícones SVG que você sabe que usará no iconRegistry
usando a propriedade de configuração icons
em sua configuração FormKit.
Às vezes — em casos como um construtor de formulários ou CMS — você não sabe antecipadamente quais ícones precisará. É aí que o carregamento remoto de ícones brilha.
iconLoaderUrl
e iconLoader
recebem o atual iconName
como argumentoiconLoaderUrl
deve ser uma URL para um CDN remoto onde o ícone SVG pode ser encontrado. Esta é a maneira mais fácil de alterar o comportamento de carregamento de fallback.iconLoader
que permite a substituição de toda a lógica para busca remota de ícones. Esta função deve retornar uma Promise
que resolve para string
(o SVG) ou undefined
.iconLoaderUrl
ou iconLoader
— se você fornecer ambos, então iconLoader
tem precedência.iconLoaderUrl
personalizadoAbaixo está uma implementação do FormKit carregando ícones do FontAwesome substituindo o iconLoaderUrl
por um caminho CDN diferente.
iconLoader
HeroiconsAbaixo está uma implementação do FormKit com um iconLoader
totalmente personalizado que busca ícones ausentes do Heroicons em vez do conjunto de ícones FormKit.