sexta-feira, 26 de dezembro de 2025

Árvore genealógica com JavaScript e Mermaid.JS

Depois de muito pouco comprometimento com desenvolvimento, seja por obrigação, seja por diversão, eu encontrei um grupo da família e pude obter dados que remontavam aos meus bisavós. Então já que havia muita gente que não se conhecia e não sabia em que posição na família cada um se encontrava, tive a ideia de montar uma árvore genealógica. Daí fiquei buscando algumas formas de como montar uma árvore genealógica. E houve aquelas formas mais corriqueiras como utilizar algum editor de imagens ou montar retângulos com traços os ligando-os, mas que óbvio ficava bem ruim pois a edição é custosa. Então tentei uma solução em JavaScript associado uma página HTML Encontrei alguns pacotes no Github que iam nessa abortagem. A principal solução desse tipo foi o Treant-js encontrado em http://fperucic.github.io/treant-js , trabalho do Fran Peručić.
Captura de tela do site Treant.js, uma biblioteca JavaScript baseada em SVG para visualização de diagramas em árvore. No topo, há o logotipo com o nome ‘Treant.js’ e a frase ‘JavaScript library for visualization of tree diagrams’. Abaixo, um menu de navegação com opções como Quick Start, Introduction, API, Examples e Download. Na seção principal, intitulada ‘Quick Start Demos’, são exibidas miniaturas de exemplos de diagramas, incluindo organograma empresarial, árvore de resultados esportivos, estrutura colapsável, árvore de evolução e itens personalizados por cores.
Treant.JS do Fran Peručić

Então passei para o Gemini e ChatGPT para criar a estrutura básica da página HTML e desta vez o Gemini se saiu melhor que o ChatGPT apesar de o resultado final não ter sido perfeito. Das 6 versões geradas 4 no Gemini e 2 no ChatGPT, exatamente nesta sequência a versão número 2 do Gemini ficou melhor porém incompleta. E não houve meio de explicar para ele nem para o ChatGPT para basicamente incluir os recursos que estavam faltando sem alterar a estrutura já criada. Pois bem todas as vezes foram propostas soluções diferentes nunca agregando o que estava faltando. Por fim peguei a versão 2 (a melhor no meu julgamento) e finalizei o código para que as árvores criadas pudessem ser persistidas (sendo salva e/ou carregada) e assim não ter que refazer a árvore do zero todas as vezes. Na versão 2 em si, o Gemini escolheu a Cytoscape.js - uma biblioteca JavaScript aberta e bem completa de recursos para criação de grafos com possibilidade de visualização e interação, sem falar que é amplamente usada.
Captura de tela do site oficial Cytoscape.js, biblioteca JavaScript para visualização e análise de grafos e redes. No topo, aparece o logotipo Cytoscape.js e a descrição ‘Graph theory (network) library for visualisation and analysis’, acompanhados de selos informativos como versão, licença MIT, repositório GitHub e estatísticas de uso. À esquerda, há um menu de navegação vertical com seções como Introduction, Notation, Getting started e Architecture & API. Na área principal, a seção ‘Demos’ exibe miniaturas de exemplos de grafos interativos, incluindo redes gene-gene, mapa das ferrovias de Tóquio, relações entre vinhos e queijos, diagramas SBGN e exemplos de extensões
Cytoscape.js - Biblioteca JS topíssima !!!


 Apesar de a combinação de recursos ter sido boa suficiente para criar uma árvores simples, não explorei funcionalidades de melhor visualização. O código resultante do trabalho inicial do Gemini e finalização e revisão feita por mim está disponível no meu Github.
Captura de tela de uma aplicação web de genealogia. À esquerda, há um painel lateral escuro intitulado ‘Genealogia’, com formulários para cadastro de pessoas e casamentos, incluindo campos como nome completo, seleção de cônjuges e botões ‘Salvar Pessoa’ e ‘Casar’. À direita, ocupa a maior parte da tela um grande diagrama de árvore genealógica, com várias gerações representadas por caixas retangulares conectadas por linhas coloridas, indicando relações familiares e casamentos organizados hierarquicamente.
Meu formulário simples usando Cytoscape


A partir dessa segunda solução, o Gemini me sugeriu utilizar o Mermaidchart.com que é um conjunto de ferramentas (web, textos e código). Mermaid permite a criação de diagramas e sua visualização usando texto e código. É baseado em JavaScript e pode ser integrado de diferentes formas além de ter recursos de IA para otimização de código e geração de gráfico a partir de texto. Ou seja serve para criar os gráficos mais diversos e serve também para árvores genealógicas. Porém o Mermaid permite mais facilmente (não que os outros não tenham tais recursos) uma visão mais confortável e atraente. Um trabalho futuro interessante seria trabalhar  incrementos tais como a integração numa página HTML, bem como testar a descrição da genealogia em texto e deixar o Mermaid fazer o resto. Mas enfim completei a tarefa e posso dizer que pelo menos fiz um gol de honra.
Captura de tela de uma ferramenta web de edição de diagramas baseada em código. À esquerda, há um painel de código com sintaxe Mermaid, exibindo um fluxograma orientado da esquerda para a direita e definições de estilos por classes de cores. No topo, aparecem controles como ‘Auto Layout’ e ‘Manual Layout’, além de opções de exportação e compartilhamento. À direita, ocupa a maior parte da tela um grande diagrama hierárquico renderizado automaticamente, composto por dezenas de nós retangulares coloridos e conectados por linhas, representando uma estrutura complexa em forma de árvore. Há também ferramentas de navegação, zoom e edição visual distribuídas ao redor da área do diagrama.
Interface da MermaidChart para fazer qualquer gráfico

Nenhum comentário:

Postar um comentário