Começar
Use o pacote com Next/Vite ou carregue o bundle global diretamente no navegador.
1. Instale
Next, @iconify/react e leaflet são peers opcionais.
npm install cosmemilton-ui react react-domInstale @iconify/react se usar CmIcon — ou se importar cosmemilton-ui/client em ambiente sem tree-shaking (o entry referencia CmIcon via CmSelect). Instale leaflet somente se usar CmMap pelo entry cosmemilton-ui/map.
2. Importe o CSS uma vez
// app/layout.tsx (Next) ou main.tsx (Vite/CRA)
import "cosmemilton-ui/styles.css";O CSS já inclui os tokens de todos os temas embutidos — os componentes renderizam estilizados sem nenhum setup de tema (padrão cm-neutral). Para fixar outro tema sem JavaScript, use <html data-theme="cm-dark">. Se usar CmMap, importe também leaflet/dist/leaflet.css no layout raiz.
3. Habilite a troca de tema (opcional)
Necessário apenas para troca de tema em runtime: CmThemeToggle, persistência em localStorage e temas custom.
O CmThemeScript no head aplica o tema salvo antes do primeiro paint, sem flash no SSR.
import "cosmemilton-ui/styles.css";
import { CmThemeProvider, CmThemeScript } from "cosmemilton-ui/theme";
export default function RootLayout({ children }) {
return (
<html lang="pt-BR" suppressHydrationWarning>
<head>
<CmThemeScript />
</head>
<body>
<CmThemeProvider>{children}</CmThemeProvider>
</body>
</html>
);
}4. Entry points
Imports explícitos preservam RSC, tree-shaking e código copiável.
Componentes interativos. Use em Client Components ou como fronteira cliente no App Router.
Componentes server-safe, tipos comuns, utilitários e tokens que não carregam hooks de cliente.
CmThemeProvider, CmThemeScript, CmThemeToggle/Menu, temas, extendThemes e helpers de CSS de tema.
CmMap com Leaflet. Instale leaflet e importe leaflet/dist/leaflet.css apenas quando usar mapas.
CSS publicado com reset global e os tokens de todos os temas embutidos. Importe uma única vez no layout raiz ou main.tsx.
CSS sem o reset global, para adoção incremental em apps existentes. Ambos têm variante .min.css.
5. Sem bundler: use o script global
O bundle publica window.CmUI e mantém React/ReactDOM externos para evitar cópias duplicadas.
<link rel="stylesheet" href="https://unpkg.com/cosmemilton-ui@3.15.0/styles.min.css" />
<script crossorigin src="https://unpkg.com/react@18.3.1/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@18.3.1/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/cosmemilton-ui@3.15.0"></script>
<div id="root"></div>
<script>
const { CmButton } = window.CmUI;
const button = React.createElement(CmButton, null, "Salvar");
ReactDOM.createRoot(document.getElementById("root")).render(button);
</script>A versão das URLs é gerada automaticamente a partir do pacote instalado nesta documentação. Em script puro não há transformação de JSX; use React.createElement ou um compilador no navegador.
6. Copie um exemplo
import { CmButton } from "cosmemilton-ui/client";
export function SaveAction() {
return <CmButton tone="primary">Salvar</CmButton>;
}Depois abra os componentes e copie exemplos completos com preview idêntico.