@sevn/elections-oraculo
v1.0.0
Published
Embeddable AI chat about the 2026 Brazilian elections, for news outlets.
Readme
@sevn/elections-oraculo
Chat embutível sobre as Eleições 2026, para veículos de notícia. Uma janela de perguntas e respostas que responde a partir dos dados oficiais da apuração.
O pacote traz tudo dentro do bundle — Svelte, a biblioteca de gráficos e os estilos. Não há CSS separado para carregar nem dependência para instalar junto, e o seu projeto não precisa usar Svelte.
Antes de subir: os domínios em que o Oráculo vai rodar precisam estar liberados na API — inclusive os de homologação. Envie a lista no onboarding. Sem isso o navegador bloqueia as requisições e a janela mostra erro de conexão.
Tag script
Marque um elemento com data-sevn-oraculo e carregue o bundle. Ele encontra
todos os elementos marcados da página e se monta sozinho.
<div
data-sevn-oraculo
data-api-url="https://api-oraculo.sevnelections.com"
data-locale="pt-BR"
data-height="560px"
></div>
<script src="https://cdn.jsdelivr.net/npm/@sevn/elections-oraculo/dist/oraculo.umd.js"></script>O script pode ficar no fim do <body> ou no <head> com defer — a montagem
espera o documento estar pronto. Elementos já montados são marcados, então
carregar o script duas vezes não duplica a janela.
npm
npm install @sevn/elections-oraculoimport { create } from '@sevn/elections-oraculo';
const oraculo = create({
target: '#oraculo',
apiUrl: 'https://api-oraculo.sevnelections.com',
locale: 'pt-BR',
height: 560,
});
// ao sair da tela
oraculo.destroy();Importar o pacote não tem efeito colateral: nada é renderizado e nenhum nó é
tocado até create() rodar. Por isso ele é seguro em bundle com renderização no
servidor — Next.js, SvelteKit, Astro — desde que create() só seja chamado no
navegador.
Nos frameworks o padrão é sempre o mesmo: chamar create() quando o elemento
existir e destroy() ao desmontar (useEffect no React, onMount no Svelte,
onMounted/onBeforeUnmount no Vue).
Opções
| Opção | data-* | Padrão | O que faz |
| ------------ | ------------------ | --------------------------------------- | ----------------------------------- |
| target | — | obrigatório | Elemento ou seletor CSS onde montar |
| apiUrl | data-api-url | https://api-oraculo.sevnelections.com | Base da API do Oráculo |
| locale | data-locale | pt-BR | pt-BR ou en |
| showHeader | data-show-header | true | Mostra o cabeçalho com a marca |
| width | data-width | 100% | Número (pixels) ou medida CSS |
| height | data-height | 560px | Número (pixels) ou medida CSS |
create() devolve um objeto com um único método, destroy(), que desmonta a
janela e limpa o que foi inserido na página.
Montando vários de uma vez
Se você marcou os elementos com data-sevn-oraculo mas prefere controlar quando
a montagem acontece, chame mountAll() você mesmo. Ela varre o documento (ou o
nó que você passar), monta o que ainda não foi montado e devolve as instâncias:
import { mountAll } from '@sevn/elections-oraculo';
const instancias = mountAll(); // documento inteiro
const noArtigo = mountAll(document.querySelector('#artigo'));
instancias.forEach((i) => i.destroy());Rodar mountAll() de novo não duplica nada: elementos já montados são ignorados.
Conferindo se está no ar
Se a janela aparecer mas toda pergunta terminar em erro de conexão, o mais
provável é o domínio ainda não estar liberado. O widget escreve o detalhe
técnico no console do navegador, sempre prefixado com [oraculo] — o leitor
nunca vê essa mensagem, só um aviso curto com a opção de tentar de novo.
O mesmo vale se a janela não aparecer: create() nunca lança exceção que possa
quebrar a sua página. Um alvo que não existe vira uma mensagem [oraculo] no
console e uma instância inerte, cujo destroy() continua seguro de chamar.
Licença
Software proprietário. O uso depende de contrato com a SEVN Tech — veja LICENSE.
