Pular para o conteúdo principal

Progress

O componente Progress exibe um indicador de carregamento animado para informar ao usuário que uma operação está em andamento. Suporta dois modos: indeterminado (animação contínua) e determinado (exibe porcentagem).

Importação

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

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

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

Importação de tipos TypeScript

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

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

Playground Interativo

Explore o componente Progress no playground interativo do Storybook:

Documentação Completa

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

No Storybook você encontrará:

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

Uso básico

O Progress é usado para indicar que uma operação está em andamento:

<Progress />

Tamanhos

O Progress está disponível em três tamanhos diferentes:

Small

<Progress size="sm" />

Medium (padrão)

<Progress size="md" />

Large

<Progress size="lg" />

Veja todos os tamanhos juntos:

Variante On Color

Use a prop onColor quando o Progress for exibido sobre um fundo colorido ou escuro:

<div>
<Progress onColor />
</div>

Comparação entre as variantes:

Progress Determinado

Use a prop percentage para exibir um progresso determinado com porcentagem específica (0-100):

<Progress percentage={50} />

Diferentes porcentagens

<div style={{ display: 'flex', gap: '16px', alignItems: 'center' }}>
<Progress percentage={0} />
<Progress percentage={25} />
<Progress percentage={50} />
<Progress percentage={75} />
<Progress percentage={100} />
</div>

Tamanhos com porcentagem

<div style={{ display: 'flex', gap: '16px', alignItems: 'center' }}>
<Progress size="sm" percentage={75} />
<Progress size="md" percentage={75} />
<Progress size="lg" percentage={75} />
</div>

Veja todas as variantes de porcentagem:

API

Props

PropTipoPadrãoDescrição
size'sm' | 'md' | 'lg''md'Define o tamanho do componente de progresso
onColorbooleanfalseDefine se o progresso deve ser exibido sobre fundo colorido
percentagenumber | undefinedundefinedA porcentagem do progresso (0-100). Quando undefined, o progresso é indeterminado (modo animado)
classNamestring-Classes CSS adicionais

Classes CSS

O componente Progress utiliza as seguintes classes CSS para customização:

Classes principais

ClasseDescrição
.ods-progressClasse base do componente
.ods-progress--smTamanho small do progresso (16px)
.ods-progress--mdTamanho medium do progresso (24px, padrão)
.ods-progress--lgTamanho large do progresso (32px)
.ods-progress--on-colorVariante para fundos coloridos/escuros
.ods-progress--indeterminateModo indeterminado (animação contínua)
.ods-progress--determinateModo determinado (com porcentagem)

Elementos SVG

O componente Progress utiliza SVG para a animação. As classes afetam os seguintes elementos:

Modo Indeterminado
ElementoDescrição
svgContainer do SVG animado
svg circleCírculo de fundo do progresso
svg pathCaminho da animação do progresso
Modo Determinado
ClasseDescrição
.ods-progress__determinateContainer SVG do modo determinado
.ods-progress__trackCírculo de fundo (track)
.ods-progress__fillCírculo de preenchimento (progresso)

Acessibilidade

  • ✅ Animação suave e não intrusiva
  • ✅ Usa role="progressbar" para screen readers
  • ✅ Atributos ARIA (aria-valuenow, aria-valuemin, aria-valuemax) no modo determinado
  • ✅ Contraste adequado em todos os estados
  • ✅ Não interfere na navegação por teclado

Melhores práticas

✅ Faça

  • Use Progress indeterminado para operações de duração desconhecida
  • Use Progress determinado quando souber a porcentagem de conclusão
  • Combine com texto explicativo quando necessário
  • Use o tamanho apropriado para o contexto (sm para inline, lg para tela cheia)
  • Use onColor em fundos escuros ou coloridos

❌ Não faça

  • Não use Progress para operações instantâneas
  • Não use múltiplos Progress simultaneamente na mesma área
  • Não omita o onColor em fundos escuros
  • Não use Progress como placeholder de conteúdo
  • Não use valores de percentage fora do intervalo 0-100

Visão geral completa

Veja todas as variantes do Progress em ação: