Pular para o conteúdo
// visualizar em
salvo em todas as páginas

Instalação

Dois pacotes, um arquivo CSS por estilo e um StyleProvider. Funciona com o App Router do Next.js, com o Vite e com qualquer app React 19.

// você vai aprender

  • Quais pacotes e arquivos CSS adicionar
  • Como escolher estilo, modo e cor da marca para o app inteiro
  • Como passar para o português os textos que os componentes já trazem

Instale os pacotes

O @camaleo/react traz os componentes; o @camaleo/styles, o CSS e o createBrand.

terminal
pnpm add @camaleo/react @camaleo/styles

Importe o CSS

Importe o base.css uma vez e depois um arquivo para cada estilo que você usar. O minimal é o padrão e não precisa de arquivo próprio.

app/layout.tsx
import "@camaleo/styles/base.css";
import "@camaleo/styles/neumorphism.css";

As fontes não vêm no pacote. As de cada estilo estão em Estilos e troca; sem elas, o estilo cai nas fontes do sistema.

Envolva o app

O StyleProvider aplica o estilo, o modo e a cor da marca a tudo dentro dele, inclusive popups.

app/providers.tsx
import { Button, StyleProvider } from "@camaleo/react";

<StyleProvider styleName="neumorphism" mode="system" brand="#7c3aed">
  <Button>Salvar</Button>
</StyleProvider>
PropValores
styleNameminimal (padrão), swiss, editorial, progressive, material, cupertino, glass, neumorphism, clay, neubrutalism, retro, retro-pixel, y2k
modelight, dark ou system. Sem ele, herda do pai; na raiz, segue o sistema, sem nenhum script
brandQualquer cor CSS. A biblioteca gera a escala e mantém o texto sobre ela em 4,5:1 ou mais

Para aplicar o estilo na página inteira a partir de um Server Component, espalhe styleScopeProps no <html>:

app/layout.tsx
import { styleScopeProps } from "@camaleo/react/style-scope";

<html lang="pt-BR" {...styleScopeProps({ styleName: "editorial" })}>
DICA

O material é inspirado no Material Design e o cupertino nas Human Interface Guidelines. O Camaleo não é afiliado ao Google nem à Apple e não usa fontes, ícones ou marcas deles.

Defina os textos dos componentes

Componentes que mostram ou anunciam texto por conta própria (botões de fechar, "Página 3", estados vazios) falam inglês por padrão. Para português, envolva o app uma vez com o MessagesProvider:

app/layout.tsx
import { MessagesProvider } from "@camaleo/react";

<MessagesProvider locale="pt-BR">{children}</MessagesProvider>
  • locale: "en" ou "pt-BR", os pacotes que vêm com a biblioteca. É a forma de usar num Server Component.
  • messages: só as chaves que você quer mudar, mescladas sobre o locale, por exemplo messages={{ toast: { close: "Dispensar" } }}. Algumas chaves são funções (pagination.page), que só um componente cliente consegue passar.
  • A prop do próprio componente (por exemplo closeLabel) continua vencendo os dois. Mais em Idiomas e RTL.

Personalize

Do menos ao mais invasivo:

  1. Tokens. Defina-os em [data-style], fora de qualquer camada, e eles vencem a biblioteca: [data-style] { --cml-radius-control: 4px; }. Só :root não chega dentro de um provider, porque cada provider declara os tokens de novo. Veja Tokens.
  2. Partes. Mire o data-slot e os atributos de estado do componente: [data-slot="button"][data-variant="outline"] { … }. Para limitar uma regra a uma área ou a um estilo, veja Sobrescritas com escopo.
  3. Marcação. Use className, style ou a prop render para trocar o elemento que o componente renderiza.

Antes de publicar

  • @camaleo/react e @camaleo/styles instalados
  • base.css importado uma vez, depois um arquivo para cada estilo que você usa
  • O app dentro de um StyleProvider (ou o <html> com styleScopeProps)
  • MessagesProvider definido se o seu app não é em inglês
Esta página foi útil? · Editar esta página no GitHub