@encibra/gantt
v0.14.0
Published
Componentes de Gantt e Scheduler de recursos da Encibra — core de agendamento e componentes React injetáveis em qualquer projeto.
Readme
@encibra/gantt
Biblioteca interna da Encibra com componentes de gráfico de Gantt e scheduler de recursos sincronizados, implementada do zero (sem código de terceiros, sem licença comercial).
Projetada para ser injetada em qualquer projeto React: componentes 100% controlados por props, sem estado global e sem fetch interno — o projeto consumidor é dono dos dados e recebe callbacks para persistir mudanças.
Arquitetura
src/
core/ TypeScript puro, zero dependência de DOM/React
(modelo de dados + engine de agendamento + calendários)
view/ geometria e escala de tempo (TS puro, sem React):
timescale (zoom/eixo), layout (barras/setas), scheduler, drag
react/ componentes: <GanttChart>, <ResourceScheduler>,
<GanttSchedulerView>, <TaskEditForm> + hooks utilitários
docs/ documentação completa (props, tipos, semânticas, exemplos)
playground/ galeria de exemplos navegável (npm run dev) — também é o
ambiente de desenvolvimento visual da libA documentação completa está em docs/; a galeria de exemplos cobre cada recurso com um demo executável.
Core — engine de agendamento
A função scheduleProject(input) recebe tarefas, dependências, recursos e calendário e devolve as datas calculadas de todas as tarefas (agendamento ASAP, estilo MS Project):
import { scheduleProject } from "@encibra/gantt";
const result = scheduleProject({
startDate: "2026-01-05",
calendar: { workingDays: [1, 2, 3, 4, 5], holidays: ["2026-01-26"] },
tasks: [
{ id: "fase1", name: "Fase 1" },
{
id: "a",
name: "Levantamento",
parentId: "fase1",
duration: 3,
percentDone: 60,
},
{ id: "b", name: "Relatório", parentId: "fase1", duration: 2 },
],
dependencies: [{ id: "d1", from: "a", to: "b", type: "FS", lag: 1 }],
});
result.tasks; // ordem de exibição (depth-first), com start/end/duração/percentualSemânticas (importante ler antes de mexer na engine)
- Granularidade de dia. Datas internas são "day numbers" (dias desde 1970-01-01 UTC); entradas aceitam
'YYYY-MM-DD'ouDate. endé exclusivo: o dia seguinte ao último dia trabalhado. Tarefa de 1 dia na segunda →startsegunda,endterça. Milestones (duration: 0) têmstart === end.- Durações e lags em dias úteis, conforme o calendário (fins de semana/feriados são pulados).
- Tipos de dependência: FS (padrão), SS, FF, SF — com lag positivo ou negativo.
- Dependências em tarefas-pai são expandidas para as folhas: aresta entrando num pai restringe todos os filhos; aresta saindo de um pai espera todos os filhos.
- Rollup de pais: start = mínimo dos filhos, end = máximo,
percentDone= média ponderada pela duração. - Erros estruturais (ids duplicados, ciclos, pai inexistente) lançam
SchedulingError; problemas contornáveis (dependência com referência desconhecida) viramwarningsno resultado. - Recalculo é total (O(tarefas + dependências)) — suficiente para milhares de tarefas; recálculo incremental é otimização futura.
Roadmap
| Fase | Entrega | Status |
| ---- | ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| 1 | Pacote + modelo de dados + engine de agendamento com testes | ✅ |
| 2 | <GanttChart> somente leitura: árvore, barras, dependências, zoom, virtualização | ✅ |
| 3 | <ResourceScheduler> sincronizado + splitter (<GanttSchedulerView>) + tooltips ricos | ✅ |
| 4 | Edição via célula/formulário com recálculo em cascata + colunas redimensionáveis | ✅ |
| 5 | Drag & drop: mover/redimensionar barras com snap | ✅ |
| 6 | Calendários avançados (nomeados por tarefa, feriados em intervalo) + criação/remoção de dependências na timeline | ✅ |
| 7a | Galeria de exemplos + revisão final das docs | ✅ |
| 7b | Publicação em registry privado + migração para repositório próprio | ⬜ |
| 8 | Paridade de interações com o exemplo de referência: tooltips só no cronograma, tooltip De/Para nas setas, coluna de recursos com avatares | ✅ (resta opcional: labels antes das barras) |
Desenvolvimento
npm install
npm run dev # galeria de exemplos em http://localhost:5199
npm test # vitest (core + view + componentes)
npm run typecheck
npm run build # emite dist/ via tsc