@softize/opus 25.0.0 → 25.1.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
@@ -7,6 +7,50 @@ Depois de qualquer bump, rode os gates (`typecheck` · `test` · `opus check` ·
7
7
  `opus copy --check` · `base copy check` · `manifest:check`) — eles apontam o que a
8
8
  mudança cobra do seu código.
9
9
 
10
+ ## 25.1.0 — 2026-10-03
11
+
12
+ `FloatingLayer`, de `@softize/opus/ui/react`, é uma camada que continua utilizável por cima de
13
+ qualquer `Dialog` ou `Drawer` modal, como o botão e o painel de um assistente (ADR 0052). Quem está
14
+ preenchendo um formulário em um modal pode usar a camada sem fechar o modal nem perder o que digitou.
15
+ Os filhos vão para um hospedeiro fixo no `body`, `div[data-slot="floating-layer"]`, e cada um se
16
+ posiciona contra a janela. Com um `Dialog` ou `Drawer` aberto:
17
+
18
+ - clicar na camada não fecha o modal, mesmo que o elemento clicado suma no próprio clique, e o véu
19
+ continua fechando, respeitando `closeDisabled`;
20
+ - o foco pode ir para a camada por clique ou por código sem ser puxado de volta, e o Tab passa do
21
+ último elemento do modal para a camada e dela de volta ao primeiro; quando o elemento focado da
22
+ camada some, o foco volta ao campo do modal em que a pessoa estava, e um modal que fecha com a
23
+ pessoa na camada não leva o foco ao gatilho dele;
24
+ - o Esc age onde a pessoa está: na camada, nenhum modal fecha e `onEscapeKeyDown` é chamado uma vez
25
+ por tecla; no modal, o modal fecha;
26
+ - a camada rola e continua visível ao leitor de tela, enquanto a página atrás segue travada e
27
+ escondida.
28
+
29
+ O hospedeiro publica o `Dialog` ou `Drawer` do topo em `data-modal` (`none`, `dialog` ou `drawer`) e o
30
+ lado do Drawer em `data-modal-side`, para o consumidor tirar o painel de cima do modal. O Opus não
31
+ desloca nem redimensiona modais. Os patterns construídos sobre `Dialog` e `Drawer`, como
32
+ `ActionFormDialog`, `ActionListDialog`, `Presentation` e `CommandDialog`, convivem com a camada sem
33
+ mudança.
34
+
35
+ Outras mudanças:
36
+
37
+ - Popover, Menu, Tooltip, Select, Dialog e Drawer abertos de dentro de uma `FloatingLayer` vão para o
38
+ hospedeiro dela, e não para o `body`; fora da camada, nada muda;
39
+ - `Dialog mode="alert"`, que também serve às confirmações do `DialogHost`, passa à faixa `z-70`,
40
+ acima da camada (`z-60`) e dos demais modais (`z-50`), e cobre a camada até a resposta, inclusive
41
+ enquanto um `Dialog` aberto de dentro dele estiver aberto. Popover, Menu e Tooltip do Opus abertos
42
+ de dentro de um alerta acompanham a faixa dele. Dois efeitos para conferir no seu código: um
43
+ elemento próprio com `z-index` entre 51 e 69, que antes ficava acima do alerta, agora fica abaixo
44
+ dele; e uma sobreposição de outra biblioteca com `z-50`, aberta de dentro de um alerta, fica
45
+ abaixo do véu dele. Durante a animação de saída, o alerta deixa de receber clique. A escala está
46
+ em `docs/stacking-scale.md`;
47
+ - `DialogPortal` e `MenuPortal` sem `container` usam o hospedeiro da camada quando abertos de
48
+ dentro dela;
49
+ - a `ref` de `DialogContent` e `DrawerContent` continua recebendo a limpeza das callback refs do
50
+ React 19, agora composta com a ref interna da camada;
51
+ - o pacote ganha testes em navegador real (Chromium, pelo modo navegador do Vitest com Playwright)
52
+ para o foco da camada: `pnpm test:browser` roda à parte do `pnpm test` e entra no gate de release.
53
+
10
54
  ## 25.0.0 — 2026-10-02
11
55
 
12
56
  A exclusão lógica passa a declarar quando o registro excluído sai de vez (ADR 0051). `softDelete`