Guias / Uso de Componentes

Uso de Componentes

Convencoes de nomenclatura, metodologia BEM, icones, responsividade, dark mode e acessibilidade no CANTA Design System.

Convencao de Nomenclatura

Todas as classes do CANTA DS usam o prefixo .canta- para evitar conflitos com outros frameworks. A metodologia BEM (Block, Element, Modifier) garante previsibilidade e organizacao.

Tipo Padrao Exemplo Descricao
Block .canta-[bloco] .canta-btn Componente independente e reutilizavel
Element .canta-[bloco]__[elemento] .canta-btn__icon Parte interna que depende do bloco
Modifier .canta-[bloco]--[modificador] .canta-btn--primary Variacao de aparencia ou estado
Element + Modifier .canta-[bloco]__[el]--[mod] .canta-card__title--lg Variacao de um elemento interno

Combinando Classes

Componentes sao construidos combinando a classe base (bloco) com modificadores. A classe base e sempre obrigatoria.

HTML - Correto
<!-- Base + variante + tamanho -->
<button class="canta-btn canta-btn--primary canta-btn--lg">
  Salvar
</button>

<!-- Base + variante + estado -->
<button class="canta-btn canta-btn--danger canta-btn--loading">
  Excluindo...
</button>

<!-- Card com elementos internos -->
<div class="canta-card">
  <div class="canta-card__header">Titulo</div>
  <div class="canta-card__body">Conteudo</div>
  <div class="canta-card__footer">Acoes</div>
</div>
HTML - Incorreto
<!-- ERRADO: modificador sem classe base -->
<button class="canta-btn--primary">Salvar</button>

<!-- ERRADO: misturar blocos diferentes -->
<button class="canta-btn canta-card--primary">Salvar</button>

<!-- ERRADO: classe sem prefixo canta- -->
<button class="btn btn-primary">Salvar</button>

Uso de Icones

O CANTA DS usa Material Symbols Rounded do Google Fonts. Os icones sao inseridos como texto dentro de um <span> com a classe material-symbols-rounded.

Icones em Botoes
HTML
<!-- Icone + texto -->
<button class="canta-btn canta-btn--primary">
  <span class="material-symbols-rounded">add</span>
  Novo Item
</button>

<!-- Apenas icone -->
<button class="canta-btn canta-btn--primary canta-btn--icon-only">
  <span class="material-symbols-rounded">settings</span>
</button>

<!-- Icone em alerta -->
<div class="canta-alert canta-alert--success">
  <span class="material-symbols-rounded">check_circle</span>
  Operacao realizada com sucesso!
</div>

Catalogo completo de icones disponivel em Google Material Symbols. Use sempre a variante Rounded.

Responsividade

O CANTA DS e mobile-first. Os breakpoints seguem o padrao progressivo. Use as classes utilitarias ou os mixins SCSS para adaptar layouts.

Breakpoint Largura Dispositivo Mixin SCSS
sm ≥ 576px Mobile landscape @include media-up(sm)
md ≥ 768px Tablet @include media-up(md)
lg ≥ 1024px Desktop @include media-up(lg)
xl ≥ 1280px Desktop largo @include media-up(xl)
xxl ≥ 1536px Telas grandes @include media-up(xxl)
SCSS - Mixins responsivos
// Mobile-first: estilos base para mobile
.meu-componente {
  padding: 16px;
  flex-direction: column;

  // Tablet: 2 colunas
  @include media-up(md) {
    flex-direction: row;
    padding: 24px;
  }

  // Desktop: mais espaco
  @include media-up(lg) {
    padding: 32px;
    max-width: 1200px;
  }
}

Dark Mode

O dark mode e ativado adicionando o atributo data-theme="dark" no elemento <html>. Todos os tokens de cor se adaptam automaticamente via CSS custom properties.

HTML - Ativar dark mode
<!-- Light (padrao) -->
<html lang="pt-BR">

<!-- Dark mode -->
<html lang="pt-BR" data-theme="dark">
JavaScript - Toggle automatico
function toggleTheme() {
  const html = document.documentElement;
  const current = html.getAttribute('data-theme');
  const next = current === 'dark' ? 'light' : 'dark';
  html.setAttribute('data-theme', next);
  localStorage.setItem('canta-ds-theme', next);
}

// Restaurar preferencia salva
(function() {
  const saved = localStorage.getItem('canta-ds-theme');
  if (saved) {
    document.documentElement.setAttribute('data-theme', saved);
  }
})();
SCSS - Custom properties dark-aware
// Os tokens ja se adaptam automaticamente:
.meu-componente {
  background: var(--canta-color-surface);    // branco no light, escuro no dark
  color: var(--canta-color-text);            // preto no light, branco no dark
  border-color: var(--canta-color-border);   // cinza adaptativo
}

Acessibilidade

O CANTA DS segue as diretrizes WCAG 2.1 nivel AA. Todos os componentes incluem suporte a navegacao por teclado, leitores de tela e contraste adequado.

Recurso Implementacao
Focus visible Todos os interativos tem outline visivel via :focus-visible, anel azul de 2px
ARIA labels Botoes icon-only devem ter aria-label; modais usam aria-modal e role="dialog"
HTML semantico Use <button> para acoes, <a> para navegacao, <nav> para menus
Contraste Todas as combinacoes de texto/fundo atendem ratio minimo de 4.5:1
Teclado Tab para navegar, Enter/Space para ativar, Escape para fechar modais
Reduced motion Animacoes desabilitadas quando prefers-reduced-motion: reduce ativo
HTML - Exemplos de acessibilidade
<!-- Botao icon-only com aria-label -->
<button class="canta-btn canta-btn--primary canta-btn--icon-only"
        aria-label="Configuracoes">
  <span class="material-symbols-rounded">settings</span>
</button>

<!-- Modal com atributos ARIA -->
<div class="canta-modal" role="dialog" aria-modal="true"
     aria-labelledby="modal-titulo">
  <div class="canta-modal__header">
    <h2 id="modal-titulo">Confirmar acao</h2>
  </div>
  <div class="canta-modal__body">...</div>
</div>

<!-- Alerta com role -->
<div class="canta-alert canta-alert--error" role="alert">
  Erro ao salvar os dados.
</div>

<!-- Navegacao semantica -->
<nav aria-label="Menu principal">
  <a href="/dashboard">Dashboard</a>
  <a href="/relatorios">Relatorios</a>
</nav>