ilibras-widget 1.5.3 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,111 @@ Todas as mudanças notáveis neste projeto serão documentadas neste arquivo.
4
4
 
5
5
  ---
6
6
 
7
+ ## [1.7.0] - 2026-10-29
8
+
9
+ ### 🌙 O widget acompanha o tema do site, e o ícone fica branco no escuro
10
+
11
+ A logo é azul-marinho sobre fundo transparente: num site escuro, sumia. Agora
12
+ o widget lê o fundo do site e escolhe o tema que aparece melhor sobre ele. No
13
+ escuro, o azul do ícone vira branco — o dourado continua — e o formulário fica
14
+ escuro junto.
15
+
16
+ Quem decide é o **fundo do site**, não o `prefers-color-scheme` do sistema,
17
+ que era o que ligava o tema escuro do formulário até aqui. O ícone flutua
18
+ sobre a página, e num site claro aberto num computador em modo escuro o tema
19
+ do sistema pintaria o ícone de branco sobre branco. O sistema continua
20
+ contando por tabela: o site que segue o modo escuro do computador escurece o
21
+ próprio fundo, e é esse fundo que se lê.
22
+
23
+ - O fundo é o do `<html>` com o do `<body>` por cima, transparência incluída.
24
+ Site sem fundo próprio mostra a tela-base do navegador, que só é escura
25
+ quando o site declara `color-scheme` escuro (no CSS ou na `<meta>`).
26
+ - A cor é lida por um canvas de 1 pixel, que entende `oklch()` e `lab()` — o
27
+ formato em que o Tailwind 4, por exemplo, devolve a cor de fundo.
28
+ - O widget acompanha a troca sem recarregar: classe ou `data-*` mudando no
29
+ `<html>`/`<body>` (o botão de tema do site), o fim da transição do fundo e o
30
+ sistema trocando de modo.
31
+ - **Mudança de comportamento:** num site claro, quem tem o sistema em modo
32
+ escuro passa a ver o formulário claro, como o site. Antes via o escuro.
33
+
34
+ ### ⚙️ Nova opção `tema` e novo método `definirTema()`
35
+
36
+ `tema: 'auto'` é o padrão. `'claro'` e `'escuro'` fixam o tema — para o site
37
+ que pinta o fundo com gradiente, imagem ou num elemento de dentro, que o
38
+ widget não consegue ler. `definirTema('claro' | 'escuro' | 'auto')` troca na
39
+ hora.
40
+
41
+ ### 🩹 Tema escuro
42
+
43
+ - O campo com foco era pintado de branco, com o texto claro por cima: sumia o
44
+ que se digitava.
45
+ - **Agendar** e **Voltar** ficavam em 3:1 no fundo escuro; agora passam de 8:1.
46
+ - O placeholder subiu para 4,6:1, e o contorno de foco — inclusive o do ícone,
47
+ que fica sobre o fundo do site — ficou claro no tema escuro.
48
+ - O container declara `color-scheme` conforme o tema, para campo, checkbox e o
49
+ X de fechar não herdarem o esquema do site.
50
+
51
+ ### 🧪 Testes
52
+
53
+ `tests/tema.test.mjs`: ícone branco com o dourado mantido no site escuro,
54
+ ícone azul no site claro com o sistema escuro, `color-scheme` e `<meta>`,
55
+ transparência, o limite de luminância, canvas bloqueado por proteção contra
56
+ fingerprint, `tema` fixo, `definirTema`, releitura na troca de classe e na
57
+ troca do sistema, e `destroy()` desligando a observação.
58
+
59
+ ---
60
+
61
+ ## [1.6.0] - 2026-09-29
62
+
63
+ ### 🧭 Avisa antes de levar a pessoa para o iLibras
64
+
65
+ Ao clicar em **Iniciar atendimento em Libras** ou em **Agendar uma conversa**,
66
+ o widget agora mostra, no lugar do formulário, o aviso de que a pessoa será
67
+ redirecionada para o iLibras — numa aba nova — e só segue quando ela confirma
68
+ em **Continuar para o iLibras**. **Voltar** (ou Esc) devolve o formulário com o
69
+ nome ainda preenchido.
70
+
71
+ O atendimento só é criado **depois** do "sim". Criar antes e perguntar depois
72
+ deixaria um atendimento órfão na fila de quem desistiu — com o alarme dos
73
+ intérpretes tocando para ninguém.
74
+
75
+ ### 🗂️ A aba nova abre dentro do clique
76
+
77
+ A aba do iLibras passa a ser aberta no próprio clique de confirmação, em
78
+ branco ("Abrindo o iLibras…"), e só recebe o endereço quando o atendimento
79
+ volta criado. Antes ela era aberta depois da resposta da API — e `window.open`
80
+ depois de um `await` já não conta como gesto do usuário, que é quando o
81
+ bloqueador de pop-up age. Se a criação falhar, a aba reservada é fechada e a
82
+ pessoa volta ao formulário, onde está a explicação do que houve. O plano B de
83
+ sempre (trocar a página da aba atual) continua valendo para quando nem a aba
84
+ do clique é permitida.
85
+
86
+ ### ⚙️ Nova opção: `confirmarRedirecionamento`
87
+
88
+ Ligada por padrão. Com `false`, o widget se comporta como antes da 1.6.0: o
89
+ botão cria o atendimento e abre o iLibras direto.
90
+
91
+ ### ♿ Acessibilidade
92
+
93
+ - O aviso é um `alertdialog` com título e texto ligados: ao receber o foco, o
94
+ leitor de tela lê os dois antes do botão.
95
+ - O foco vai para **Continuar** ao abrir o aviso e volta ao botão que a pessoa
96
+ tinha apertado ao sair dele.
97
+ - A região de status saiu de dentro do formulário: escondida junto com ele
98
+ durante o aviso, deixaria de anunciar o andamento do envio.
99
+ - O botão de contorno (agendar, e agora também **Voltar**) ganhou foco visível
100
+ próprio, inclusive em alto contraste — antes dependia do padrão do navegador.
101
+
102
+ ### 🧪 Testes
103
+
104
+ `tests/confirmacao.test.mjs` exercita o fluxo na build publicada, com rede e
105
+ janelas simuladas: nada enviado antes da confirmação, aba aberta antes da
106
+ requisição, aba fechada na falha, clique duplo criando um atendimento só.
107
+ Rodada contra a 1.5.3, a suíte reprova em 9 de 10 casos — o único que passa é
108
+ o da opção desligada, que é justamente o comportamento antigo.
109
+
110
+ ---
111
+
7
112
  ## [1.5.3] - 2026-09-18
8
113
 
9
114
  ### 🩹 Conserta o widget que sumiu da tela na 1.5.1
package/README.md CHANGED
@@ -18,7 +18,7 @@ Widget de acessibilidade em Libras: um botão flutuante que leva a pessoa surda
18
18
  - 🔒 **Envio seguro** - Dados enviados via POST para API
19
19
  - 🌐 **Universal** - Funciona em qualquer site ou sistema
20
20
  - ♿ **Acessível** - Suporte a leitores de tela e navegação por teclado
21
- - 🌙 **Tema escuro** - Adapta-se automaticamente às preferências do usuário
21
+ - 🌙 **Tema claro e escuro** - Acompanha o fundo do site, e o ícone fica branco no tema escuro
22
22
 
23
23
  ## 📦 Instalação
24
24
 
@@ -168,6 +168,8 @@ new ILibrasWidget({
168
168
  | `buttonText` | `string` | `'Iniciar atendimento em Libras'` | Texto do botão de envio |
169
169
  | `agendamento` | `boolean` | `true` | Mostra o segundo botão, que leva direto à escolha de data e horário em vez da fila ao vivo. Deixe `false` em site que só atende ao vivo |
170
170
  | `scheduleButtonText` | `string` | `'Agendar uma conversa'` | Texto do botão de agendamento |
171
+ | `confirmarRedirecionamento` | `boolean` | `true` | Avisa que a pessoa vai para o site do iLibras, numa aba nova, e só cria o atendimento depois que ela confirma. Com `false`, o botão cria o atendimento e abre o iLibras direto, como antes da v1.6.0 |
172
+ | `tema` | `string` | `'auto'` | `'auto'` acompanha o fundo do site — inclusive quando o site segue o modo escuro do sistema. `'claro'` ou `'escuro'` fixam o tema. Ver [Tema claro e escuro](#tema-claro-e-escuro) |
171
173
  | `token` | `string` | `''` | **OBRIGATÓRIO** — token de autenticação da API |
172
174
  | `zIndex` | `number` | `9999` | Z-index do widget |
173
175
  | `apiUrl` | `string` | endpoint de produção | Endpoint de cadastro. Troque apenas para apontar a um ambiente de homologação |
@@ -359,6 +361,38 @@ Você pode sobrescrever os estilos padrão:
359
361
  }
360
362
  ```
361
363
 
364
+ ### Tema claro e escuro
365
+
366
+ O widget lê a cor de fundo do site e escolhe o tema que aparece melhor sobre
367
+ ela: no escuro, o ícone fica branco (o dourado da logo continua) e o formulário
368
+ fica escuro. Ele acompanha a troca sem recarregar — o botão de tema do site, ou
369
+ o sistema mudando de modo quando o site segue o sistema.
370
+
371
+ > ✅ **Não precisa configurar nada.** Vem ligado por padrão (`tema: 'auto'`)
372
+ > desde a v1.7.0. Quem já tem o widget instalado só precisa atualizar: o
373
+ > pacote (`npm i ilibras-widget@latest`) ou o arquivo `ilibras-widget.js` — a
374
+ > configuração continua a mesma.
375
+
376
+ Para ver funcionando, abra `teste-modo-escuro.html` no navegador: ele troca o
377
+ fundo do "site" e o tema do widget, com o envio simulado.
378
+
379
+ Quem decide é o **fundo do site**, não a preferência do sistema: o ícone flutua
380
+ sobre a página, e num site claro aberto num computador em modo escuro um ícone
381
+ branco sumiria.
382
+
383
+ O fundo lido é o do `<html>` e o do `<body>`. Se o site pinta o fundo com
384
+ gradiente, imagem ou num elemento de dentro, fixe o tema:
385
+
386
+ ```javascript
387
+ new ILibrasWidget({ token: 'SEU_TOKEN', tema: 'escuro' });
388
+
389
+ // ou, num botão de tema que o widget não percebe sozinho:
390
+ widget.definirTema('escuro'); // 'claro', 'escuro' ou 'auto'
391
+ ```
392
+
393
+ No CSS, o tema escuro é a classe `.ilibras-widget-tema-escuro` no
394
+ `#ilibras-widget-container`.
395
+
362
396
  ## 🔧 API JavaScript
363
397
 
364
398
  ### Métodos Públicos
@@ -375,6 +409,9 @@ widget.closeWidget();
375
409
  // Alternar estado (abrir/fechar)
376
410
  widget.toggleWidget();
377
411
 
412
+ // Trocar o tema: 'claro', 'escuro' ou 'auto' (volta a seguir o site)
413
+ widget.definirTema('escuro');
414
+
378
415
  // Destruir o widget e remover do DOM
379
416
  widget.destroy();
380
417
  ```
@@ -605,6 +642,7 @@ Ilibras_widget/
605
642
  ├── ilibras-widget.js # GERADO: build de <script>, no endereço de sempre
606
643
  ├── index.d.ts # Tipos TypeScript
607
644
  ├── exemplo.html # Página de exemplo e demonstração
645
+ ├── teste-modo-escuro.html # Teste manual do tema claro e escuro
608
646
  └── README.md # Esta documentação
609
647
  ```
610
648