Skip to content
Extensões

Timeline Horizontal

Timeline horizontal com dots conectados por uma linha, cards de conteudo e scroll nativo para muitos itens.

components/timeline-horizontal.cssAbrir no Figma

Uso

Quando e como utilizar a timeline horizontal para representar sequencias temporais.

  • Completed — Etapa concluida com sucesso (dot verde).
  • Pending — Etapa pendente ou em andamento (dot amarelo).
  • Error — Etapa com falha ou bloqueio (dot vermelho).
  • Warning — Etapa que requer atencao (dot amarelo).
  • Empty — Quando nao ha itens para exibir, mostra mensagem de estado vazio.

Exemplos

Veja abaixo os exemplos interativos da timeline horizontal, com dados de CSV, JSON, inline e HTML estatico.

Carregando exemplo...

Anatomia

Estrutura interna do componente e seus elementos.

ParteElementoDescricao
Container.timeline-horizontalWrapper principal do componente
Titulo.timeline-horizontal__titleTitulo da timeline, Inter 16px w600
Track.timeline-horizontal__trackFaixa com scroll horizontal, linha conectora e scroll-snap
Item.timeline-horizontal__itemColuna individual com 280px fixo e snap alignment
Dot.timeline-horizontal__dotCirculo indicador de status sobre a linha conectora
Card.timeline-horizontal__cardCard de conteudo posicionado abaixo do dot
Card Title.timeline-horizontal__card-titleTitulo do item, Inter 14px w500
Date.timeline-horizontal__dateData formatada, Inter 12px w400
Description.timeline-horizontal__descriptionTexto descritivo do item
Empty.timeline-horizontal__emptyMensagem exibida quando nao ha itens

Propriedades

Classes disponiveis para configurar a timeline horizontal.

PropriedadeTipoDefaultDescrição
.timeline-horizontalclasseContainer principal.
.timeline-horizontal__titleclasseTitulo da timeline.
.timeline-horizontal__trackclasseWrapper com scroll horizontal e linha conectora.
.timeline-horizontal__itemclasseItem individual (280px fixo, scroll-snap).
.timeline-horizontal__dotclasseCirculo indicador de status.
.timeline-horizontal__dot--completedclasseConcluido (verde).
.timeline-horizontal__dot--pendingclassePendente (amarelo).
.timeline-horizontal__dot--errorclasseErro (vermelho).
.timeline-horizontal__dot--warningclasseAtencao (amarelo).
.timeline-horizontal__cardclasseCard de conteudo abaixo do dot.
.timeline-horizontal__card-titleclasseTitulo do item.
.timeline-horizontal__dateclasseData formatada.
.timeline-horizontal__descriptionclasseDescricao do item.
.timeline-horizontal__emptyclasseEstado vazio.

Codigo

Snippets prontos para copiar e usar no seu projeto.

HTML estatico

html
<div class="timeline-horizontal">
  <h3 class="timeline-horizontal__title">Etapas do Processo</h3>
  <div class="timeline-horizontal__track">
    <div class="timeline-horizontal__item">
      <div class="timeline-horizontal__dot timeline-horizontal__dot--completed"></div>
      <div class="timeline-horizontal__card">
        <h4 class="timeline-horizontal__card-title">Abertura do processo</h4>
        <div class="timeline-horizontal__date">01/03/2025</div>
        <p class="timeline-horizontal__description">Protocolo registrado no sistema.</p>
      </div>
    </div>
    <div class="timeline-horizontal__item">
      <div class="timeline-horizontal__dot timeline-horizontal__dot--completed"></div>
      <div class="timeline-horizontal__card">
        <h4 class="timeline-horizontal__card-title">Analise documental</h4>
        <div class="timeline-horizontal__date">08/03/2025</div>
        <p class="timeline-horizontal__description">Documentos conferidos e validados.</p>
      </div>
    </div>
    <div class="timeline-horizontal__item">
      <div class="timeline-horizontal__dot timeline-horizontal__dot--pending"></div>
      <div class="timeline-horizontal__card">
        <h4 class="timeline-horizontal__card-title">Parecer tecnico</h4>
        <div class="timeline-horizontal__date">15/03/2025</div>
        <p class="timeline-horizontal__description">Aguardando avaliacao do setor responsavel.</p>
      </div>
    </div>
    <div class="timeline-horizontal__item">
      <div class="timeline-horizontal__dot timeline-horizontal__dot--error"></div>
      <div class="timeline-horizontal__card">
        <h4 class="timeline-horizontal__card-title">Decisao final</h4>
        <div class="timeline-horizontal__date">22/03/2025</div>
        <p class="timeline-horizontal__description">Encaminhamento para aprovacao.</p>
      </div>
    </div>
  </div>
</div>

Com DataLoader

js
import { DataLoader } from '../../src/core/data-loader.js';
import { renderTimelineHorizontal } from '../../src/components/timeline-horizontal.js';

const data = await DataLoader.load({
  endpoint: '/data/timeline/processo-etapas.json'
});

renderTimelineHorizontal(
  document.getElementById('timeline-json'),
  data,
  { title: 'etapa', date: 'data', status: 'situacao', description: 'descricao' },
  { title: 'Etapas do Processo' }
);

Com Factory (auto-init)

html
<div
  data-arenito="timeline-horizontal"
  data-endpoint="/data/timeline/processo-etapas.json"
  data-title="Etapas do Processo"
  data-mapping='{"title":"etapa","date":"data","status":"situacao","description":"descricao"}'
></div>

Fonte de Dados

A timeline aceita dados de diferentes origens via DataLoader.

CSV

js
const data = await DataLoader.load({
  endpoint: '/data/timeline/historico-fiscal.csv',
  csvOptions: { delimiter: ';' }
});

renderTimelineHorizontal(el, data,
  { title: 'titulo', date: 'data', status: 'status', description: 'descricao' },
  { title: 'Historico Fiscal' }
);

JSON

js
const data = await DataLoader.load({
  endpoint: '/data/timeline/processo-etapas.json'
});

renderTimelineHorizontal(el, data,
  { title: 'etapa', date: 'data', status: 'situacao', description: 'descricao' },
  { title: 'Etapas do Processo' }
);

API / Inline

js
const inlineData = [
  { etapa: 'Solicitacao', data: '2025-01-10', situacao: 'concluido', descricao: 'Pedido registrado.' },
  { etapa: 'Triagem',     data: '2025-01-12', situacao: 'concluido', descricao: 'Demanda classificada.' },
  { etapa: 'Execucao',    data: '2025-01-18', situacao: 'pendente',  descricao: 'Equipe em andamento.' },
  { etapa: 'Entrega',     data: '2025-01-25', situacao: 'pendente',  descricao: 'Aguardando finalizacao.' }
];

renderTimelineHorizontal(el, inlineData,
  { title: 'etapa', date: 'data', status: 'situacao', description: 'descricao' },
  { title: 'Fluxo de Atendimento' }
);

Dark Mode

O componente respeita os tokens semanticos globais e alterna automaticamente ao aplicar a classe .dark no container raiz.

  • Backgrounds, bordas e textos herdam os tokens do tema.
  • Os dots de status mantêm suas cores semanticas em ambos os temas.
  • A linha conectora do track ajusta sua cor via variavel de borda.

Design System interno do GALES