Quer uma plataforma integrada, Tudo-em-Um, para sua Equipe de Desenvolvimento trabalhar junta com máxima produtividade?
Apidog entrega todas as suas demandas e substitui o Postman por um preço muito mais acessível!
Para desenvolvedores frontend, a demanda por interfaces de usuário esteticamente agradáveis, de alto desempenho e altamente personalizáveis nunca foi tão grande. Desenvolvedores estão constantemente procurando ferramentas que possam acelerar seu fluxo de trabalho sem sacrificar qualidade ou controle criativo. Embora bibliotecas de componentes de UI monolíticas tenham servido bem à comunidade por anos, um novo paradigma está emergindo — um que prioriza a posse do código pelo desenvolvedor, modularidade e integração perfeita com frameworks modernos. É dentro deste novo paradigma que o HeroUI encontra seu nicho.
HeroUI não é apenas mais uma biblioteca de componentes; é uma coleção meticulosamente elaborada de componentes de UI reutilizáveis projetados para serem integrados diretamente em seus projetos. Ele defende uma filosofia que dá aos desenvolvedores o controle final sobre sua base de código. Em vez de importar componentes opacos de um módulo node, você usa a Interface de Linha de Comando (CLI) do HeroUI para adicionar o código-fonte real dos componentes que você precisa em seu projeto. Esta evolução de "copiar e colar" significa que cada botão, card e caixa de diálogo se torna parte de sua própria aplicação, pronto para ser ajustado, reestilizado e adaptado às suas necessidades específicas.
Construído sobre os ombros de gigantes como React, Tailwind CSS e Next.js, o HeroUI fornece os blocos de construção para criar interfaces de usuário bonitas, acessíveis e responsivas. Ele é projetado para o desenvolvedor moderno que valoriza tanto a velocidade quanto a especificidade, oferecendo um ponto de partida robusto que não o prende a um sistema de design rígido. Este artigo servirá como um guia abrangente para entender os princípios centrais do HeroUI, instalá-lo em seu projeto, personalizar sua aparência e aproveitar sua poderosa CLI para construir a próxima geração de aplicações web.
Parte 1: Desconstruindo o HeroUI - Filosofia e Recursos Centrais
Antes de mergulhar nos detalhes técnicos de instalação e uso, é crucial entender o "porquê" por trás do HeroUI. Quais problemas ele resolve e o que o torna uma escolha atraente em um campo lotado de ferramentas de UI?
A Filosofia: Propriedade e Personalização Sem Compromisso
A diferença fundamental entre o HeroUI e as bibliotecas de UI tradicionais como Material-UI ou Ant Design reside no conceito de propriedade. Ao instalar uma biblioteca tradicional, você está adicionando uma dependência ao seu package.json
. Sua aplicação então importa componentes pré-compilados deste pacote. Embora isso seja conveniente, vem com várias desvantagens:
- Personalização Limitada: Substituir estilos pode ser complexo, muitas vezes exigindo que você lute contra os estilos padrão da biblioteca com tags
!important
ou configurações complicadas de provedores de tema. - Componentes Caixa Preta: A lógica interna dos componentes está oculta na pasta
node_modules
. Depurar comportamento inesperado ou entender o funcionamento interno se torna significativamente mais difícil. - Inchaço no Tamanho do Bundle: Você frequentemente importa a biblioteca inteira, ou pelo menos uma parte significativa dela, mesmo que use apenas um punhado de componentes, potencialmente aumentando o tamanho final do bundle da sua aplicação.
- Inferno de Dependências: Você está sujeito ao ciclo de atualização da biblioteca e suas dependências. Uma mudança disruptiva na biblioteca pode forçar uma grande refatoração em sua aplicação.
O HeroUI contorna esses problemas completamente. Ao fazer com que a CLI coloque o código-fonte do componente diretamente no diretório do seu projeto (por exemplo, /components/ui
), ele o capacita de várias maneiras:
- Você Possui o Código: O componente agora é seu. Você pode mudar sua estrutura, seus estilos, sua lógica — qualquer coisa. Não há limitações artificiais. Se você precisar de um botão com uma animação única ou uma estrutura interna ligeiramente diferente, basta editar o arquivo.
- Transparência Total: Você pode ler o código de cada componente que usa. Isso é inestimável para aprender, depurar e obter uma compreensão mais profunda de como construir elementos de UI acessíveis e robustos.
- Zero Código Não Utilizado: O bundle da sua aplicação incluirá apenas o código dos componentes que você adicionou explicitamente. Nada mais.
- Desacoplado e Preparado para o Futuro: Como os componentes fazem parte da sua base de código, você não está vinculado ao versionamento do HeroUI da mesma forma. Você pode atualizar componentes no seu próprio cronograma ou optar por não atualizá-los.
Essa filosofia é direcionada a desenvolvedores e equipes que desejam construir um sistema de design único para seu produto sem começar do zero. Ele fornece os primitivos fundamentais, sem estilo (ou levemente estilizados), e você fornece a identidade da marca.
Recursos Chave em Destaque
HeroUI é mais do que apenas seu método de instalação. Ele vem repleto de recursos projetados para um fluxo de trabalho de desenvolvimento moderno.
- Coleção Rica de Componentes: HeroUI oferece um conjunto abrangente dos componentes de UI mais comumente necessários, incluindo botões, formulários, diálogos, dropdowns, tabelas de dados e muito mais. Cada componente é cuidadosamente projetado com acessibilidade (atributos ARIA) e experiência do usuário em mente.
- Alimentado por Tailwind CSS: No coração das capacidades de estilização do HeroUI está o Tailwind CSS, o framework CSS utility-first. Isso significa que a personalização não é feita substituindo classes CSS, mas compondo classes utilitárias. Essa abordagem é incrivelmente rápida, intuitiva e ajuda a manter uma linguagem de design consistente. HeroUI usa as capacidades de tema do Tailwind em todo o seu potencial, permitindo mudanças em todo o projeto com apenas algumas linhas de configuração.
- Tematização Profunda e Personalização: Toda a aparência dos componentes pode ser controlada através de uma configuração de tema central. Isso inclui cores, fontes, raios de borda, espaçamento e muito mais. Tudo isso é alimentado por variáveis CSS, o que torna a tematização dinâmica, como implementar um modo escuro, incrivelmente direta.
- Poderosa Interface de Linha de Comando (CLI): O
heroui-cli
é sua ferramenta principal para interagir com o ecossistema HeroUI. Ele lida com a inicialização do projeto, adiciona novos componentes e garante que seu projeto esteja configurado corretamente, economizando horas de configuração manual. - Integração Framework-First: HeroUI é projetado para integrar-se perfeitamente com frameworks modernos. A documentação fornece suporte e guias de primeira classe para Next.js, demonstrando um compromisso em trabalhar bem dentro das ferramentas mais populares do ecossistema React. Ele é construído com React e pode ser adaptado para outros frameworks baseados em React como Vite ou Create React App.
- Modo Escuro por Padrão: O modo escuro não é um recurso secundário. Todo o sistema é construído com o modo escuro em mente, aproveitando variáveis CSS e a variante
dark:
do Tailwind para tornar a implementação trivial. - Suporte a TypeScript e RSC: HeroUI é escrito em TypeScript, fornecendo excelente segurança de tipo pronta para uso. Ele também é compatível com React Server Components (RSC), alinhando-o com os avanços mais recentes nos ecossistemas Next.js e React.
Para Quem é o HeroUI?
HeroUI é uma escolha ideal para um tipo específico de desenvolvedor e projeto:
- Desenvolvedores que anseiam por controle: Se você já se sentiu frustrado pela rigidez de uma biblioteca de componentes, HeroUI parecerá um sopro de ar fresco.
- Projetos com uma identidade de marca forte e única: Ele fornece a base perfeita para construir um sistema de design personalizado que não se parece com todos os outros sites.
- Startups e equipes de produto: Equipes que precisam se mover rápido, mas também querem construir uma arquitetura frontend escalável e mantenível, encontrarão no HeroUI um poderoso acelerador.
- Aprendizagem e desenvolvimento: Como você obtém o código-fonte, é uma excelente ferramenta para aprender como construir componentes React de alta qualidade e acessíveis.
Pode ser menos adequado para iniciantes absolutos que preferem uma solução mais "pronta para uso", com tudo incluído, onde a configuração mínima é necessária. O poder do HeroUI reside em sua configurabilidade, que exige uma compreensão fundamental do Tailwind CSS e do ambiente de desenvolvimento frontend moderno.
Parte 2: Começando - Um Guia Detalhado de Instalação e Configuração
Agora que entendemos a filosofia, vamos colocar a mão na massa. Esta seção fornece um guia meticuloso, passo a passo, para integrar o HeroUI em um projeto novo ou existente. O método recomendado e mais eficiente é usar a CLI oficial do HeroUI.
Pré-requisitos
Antes de começar, certifique-se de que seu ambiente de desenvolvimento atende aos seguintes requisitos:
- Node.js: Você deve ter uma versão recente do Node.js instalada (geralmente versão 18 ou mais recente). Você pode verificar sua versão executando
node -v
em seu terminal. - Gerenciador de Pacotes: Você precisará de um gerenciador de pacotes como
npm
,yarn
oupnpm
. Este guia usaránpx
, que está incluído nonpm
. - Um Projeto de Framework React: HeroUI é projetado para ser adicionado a um projeto construído com um framework React. O guia principal foca em Next.js, mas pode ser adaptado para outros como Vite ou Create React App. Para a melhor experiência, assumiremos que você está começando com um projeto Next.js fresco. Você pode criar um com o comando: Bash
npx create-next-app@latest my-heroui-app
Durante a configuração do Next.js, é recomendado escolher TypeScript e Tailwind CSS, pois estes são fundamentais para o ecossistema HeroUI.
O Comando init
da CLI do HeroUI: Seu Ponto de Partida
O comando init
é o ponto de entrada mágico no mundo do HeroUI. Ele inspeciona inteligentemente seu projeto, faz uma série de perguntas e então configura automaticamente tudo o que você precisa.
Navegue até o diretório do seu projeto:Bash
cd my-heroui-app
Agora, execute o comando de inicialização:Bash
npx heroui-cli@latest init
A CLI agora o guiará pelo processo de configuração. Vamos detalhar cada pergunta que ela faz e o que suas escolhas significam.
1. "Qual estilo você gostaria de usar?"
- Opções:
Default
,New York
- Explicação: Esta escolha define a estética base dos componentes.
Default
é um estilo mais moderno e minimalista, enquantoNew York
oferece uma aparência ligeiramente mais tradicional e corporativa. Esta escolha afeta principalmente a estilização padrão, como raios de borda e espaçamento, que a CLI configurará. Você não está preso a essa escolha; é meramente um ponto de partida que pode ser totalmente personalizado mais tarde. Para um começo limpo,Default
é frequentemente uma ótima escolha.
2. "Qual cor você gostaria de usar como cor base?"
- Opções:
Slate
,Gray
,Zinc
,Neutral
,Stone
- Explicação: Todo o sistema de cores do HeroUI é baseado em tons de uma cor base neutra. Esta escolha determina a paleta primária para fundos, texto, bordas e estados de componentes. Por exemplo, escolher
Slate
dará à sua UI um tom cinza frio e azulado, enquantoStone
proporcionará uma sensação mais quente e terrosa. A CLI gerará automaticamente um espectro completo de variáveis CSS com base na sua seleção.
3. "Onde está seu arquivo CSS global?"
- Padrão:
app/globals.css
(para Next.js App Router) oustyles/globals.css
(para Pages Router). - Explicação: A CLI precisa saber onde injetar as variáveis CSS centrais e as diretivas do Tailwind. Geralmente é inteligente o suficiente para detectar o caminho correto em um projeto Next.js padrão. Você só deve mudar isso se tiver uma estrutura de projeto não padrão.
4. "Você quer usar variáveis CSS para cores?"
- Padrão:
Sim
- Explicação: Você quase sempre deve dizer sim. Usar variáveis CSS é a pedra angular do sistema de tematização do HeroUI. Ele permite que você defina sua paleta de cores em um só lugar (
globals.css
) e a aplique automaticamente em todos os lugares. Mais importante, é o que torna recursos dinâmicos como o modo escuro possíveis.
5. "Onde está seu arquivo tailwind.config.js
?"
- Padrão:
tailwind.config.js
- Explicação: A CLI precisa modificar sua configuração do Tailwind para integrar os presets e plugins de tema do HeroUI. Novamente, ela deve detectar isso automaticamente.
6. "Configurar alias de importação para componentes:"
- Padrão:
@/components
- Explicação: Aliases de caminho são uma prática recomendada para declarações de importação limpas. Em vez de escrever
import { Button } from '../../../components/ui/button'
, você pode escreverimport { Button } from '@/components/ui/button'
. A CLI precisa saber qual alias você deseja usar para componentes para que possa configurá-lo em seutsconfig.json
(oujsconfig.json
). O padrão@/components
é uma escolha sensata.
7. "Configurar alias de importação para utils:"
- Padrão:
@/lib/utils
- Explicação: HeroUI depende de algumas funções utilitárias, notavelmente uma função para mesclar condicionalmente classes Tailwind (geralmente chamada
cn
). A CLI criará este arquivo utilitário para você e precisa saber onde colocá-lo e qual alias usar. O padrão@/lib/utils
é padrão.
8. "Você está usando React Server Components?"
- Padrão: Ele detectará automaticamente com base na sua versão e configuração do Next.js.
- Explicação: Isso é crucial para aplicações Next.js modernas usando o App Router. Responder
Sim
garante que os componentes adicionados pela CLI incluam a diretiva"use client"
onde necessário. Esta diretiva marca componentes que exigem interatividade do lado do cliente (como lidar com eventosonClick
ou usar hooks comouseState
), tornando-os compatíveis com React Server Components.
Depois de responder a todas as perguntas, a CLI realizará sua mágica. Ela irá:
- Instalar as dependências necessárias (
tailwindcss-animate
,class-variance-authority
,lucide-react
, etc.). - Criar um arquivo
components.json
na raiz do seu projeto. - Modificar seu
tailwind.config.js
com as configurações de tema corretas. - Popular seu
globals.css
com estilos base e todas as variáveis CSS para o tema de cor escolhido. - Atualizar seu
tsconfig.json
oujsconfig.json
com os aliases de caminho que você configurou. - Criar o arquivo
lib/utils.ts
com a função utilitáriacn
.
Seu projeto agora está totalmente configurado e pronto para o HeroUI.
Anatomia das Mudanças
Vamos examinar mais de perto os principais arquivos que a CLI modificou ou criou.
components.json
Este arquivo é o manifesto para o HeroUI dentro do seu projeto. Ele armazena as escolhas que você fez durante o processo init
e informa à CLI como seu projeto está configurado.JSON
{
"style": "default",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "tailwind.config.js",
"css": "app/globals.css",
"baseColor": "slate",
"cssVariables": true
},
"aliases": {
"utils": "@/lib/utils",
"components": "@/components"
}
}
Você raramente precisará editar este arquivo manualmente, mas é útil entender seu propósito. É o cérebro por trás das operações da CLI.
tailwind.config.js
Sua configuração do Tailwind será estendida para se parecer com algo assim. As adições principais são as extensões theme
e o plugin tailwindcss-animate
.JavaScript
/** @type {import('tailwindcss').Config} */
module.exports = {
darkMode: ["class"],
content: [
'./pages/**/*.{ts,tsx}',
'./components/**/*.{ts,tsx}',
'./app/**/*.{ts,tsx}',
'./src/**/*.{ts,tsx}',
],
theme: {
container: {
center: true,
padding: "2rem",
screens: {
"2xl": "1400px",
},
},
extend: {
colors: {
border: "hsl(var(--border))",
input: "hsl(var(--input))",
// ... e muitas outras definições de cor ligadas a variáveis CSS
primary: {
DEFAULT: "hsl(var(--primary))",
foreground: "hsl(var(--primary-foreground))",
},
// ...
},
borderRadius: {
lg: "var(--radius)",
md: "calc(var(--radius) - 2px)",
sm: "calc(var(--radius) - 4px)",
},
keyframes: {
// ... keyframes para animações
},
animation: {
// ... utilitários de animação
},
},
},
plugins: [require("tailwindcss-animate")],
}
Observe como cores como primary
não são definidas com um código hexadecimal, mas com hsl(var(--primary))
. Isso diz ao Tailwind para usar a variável CSS chamada --primary
, que é definida no seu CSS global.
app/globals.css
Este arquivo agora é o coração do tema do seu sistema de design. Ele conterá as diretivas base do Tailwind e um grande bloco de variáveis CSS.CSS
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--card: 0 0% 100%;
/* ... muitas outras variáveis para o tema claro */
--radius: 0.5rem;
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
--card: 222.2 84% 4.9%;
/* ... muitas outras variáveis para o tema escuro */
}
}
Aqui você pode ver o poder dessa configuração. Todas as cores do seu tema claro são definidas no escopo :root
, e todas as cores do seu tema escuro são definidas dentro do escopo da classe .dark
. Quando a classe .dark
é adicionada ao elemento <html>
, o navegador usará automaticamente as variáveis do tema escuro.
Parte 3: Dominando a Personalização - Tematização, Layout e Modo Escuro
Com o HeroUI inicializado, a verdadeira diversão começa: torná-lo seu. A arquitetura é explicitamente projetada para personalização profunda e intuitiva.
A Arte da Tematização com Variáveis CSS
A tematização no HeroUI é uma mudança em relação aos objetos de tema complexos baseados em JavaScript que você pode encontrar em outras bibliotecas. É mais simples, mais poderoso e aproveita recursos CSS modernos. Todo o tema — cores, raios de borda, fontes — é controlado por variáveis CSS definidas no seu arquivo globals.css
.
Alterando Cores
Digamos que você queira mudar a cor primária da sua marca. Você não precisa ir para a configuração do Tailwind. Basta encontrar as variáveis CSS relevantes em globals.css
e mudar seus valores.
As cores são definidas usando valores HSL (Hue, Saturation, Lightness), mas sem o wrapper hsl()
. Por exemplo:CSS
:root {
/* ... */
--primary: 221.2 83.2% 53.3%;
--primary-foreground: 210 40% 98%;
/* ... */
}
.dark {
/* ... */
--primary: 217.2 91.2% 59.8%;
--primary-foreground: 210 40% 98%;
/* ... */
}
Para mudar sua cor primária para um verde vibrante, você pode usar um seletor de cores online para encontrar os valores HSL para o tom escolhido e atualizar as variáveis:CSS
/* Em globals.css */
:root {
/* ... */
--primary: 142.1 76.2% 36.3%; /* Nova Cor Primária Verde */
--primary-foreground: 355.7 100% 97.3%; /* Uma cor clara contrastante para texto na cor primária */
/* ... */
}
.dark {
/* ... */
--primary: 142.1 70.2% 46.3%; /* Um verde ligeiramente diferente para o modo escuro */
--primary-foreground: 355.7 100% 97.3%;
/* ... */
}
Depois de salvar este arquivo, cada componente que usa a cor "primary" (como <Button>
) será instantaneamente atualizado em toda a sua aplicação para refletir esta nova cor verde. Isso é incrivelmente poderoso.
Alterando o Raio da Borda
O arredondamento dos cantos em componentes como cards e inputs é controlado por uma única variável CSS: --radius
.CSS
/* Em globals.css */
:root {
/* ... */
--radius: 0.5rem; /* O valor padrão */
}
Se você preferir uma aparência mais nítida e quadrada, pode reduzir este valor:CSS
:root {
--radius: 0.25rem; /* Menos arredondado */
}
Ou, para uma estética muito suave e arredondada, você pode aumentá-lo:CSS
:root {
--radius: 1.5rem; /* Muito arredondado */
}
Essa única mudança de linha se propagará por todos os seus componentes, garantindo um raio de borda consistente em toda a sua UI.
Adicionando Novas Cores
Você não está limitado às cores fornecidas pelo comando init
. Você pode facilmente adicionar suas próprias cores semânticas. Por exemplo, vamos adicionar uma cor de marca "special".
Defina as variáveis CSS em globals.css
:CSS
/* Em globals.css */
:root {
/* ... */
--special: 320 86% 59%;
--special-foreground: 330 100% 98%;
}
.dark {
/* ... */
--special: 320 80% 69%;
--special-foreground: 330 100% 98%;
}
Exponha-as ao Tailwind em tailwind.config.js
:JavaScript
// Em tailwind.config.js
// ...
extend: {
colors: {
// ...
special: {
DEFAULT: "hsl(var(--special))",
foreground: "hsl(var(--special-foreground))",
},
},
},
// ...
Agora você pode usar essas cores em seus componentes com as classes utilitárias do Tailwind, como bg-special
e text-special-foreground
.
Construindo Layouts Responsivos
Os componentes do HeroUI são construídos com Tailwind CSS, o que significa que são inerentemente responsivos. Você pode usar os prefixos responsivos do Tailwind (sm:
, md:
, lg:
, xl:
) em qualquer classe utilitária para mudar o estilo de um componente em diferentes tamanhos de tela.
Vamos imaginar a construção de um layout de página simples com uma barra lateral visível no desktop, mas que colapsa no mobile. Embora o HeroUI forneça os componentes de baixo nível (Card
, Button
), você é responsável por compô-los em um layout maior.
Aqui está um exemplo de como você pode estruturar isso em um componente de página do Next.js:TypeScript
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
export default function DashboardPage() {
return (
<div className="flex min-h-screen flex-col md:flex-row">
{/* Barra Lateral */}
<aside className="w-full border-b bg-muted p-4 md:w-64 md:border-b-0 md:border-r">
<h2 className="text-lg font-semibold">Navegação</h2>
<nav className="mt-4 flex flex-row space-x-2 md:flex-col md:space-x-0 md:space-y-2">
<Button variant="ghost" className="justify-start">Dashboard</Button>
<Button variant="ghost" className="justify-start">Configurações</Button>
<Button variant="ghost" className="justify-start">Perfil</Button>
</nav>
</aside>
{/* Conteúdo Principal */}
<main className="flex-1 p-8">
<h1 className="text-4xl font-bold tracking-tight">Dashboard</h1>
<p className="mt-2 text-muted-foreground">
Bem-vindo ao seu dashboard.
</p>
<div className="mt-8 grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
<Card>
<CardHeader>
<CardTitle>Receita</CardTitle>
</CardHeader>
<CardContent>
<p className="text-3xl font-bold">$45,231.89</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Assinaturas</CardTitle>
</CardHeader>
<CardContent>
<p className="text-3xl font-bold">+2350</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Usuários Ativos</CardTitle>
</CardHeader>
<CardContent>
<p className="text-3xl font-bold">+573</p>
</CardContent>
</Card>
</div>
</main>
</div>
);
}
Neste exemplo:
- O contêiner principal é um contêiner
flex
. No mobile (flex-col
), a barra lateral fica em cima. Em telas médias e maiores (md:flex-row
), ele muda para um layout lado a lado. - O
aside
tem largura total no mobile (w-full
), mas uma largura fixa no desktop (md:w-64
). - A área de conteúdo principal usa um layout
grid
que ajusta o número de colunas com base no tamanho da tela (sm:grid-cols-2
,lg:grid-cols-3
).
Isso demonstra o princípio central: HeroUI fornece os primitivos estilizados (Card
, Button
), e você usa todo o poder do Tailwind CSS para organizá-los em layouts responsivos e complexos.
Implementando um Modo Escuro Perfeito
Um dos recursos mais elegantes do HeroUI é seu suporte integrado ao modo escuro. Como o comando init
já configurou as variáveis de cor para os temas claro (:root
) e escuro (.dark
), implementá-lo é surpreendentemente simples.
A abordagem mais comum é usar o pacote next-themes
, que lida com a troca de temas e persiste a escolha do usuário no armazenamento local.
Instale next-themes
:Bash
npm install next-themes
Crie um Provedor de Tema:
Crie um novo arquivo, por exemplo, em components/theme-provider.tsx.TypeScript
"use client";
import * as React from "react";
import { ThemeProvider as NextThemesProvider } from "next-themes";
import { type ThemeProviderProps } from "next-themes/dist/types";
export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
return <NextThemesProvider {...props}>{children}</NextThemesProvider>;
}
Embrulhe seu Layout Raiz com o Provedor:
No seu layout raiz do Next.js (app/layout.tsx), importe e use o ThemeProvider.TypeScript
import { ThemeProvider } from "@/components/theme-provider";
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";
const inter = Inter({ subsets: ["latin"] });
export const metadata: Metadata = {
title: "Create Next App",
description: "Generated by create next app",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en" suppressHydrationWarning>
<body className={inter.className}>
<ThemeProvider
attribute="class"
defaultTheme="system"
enableSystem
disableTransitionOnChange
>
{children}
</ThemeProvider>
</body>
</html>
);
}
Os principais props aqui são:
attribute="class"
: Diz aonext-themes
para alternar temas adicionando/removendo uma classe ao elemento<html>
.defaultTheme="system"
: Define automaticamente o tema com base na preferência do sistema operacional do usuário.enableSystem
: Habilita a opção de tema "system".
Crie um Botão de Alternar Tema:
Agora, você só precisa de um elemento de UI para permitir que o usuário troque de tema.TypeScript
"use client";
import * as React from "react";
import { Moon, Sun } from "lucide-react";
import { useTheme } from "next-themes";
import { Button } from "@/components/ui/button";
export function ModeToggle() {
const { setTheme, theme } = useTheme();
const toggleTheme = () => {
setTheme(theme === "light" ? "dark" : "light");
};
return (
<Button variant="outline" size="icon" onClick={toggleTheme}>
<Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
<Moon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
<span className="sr-only">Alternar tema</span>
</Button>
);
}
Este1 componente usa o hook useTheme
do next-themes
para verificar o tema atual e definir um novo. Os ícones de sol e lua rotativos proporcionam uma transição visual agradável. Basta colocar este componente <ModeToggle />
em algum lugar na sua UI (como um cabeçalho), e você terá um alternador de modo escuro totalmente funcional e persistente.
Parte 4: A CLI do HeroUI e Seu Fluxo de Trabalho Centrado em Componentes
O heroui-cli
é mais do que apenas um instalador. É a ferramenta principal que você usará para gerenciar e expandir sua biblioteca de componentes. Seu principal propósito após a inicialização é adicionar novos componentes ao seu projeto.
Adicionando Componentes: O Fluxo de Trabalho Central
Digamos que você precise de um modal de diálogo para sua aplicação. Em vez de escrever um do zero, você pode pedir à CLI para adicionar o componente Dialog
pré-construído e acessível do HeroUI.
O comando é simples:Bash
npx heroui-cli@latest add dialog
A CLI realizará as seguintes ações:
- Ela lê seu arquivo
components.json
para entender a estrutura do seu projeto (aliases de caminho, uso de TypeScript, etc.). - Ela busca o código-fonte mais recente para o componente
Dialog
e quaisquer de suas dependências (por exemplo,Dialog
pode depender deButton
). - Ela coloca os arquivos do componente diretamente no seu diretório de componentes, por exemplo:
components/ui/dialog.tsx
. - Ela o informará sobre quaisquer outras dependências que você possa precisar instalar.
Agora, você tem um arquivo dialog.tsx
em seu projeto. Você pode inspecionar seu código, aprender com ele e até mesmo modificá-lo. Se o Dialog
padrão tiver uma transição que você não gosta, basta abrir o arquivo e mudar as classes do Tailwind que controlam a animação. Este nível de controle é a pedra angular da experiência HeroUI.
Você pode adicionar vários componentes de uma vez:Bash
npx heroui-cli@latest add card button input label
Este comando adicionará todos os quatro componentes e suas dependências ao seu projeto de uma só vez.
Entendendo a API da CLI: components.json
O arquivo components.json
é o contrato entre seu projeto e a CLI do HeroUI. Vamos revisitar suas propriedades para entender como elas influenciam o comportamento da CLI.
style
: Lembra à CLI qual estilo base (default
ounew-york
) usar ao buscar o código do componente, garantindo consistência estilística.rsc
: Determina se a CLI deve adicionar a diretiva"use client"
aos componentes. Isso é crítico para a compatibilidade com o App Router do Next.js.tsx
: Diz à CLI se deve buscar versões TypeScript (.tsx
) ou JavaScript (.jsx
) dos arquivos do componente.tailwind
:config
: O caminho para seutailwind.config.js
. A CLI pode precisar disso para futuras atualizações ou análises.css
: O caminho para seu arquivo CSS global onde as variáveis são armazenadas.baseColor
: A paleta de cores neutras que você escolheu durante oinit
.cssVariables
: Confirma que seu projeto está configurado para usar variáveis CSS para tematização.aliases
:utils
: Define o caminho de importação para utilitários compartilhados como a funçãocn
. Quando a CLI adiciona um componente que precisa desse utilitário, ela usará este alias na declaração de importação.components
: Define o caminho de importação para os próprios componentes de UI. Isso permite que componentes importem outros componentes (por exemplo, umDialog
pode importar umButton
) usando um caminho limpo e consistente.
Ao entender essa configuração, você pode até ajustar manualmente o comportamento da CLI se decidir refatorar a estrutura do seu projeto, por exemplo, movendo seu diretório de componentes de @/components
para @/ui
.
Conclusão: Construa do Seu Jeito com HeroUI
HeroUI representa uma mudança significativa na forma como os desenvolvedores podem pensar e usar bibliotecas de UI. Ele se afasta do modelo de caixa preta e tamanho único e se move em direção a uma experiência de desenvolvedor transparente, empoderadora e profundamente personalizável. Ao fornecer componentes sem estilo, acessíveis, diretamente como código-fonte, ele atinge o equilíbrio perfeito entre desenvolvimento rápido e design sob medida.
Os principais pontos fortes do HeroUI são claros:
- Propriedade Total: Os componentes são seu código. Você pode modificar, estender e adaptá-los sem limitação.
- Personalização Profunda: Um poderoso sistema de tematização baseado em variáveis CSS torna trivial a mudança de cores, espaçamento e raios em toda a sua aplicação.
- Arquitetura Moderna: Construído com TypeScript, Tailwind CSS e suporte de primeira classe para Next.js e React Server Components, é uma ferramenta projetada para o futuro do desenvolvimento web.
- Ferramentas Amigáveis ao Desenvolvedor: A CLI inteligente automatiza o tedioso processo de configuração e torna a adição de novos componentes uma experiência perfeita.
HeroUI é para os construtores, os artesãos e as equipes que acreditam que sua interface de usuário é uma parte central da identidade de seu produto. Ele não lhe dá uma casa pronta; ele lhe dá os materiais da mais alta qualidade e uma oficina perfeitamente organizada para construir a casa dos seus sonhos. Para seu próximo projeto que exige um frontend único, polido e mantenível, não procure mais do que o HeroUI. Pode ser a ferramenta que o capacita a construir sua UI mais heroica até agora.
Quer uma plataforma integrada, Tudo-em-Um, para sua Equipe de Desenvolvimento trabalhar junta com máxima produtividade?
Apidog entrega todas as suas demandas e substitui o Postman por um preço muito mais acessível!