Pular para o conteúdo principal

CardGroup

O CardGroup é um componente usado para agrupar informações relacionadas em um layout organizado. Ele suporta diferentes variantes (minimal e header) e pode incluir título, subtítulo, contador, tag de destaque e uma ação clicável com contador opcional.

Importação

import { CardGroup } from '@useblu/ocean-react';

Importação específica (recomendado para tree-shaking)

import { CardGroup } from '@useblu/ocean-react/CardGroup';

Importação de tipos TypeScript

import type { ICardGroupProps, TagProps } from '@useblu/ocean-react';

// Uso em componente customizado
const MyComponent: React.FC<ICardGroupProps> = (props) => {
return <CardGroup {...props} />;
};

// Exemplo com tag
const CardWithTag: React.FC = () => {
const tag: TagProps = {
children: 'Novo',
variant: 'highlight',
type: 'positive',
};

return (
<CardGroup
title="Título"
subtitle="Subtítulo"
tag={tag}
actionLabel="Ver mais"
actionCount={5}
/>
);
};

Playground Interativo

Explore o componente CardGroup no playground interativo do Storybook:

Documentação Completa

Para documentação técnica detalhada, exemplos de uso e API completa, consulte o Storybook do CardGroup.

No Storybook você encontrará:

  • Controles interativos para testar todas as props
  • API gerada automaticamente com tipagem completa
  • Exemplos visuais de todas as variantes
  • Playground para experimentação rápida

Uso básico

Card minimal com conteúdo

<CardGroup
title="Meu Card"
subtitle="Descrição do card"
count={5}
actionLabel="Ver mais"
>
<div style={{ padding: '16px' }}>
<p>Conteúdo do card</p>
</div>
</CardGroup>

Card header (apenas cabeçalho)

<CardGroup
title="Estatísticas"
subtitle="Resumo dos dados"
count={25}
variant="header"
/>

Card com tag de destaque

<CardGroup
title="Boletos"
subtitle="Disponíveis para pagamento"
tag={{
children: 'Novo',
variant: 'highlight',
type: 'positive',
}}
actionLabel="Ver boletos"
actionCount={3}
>
<div style={{ padding: '16px' }}>
<p>Você tem 3 boletos disponíveis para pagamento</p>
</div>
</CardGroup>

Card com contador na ação

<CardGroup
title="Notificações"
subtitle="Mensagens não lidas"
count={15}
actionLabel="Ver todas"
actionCount={5}
>
<div style={{ padding: '16px' }}>
<p>5 notificações importantes aguardando sua atenção</p>
</div>
</CardGroup>

Cartões com fundo e estados

Card com fundo azul e tag

Quando o card precisa chamar atenção com uma cor de fundo suave e uma tag, use esta variante. Ela combina a tag com o fundo azul e o ícone de destaque para reforçar o status.

Card sem tag

Use quando o conteúdo deve ser acompanhado apenas por um alerta e ação, sem destacar o status via tag.

Card com fundo, sem alerta adicional

Para mostrar contexto com fundo azul claro, mas sem o bloco de alerta inferior, essa versão mantém o visual limpo.

Card sem background extra

Use este estado quando o conteúdo precisa do visual padrão, sem cor de fundo nem alertas visuais.

Variantes

O CardGroup oferece duas variantes principais:

Minimal (padrão)

A variante minimal exibe o conteúdo principal e a ação (se fornecida):

A variante header exibe apenas o cabeçalho (título e subtítulo) e o contador, sem conteúdo adicional ou ação.

Exemplo com conteúdo personalizado

O CardGroup aceita qualquer conteúdo React como children:

Contador opcional

O contador é exibido quando a prop count é fornecida:

Ações interativas

Cards podem incluir botões de ação para navegação ou funcionalidades:

Tags de destaque

As tags permitem destacar informações importantes no cabeçalho do card. Útil para indicar status, novidades ou categorias:

Quando usar tags

  • Status: Indicar se algo é novo, urgente ou importante
  • Categorias: Classificar o tipo de conteúdo do card
  • Alertas: Chamar atenção para informações que requerem ação

Configuração de tags

As tags aceitam as seguintes propriedades principais:

  • children: Texto exibido na tag
  • variant: Estilo visual ('highlight', 'complementary', etc.)
  • type: Cor semântica ('positive', 'negative', 'warning', 'neutral')

Para mais detalhes sobre configuração de tags, consulte a documentação do componente Tag.

Contadores na ação

O botão de ação pode exibir um contador através da prop actionCount. Isso é útil para indicar:

  • Número de itens não lidos ou pendentes
  • Quantidade de notificações
  • Total de elementos disponíveis para visualização
<CardGroup
title="Tarefas Pendentes"
subtitle="Projeto Alpha"
count={8}
actionLabel="Ver tarefas"
actionCount={3}
>
<div style={{ padding: '16px' }}>
<p>3 tarefas requerem atenção imediata</p>
</div>
</CardGroup>

Personalização do Badge da Ação

É possível customizar a cor do badge exibido no botão de ação através da prop actionBadgeColor. As cores disponíveis são brand, complementary, alert e neutral.

<CardGroup
title="Status do Sistema"
subtitle="Verificação de serviços"
actionLabel="Ver detalhes"
actionCount={3}
actionBadgeColor="alert"
actionClick={() => alert('Ação clicada!')}
>
<div style={{ padding: '16px' }}>
<p>3 serviços apresentam instabilidade.</p>
</div>
</CardGroup>

API

Props

PropTipoPadrãoDescrição
titlestring-O título exibido no cabeçalho
subtitlestring-O subtítulo exibido no cabeçalho
variant'minimal' | 'header''minimal'A variante do componente que define o layout
countnumber-O valor exibido no contador. Se undefined, o contador fica oculto
tagTagProps-Configuração da tag de destaque exibida ao lado do título
actionLabelstring-O texto do botão de ação
actionCountnumber-O valor exibido no contador do botão de ação
actionClick() => void-Função chamada quando o botão de ação é clicado
actionBadgeColor'brand' | 'complementary' | 'alert' | 'neutral' | 'highlight'-Define a cor de fundo do badge no botão de ação
childrenReactNode-Conteúdo adicional exibido abaixo do cabeçalho (apenas na variante minimal)

Comportamento das variantes

  • Minimal: Exibe título, subtítulo, tag, contador, conteúdo personalizado e ação (com contador opcional)
  • Header: Exibe apenas título, subtítulo, tag e contador (sem conteúdo ou ação)

Classes CSS

ClasseDescrição
.ods-card-groupEstilos aplicados ao elemento raiz
.ods-card-group--minimalEstilos aplicados quando a variante é minimal
.ods-card-group--headerEstilos aplicados quando a variante é header
.ods-card-group__headerEstilos aplicados ao container do cabeçalho
.ods-card-group__header--contentEstilos aplicados ao conteúdo interno do cabeçalho
.ods-card-group__actionEstilos aplicados ao botão de ação
.ods-card-group__action--labelEstilos aplicados ao rótulo do botão de ação

Casos de uso comuns

Dashboard com estatísticas

<div style={{ display: 'flex', gap: '16px', flexWrap: 'wrap' }}>
<CardGroup title="Vendas" subtitle="Hoje" count={42} variant="header" />
<CardGroup title="Usuários" subtitle="Online" count={128} variant="header" />
</div>

Lista de tarefas

<CardGroup
title="Tarefas Pendentes"
subtitle="Projeto Alpha"
count={8}
actionLabel="Ver todas"
>
<div style={{ padding: '16px' }}>
<ul style={{ margin: 0, paddingLeft: '20px' }}>
<li>Revisar código</li>
<li>Atualizar documentação</li>
<li>Fazer deploy</li>
</ul>
</div>
</CardGroup>

Card de notificações

<CardGroup
title="Notificações"
subtitle="Últimas 24 horas"
count={15}
actionLabel="Marcar como lidas"
actionCount={5}
>
<div style={{ padding: '16px' }}>
<p style={{ margin: 0 }}>Você tem 5 notificações urgentes não lidas.</p>
</div>
</CardGroup>

Card com status destacado

<CardGroup
title="Documentos"
subtitle="Pendentes de assinatura"
count={2}
tag={{
children: 'Urgente',
variant: 'highlight',
type: 'warning',
}}
actionLabel="Assinar documentos"
actionCount={2}
>
<div style={{ padding: '16px' }}>
<p style={{ margin: 0 }}>2 documentos aguardando sua assinatura digital.</p>
</div>
</CardGroup>

Card de promoção

<CardGroup
title="Ofertas Especiais"
subtitle="Válido até 31/12"
tag={{
children: 'Novo',
variant: 'highlight',
type: 'positive',
}}
actionLabel="Ver ofertas"
>
<div style={{ padding: '16px' }}>
<p style={{ margin: 0 }}>Confira nossas ofertas exclusivas desta semana!</p>
</div>
</CardGroup>

Acessibilidade

  • ✅ Estrutura semântica apropriada
  • ✅ Navegação por teclado funcional no botão de ação
  • ✅ Atributos ARIA adequados
  • ✅ Suporte a screen readers
TeclaFunção
TabMove o foco para o botão de ação
Enter/SpaceAtiva a ação do botão

Melhores práticas

✅ Faça

  • Use títulos descritivos e concisos
  • Mantenha subtítulos informativos mas breves
  • Use a variante header para informações resumidas
  • Use a variante minimal para conteúdo mais detalhado
  • Forneça ações relevantes ao contexto
  • Use tags para destacar status importantes (novo, urgente, etc.)
  • Adicione contadores na ação quando houver itens pendentes ou não lidos
  • Use cores semânticas apropriadas nas tags (positive, negative, warning, neutral)

❌ Não faça

  • Não use títulos muito longos que quebrem o layout
  • Não omita subtítulos quando o contexto não for óbvio
  • Não use a variante header com conteúdo complexo
  • Não deixe de testar as ações dos botões
  • Não sobrecarregue o card com muito conteúdo
  • Não use tags desnecessárias que poluam visualmente o card
  • Não abuse de contadores - use apenas quando agregar valor ao usuário