@softize/opus 18.0.0 → 18.0.1
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 +7 -0
- package/docs/adr/0010-page-header-owns-page-chrome.md +2 -2
- package/docs/adr/0015-action-size-follows-interaction-density.md +1 -1
- package/package.json +1 -1
- package/registry/skills/build-opus-ui/references/ui-patterns.md +1 -1
- package/src/ui/components/patterns/page.tsx +1 -1
- package/src/ui/components/patterns/presentation.tsx +1 -1
- package/src/ui/components/patterns/trigger.tsx +1 -1
- package/src/ui/docs/content/action-trigger.md +2 -2
- package/src/ui/docs/content/button.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,13 @@ 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
|
+
## 18.0.1 — 2026-09-13
|
|
11
|
+
|
|
12
|
+
Controles somente com ícone que pertencem ao chrome da superfície, como voltar e fechar, usam o
|
|
13
|
+
tamanho normal `icon`. O retorno cresce de 1.75rem para a área clicável padrão de 2.25rem; o close
|
|
14
|
+
permanece nessa medida e ambos mantêm o glifo compacto. `icon-sm` fica reservado às composições
|
|
15
|
+
densas, como paginação e toolbars.
|
|
16
|
+
|
|
10
17
|
## 18.0.0 — 2026-09-13
|
|
11
18
|
|
|
12
19
|
### Breaking
|
|
@@ -36,8 +36,8 @@ A variante altera somente a apresentação. Título, descrição, retorno e aç
|
|
|
36
36
|
semanticamente à mesma página. Um header sem conteúdo útil não é materializado para reservar
|
|
37
37
|
altura, e o header é ocultado durante os estados integrais do `PageState` — inversão da decisão
|
|
38
38
|
original da ADR 0004, argumentada no adendo dela. Para acompanhar o ritmo
|
|
39
|
-
|
|
40
|
-
`Button size="icon
|
|
39
|
+
da barra, ações com texto usam `Button size="default"` e ações somente com ícone usam
|
|
40
|
+
`Button size="icon"`.
|
|
41
41
|
|
|
42
42
|
## Consequências
|
|
43
43
|
|
|
@@ -24,7 +24,7 @@ risco.
|
|
|
24
24
|
- ações operacionais em toolbar, header de seção ou coleção densa usam `sm`;
|
|
25
25
|
- ações internas de linha, célula ou campo usam `xs` ou `icon-xs`;
|
|
26
26
|
- ações somente com ícone que pertencem ao chrome da superfície, como voltar e fechar, usam
|
|
27
|
-
`icon
|
|
27
|
+
`icon`;
|
|
28
28
|
- `lg` fica reservado a chamadas que deliberadamente precisam de uma área de toque maior, não a
|
|
29
29
|
uma ação primária comum.
|
|
30
30
|
|
package/package.json
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
O shell é o único responsável pela barra e projeta os slots de `PageHeader`; `PageIntro` permanece
|
|
28
28
|
no conteúdo.
|
|
29
29
|
Ações com texto na barra usam o tamanho `default`, como as ações de footer de Dialog e Drawer;
|
|
30
|
-
ações somente com ícone de chrome usam `icon
|
|
30
|
+
ações somente com ícone de chrome usam `icon`. O tamanho `sm` fica para ações operacionais em
|
|
31
31
|
toolbar, seção ou coleção densa, e `xs`/`icon-xs` para ações internas de linha ou célula. Contexto
|
|
32
32
|
e variante resolvem a hierarquia visual sem alterar essa medida. Em uma coleção, a ação de
|
|
33
33
|
criar usa botão textual `default`, sem ícone, no extremo oposto do `ContentHeader`. Não monte
|
|
@@ -639,7 +639,7 @@ export function PageBack({
|
|
|
639
639
|
typeof children === "string" ? children : "a página anterior";
|
|
640
640
|
const accessibleLabel = ariaLabel ?? `Voltar para ${destination}`;
|
|
641
641
|
const back = (
|
|
642
|
-
<Button asChild variant="ghost" size="icon
|
|
642
|
+
<Button asChild variant="ghost" size="icon">
|
|
643
643
|
<a
|
|
644
644
|
data-slot="page-back"
|
|
645
645
|
aria-label={accessibleLabel}
|
|
@@ -629,7 +629,7 @@ export function Presentation({
|
|
|
629
629
|
(invocation.surface === "page" || parentSurface !== "page");
|
|
630
630
|
const navigation = !canGoBack ? undefined : (
|
|
631
631
|
<Button
|
|
632
|
-
size="icon
|
|
632
|
+
size="icon"
|
|
633
633
|
variant="ghost"
|
|
634
634
|
disabled={surfaceBlocked}
|
|
635
635
|
aria-label="Voltar"
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - Confirmação opcional via <Dialog> (compacto, não fecha no clique fora) antes de disparar.
|
|
8
8
|
* - `icon` faz o botão virar icon-only com tooltip, no quadrado `icon-xs` (1.5rem) da escala:
|
|
9
9
|
* é a ação que mora NO item (linha, card). Uma composição que peça mais presença — a barra
|
|
10
|
-
* do `PageHeader`, por exemplo — declara `size="icon
|
|
10
|
+
* do `PageHeader`, por exemplo — declara `size="icon"`. Absorveu o antigo DeleteButton,
|
|
11
11
|
* que era este componente com uma lixeira.
|
|
12
12
|
* Emite `data-action="<action.name>"` na raiz (selector E2E).
|
|
13
13
|
*/
|
|
@@ -39,7 +39,7 @@ confirm: {
|
|
|
39
39
|
|
|
40
40
|
Com `icon`, o botão exibe somente o ícone no quadrado `icon-xs` da escala (1.5rem, a ação que mora
|
|
41
41
|
dentro de uma linha ou card) e usa `label`, ou `action.label`, no tooltip e no nome acessível. Uma
|
|
42
|
-
composição que peça mais presença, como a barra do `PageHeader`, declara `size="icon
|
|
42
|
+
composição que peça mais presença, como a barra do `PageHeader`, declara `size="icon"`. O clique
|
|
43
43
|
não aciona o item clicável ao redor. `itemLabel` identifica o registro na mensagem de confirmação.
|
|
44
44
|
|
|
45
45
|
```tsx
|
|
@@ -79,7 +79,7 @@ um atalho, um arrastar, um item de menu.
|
|
|
79
79
|
| `action` | `SimpleContract<TInput, TData>` | | A SimpleAction do Opus — label, messages e confirm vêm do contrato. |
|
|
80
80
|
| `input` | `TInput` | | O que a action recebe — geralmente { id }. |
|
|
81
81
|
| `label` | `string` | `action.label` | Sobrepõe o texto do botão. |
|
|
82
|
-
| `context / variant / size` | `do Button` | gatilho: `primary`/`solid`; `danger` quando a action é `destructive`; no modo ícone, `ghost` e `neutral` (ou `danger` se destrutiva) / `
|
|
82
|
+
| `context / variant / size` | `do Button` | gatilho: `primary`/`solid`; `danger` quando a action é `destructive`; no modo ícone, `ghost` e `neutral` (ou `danger` se destrutiva) / `icon-xs` | Visual do gatilho; `context` explícito vence. O botão de confirmar é sempre `solid`: `danger` quando a action é `destructive`, senão a prop `context` do gatilho (ou `primary`). |
|
|
83
83
|
| `confirm` | `{ title, description?, actionLabel?, cancelLabel? }` | | Confirmação via prop — sobrepõe o ConfirmSpec do contrato. |
|
|
84
84
|
| `onSuccess` | `(data: TData) => void` | | Pós-sucesso (cache já invalidado pelo action.invalidates). |
|
|
85
85
|
| `icon` | `React.ReactNode` | | Torna o botão icon-only: rótulo no tooltip e no `aria-label`, clique que não vaza para o item. |
|
|
@@ -35,7 +35,7 @@ há texto visível. O glifo dentro do controle acompanha o tamanho (0.875rem em
|
|
|
35
35
|
Escolha o tamanho pela região, não pela importância visual: `variant` e `context` resolvem a
|
|
36
36
|
hierarquia da ação. Headers de Page e footers de Dialog/Drawer usam `default`; ações operacionais
|
|
37
37
|
de seção, toolbar e coleção usam `sm`; ações dentro de linha ou célula usam `xs` ou `icon-xs`.
|
|
38
|
-
Controles de chrome, como voltar e fechar, usam `icon
|
|
38
|
+
Controles de chrome, como voltar e fechar, usam `icon`. Assim a mesma decisão mantém a mesma
|
|
39
39
|
altura mesmo quando uma superfície troca uma ação secundária por uma primária.
|
|
40
40
|
|
|
41
41
|
```tsx preview
|