Shadwire
Componentes

Icon

Wrapper para lucide-rails com tamanhos shadcn e semântica acessível.

Instalação

O Shadwire segue o modelo open-code do shadcn/ui: o código-fonte do componente é copiado para a sua aplicação e passa a ser seu. Instale com a CLI:

shadwire add icon --yes

O item icon do registry instala estes arquivos:

  • app/components/ui_component.rb
  • app/components/ui/icon_component.rb
  • app/helpers/ui/icon_helper.rb
  • vendor/shadwire/shadwire.css

Ainda não instalou a CLI? gem install shadwire e depois shadwire init.

Uso

Nomes usam kebab-case do Lucide, como "chevron-down".

<%= ui_icon("download") %>
<%= ui_icon("bell", label: "Notificações") %>

Ou renderize Ui::IconComponent diretamente:

<%= render Ui::IconComponent.new("download", size: :lg) %>

Exemplos

Decorativo e rotulado

Ícones são decorativos por padrão; passe label: quando o ícone carregar significado.

<div class="flex items-center gap-4">
  <%= ui_icon("download") %>
  <%= ui_icon("bell", label: "Notificações") %>
  <%= ui_button(variant: :outline, size: :sm) do %>
    <%= ui_icon("mail") %>
    Mensagem
  <% end %>
  <%= ui_button(size: :icon, variant: :secondary) do %>

Referência da API

ui_icon(name, **options) encapsula Ui::IconComponent.new(name, **options).

ArgumentoTipoPadrãoDescrição
nameStringObrigatórioNome do ícone Lucide em kebab-case.
sizeSymbol/String:default:sm, :default, :lg ou :xl.
labelStringnilQuando presente, expõe o SVG com role="img" e aria-label.
**attrsHash{}Atributos HTML livres para o SVG.