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

StyleProvider

Provedor que define o estilo, o modo de cor e a cor da marca de tudo o que está dentro dele. Coloque um na raiz do app e aninhe outros para criar ilhas com outra cara, como um card escuro ou a marca de um cliente.

Componente clienteCódigo ↗

Instalação

Configure o Camaleo uma vez (Instalação) e importe a folha de estilo de cada estilo que você renderiza, inclusive nas ilhas. Um estilo sem o CSS dele cai nos valores padrão.

import { StyleProvider, useStyleScope, PortalScope, Portal, STYLE_NAMES } from "@camaleo/react";

Para a página inteira, um Server Component pode espalhar styleScopeProps({ styleName, mode, brand }) no <html>: os mesmos atributos, sem código no cliente. Veja em Instalação o CSS e as fontes.

Anatomia

O StyleProvider renderiza uma <div> com data-style, data-mode e os tokens da marca como variáveis inline. Cada elemento [data-style] redeclara todos os tokens e pinta o próprio fundo, a cor do texto e a fonte, então uma ilha aninhada começa do zero em vez de herdar o estilo do pai. Já o modo e a marca descem pela árvore até uma ilha definir os seus.

Os popups (Menu, Select, Popover, Dialog, Drawer…) são renderizados no <body>, fora de qualquer provider. Eles envolvem o conteúdo num elemento portal-scope que copia o escopo do provider de onde foram abertos.

Exemplos

Cada prévia já fica dentro de um StyleProvider: o que a barra acima controla. Estes exemplos aninham um segundo, para você ver a ilha ao lado da página em volta.

minimal · light · #3fa34d
Todo domingo

A Carta de Domingo

Cinco histórias sobre a cidade, escolhidas pelos nossos editores e entregues às 7h.

Estilo do seu espaço de trabalho
NovoRascunho
NovoRascunho
NovoRascunho
NovoRascunho
NovoRascunho
NovoRascunho
NovoRascunho
NovoRascunho
NovoRascunho
NovoRascunho
NovoRascunho
NovoRascunho
NovoRascunho

Estilo do espaço: minimal.

Todos os estilos lado a lado

Clique num quadro. Um seletor de tema mostra cada opção na própria ilha, e as pessoas veem o estilo antes de escolher. O modo e a marca continuam vindo da página.

Fatura nº 1042

Vence em 15/11/2026

R$ 1.280,00

Trocar de estilo em tempo de execução

Escolha um estilo e ligue o switch. Props novas só trocam atributos: nada é remontado e o estado lá dentro continua.

Aberto agora

Padaria Sol

Fermentação natural e doces, Rua das Flores, 12

Aberto agora

Clínica Vida

Médicos de família, Av. Paulista, 480

Uma marca por cliente

Defina só brand para dar a cada cliente a cor dele. Passe o estilo da página com useStyleScope(), porque styleName não é herdado.

relatorio-3o-tri.pdf2,4 MB · editado por Bruno Costa

Popups mantêm o estilo da ilha

Abra o menu. Ele é renderizado no <body> e mesmo assim mantém o estilo, o modo e a marca da ilha, porque todo popup reaplica o escopo de onde foi aberto.

Total: R$ 86,002 itens · frete grátis

Seu próprio portal

Clique em Pagar. O Portal move o conteúdo para outro nó e mantém o estilo da ilha; use-o, ou envolva o seu createPortal em PortalScope.

Estilo
minimal
Modo
light
Marca
#3fa34d

Ler o escopo atual

useStyleScope() devolve as props do provider mais próximo. Use para repassar o estilo, ou para colorir um gráfico ou canvas que não lê CSS.

Amarelo
Lima
Tinta

Cores de marca difíceis continuam legíveis

Amarelo, lima clara, quase preto: a escala da marca escolhe texto preto ou branco para cada tom, então os rótulos mantêm pelo menos 4,5:1 em qualquer estilo e modo.

Em contexto

São pedaços inteiros de interface para copiar, com uma ilha dentro do estilo que você escolheu.

Aparência

Vale para a sua conta em todos os dispositivos.

Modo
Cor de destaque
Prévia
Configurações de aparênciaStyleProvider · Select · RadioGroup · Card · Switch

Seu 2026 em números

Obrigado por um ótimo ano. Veja o que a sua loja fez desde janeiro.

Pedidos12.480
Clientes novos3.215
Nota média4,8
Seção de campanhaStyleProvider · Heading · Stat · Button

Clínica Vida

Escolha um horário para quinta-feira, 12/11.

Widget de agendamento incorporadoStyleProvider · useStyleScope · Card · Select · Button

Boas práticas

Bom dia, Ana. Você tem 3 pedidos para enviar hoje.

Novidades de outubro

Reembolso em lote, busca mais rápida e modo escuro nas faturas.

FaçaUma ilha para uma seção inteira.

Um painel de novidades, uma campanha ou um widget incorporado podem ter identidade própria. O resto da página fica com um estilo só.

EviteEstilos diferentes num mesmo formulário.

Três campos em três estilos parecem quebrados, e as pessoas deixam de confiar no formulário.

Mude para o plano Equipe e convide até 20 pessoas.

FaçaRepasse o estilo quando mudar o modo.

styleName={useStyleScope()?.["data-style"]} com mode="dark" dá um card escuro no estilo da própria página.

Mude para o plano Equipe e convide até 20 pessoas.

EviteSó o modo num provider aninhado.

Sem styleName, a ilha volta para minimal. Troque o estilo na barra acima: este card nunca muda.

Props

PropriedadeTipoPadrãoDescrição
styleNameStyleName (13 estilos)"minimal"O estilo. Não é herdado: um provider aninhado sem ele volta para minimal. Importe também a folha de estilo dele (@camaleo/styles/<nome>.css).
modeColorMode—light, dark ou system. Omita para herdar o modo do escopo pai (a raiz segue o sistema).
brandstring—Qualquer cor CSS. Vira uma escala de 11 tons com texto legível em cada um; o estilo decide onde a marca aparece. Omita para herdar a marca do pai.

Todas as props de <div> passam adiante; style é mesclado com as variáveis da marca. useStyleScope() devolve { "data-style", "data-mode"?, style? }, ou null fora de um provider. PortalScope recebe só children. Portal recebe children e container (padrão document.body). styleScopeProps(opções) devolve os mesmos atributos para um Server Component.

Styling hooks

O provider é a fonte dos tokens que todo componente lê. Use os atributos dele para mudar um estilo, ou defina um token numa ilha para mudar só aquela seção.

Atributos

data-styleminimal · neumorphism · retro-pixel · editorial · neubrutalism · retro · glass · swiss · progressive · clay · material · cupertino · y2k
data-modelight · dark · system (ausente: herdado)
style--cml-brand e --cml-brand-50 … -950, cada um com -fg e -hover
data-slot"portal-scope" no invólucro do popup no <body>

Tokens que ele lê

/* controles mais arredondados, só no estilo glass */
[data-style="glass"] {
  --cml-radius-control: 14px;
}

/* uma superfície mais suave numa ilha */
.central-de-ajuda[data-style] {
  --cml-surface: light-dark(var(--cml-brand-50), var(--cml-brand-950));
}

Acessibilidade

—O provider não é interativo e não recebe foco. O teclado vem dos componentes dentro dele.

Relacionados

Esta página foi útil? · Editar esta página no GitHub