@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 +44 -0
- package/docs/adr/0052-floating-layer-coexists-with-modal-surfaces.md +668 -0
- package/docs/releasing.md +8 -2
- package/docs/stacking-scale.md +53 -0
- package/package.json +6 -1
- package/src/ui/components/primitives/dialog.tsx +285 -26
- package/src/ui/components/primitives/drawer.tsx +104 -13
- package/src/ui/components/primitives/floating-layer.tsx +79 -0
- package/src/ui/components/primitives/menu.tsx +17 -2
- package/src/ui/components/primitives/popover.tsx +6 -1
- package/src/ui/components/primitives/tooltip.tsx +6 -1
- package/src/ui/docs/content/dialog.md +3 -0
- package/src/ui/docs/content/drawer.md +3 -0
- package/src/ui/docs/content/floating-layer.md +178 -0
- package/src/ui/docs/registry.tsx +6 -0
- package/src/ui/lib/dismiss-on-iframe.ts +4 -1
- package/src/ui/lib/modal-layers.ts +547 -0
- package/src/ui/meta.ts +6 -0
- package/src/ui/react.tsx +4 -0
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`
|