lucide-react

· Padrão Frontend
Juan Kalleo
Juan Kalleo
Senior Fullstack
This page hasn't been translated to English yet — showing the original Portuguese content.

O que é

Biblioteca de ícones SVG como componente React (<Search />, <Menu />...).

Por que essa

Escolhida na fase de "Sistema" (design tokens) em vez de @hugeicons/react — recomendação padrão, licença permissiva, tree-shakeable (só entra no bundle o ícone realmente importado) e é a mesma lib usada nos projetos de referência. Leitura de apoio: documentação oficial do lucide-react — por que ícones como componente tree-shakeable e com licença permissiva.

Versão

^1.34.0 (package.json).

Como importar

Nunca direto de lucide-react no componente — sempre pelo barrel curado em theme/icons.tsx:

// theme/icons.tsx — reexporta só o que já é usado em algum componente,
// nada especulativo; cresce conforme a necessidade real aparece.
export { Search, Menu, LogOut, /* ... */ } from "lucide-react";
export type { LucideIcon } from "lucide-react";
import { Search } from "@/theme/icons";

Por que o barrel

Sem ele, cada arquivo escolhe o ícone que "parece certo" na hora, e o mesmo conceito (ex.: "editar") acaba com 3 ícones diferentes espalhados pelo projeto. Com o barrel, dá pra ver de relance todo ícone em uso e reaproveitar o mesmo em vez de importar um novo parecido.

Exemplo real

Item de navegação tipado (shared/layout/navigation.ts):

import { LayoutDashboard, type LucideIcon } from "@/theme/icons";

export type NavItem = { href: string; label: string; icon: LucideIcon };

export const SIDEBAR_SECTIONS: NavSection[] = [
  { title: "Principal", items: [{ href: "/dashboard", label: "Início", icon: LayoutDashboard }] },
];