@softize/opus 12.9.0 → 12.11.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.
Files changed (82) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/bin/lib/check.mjs +1103 -310
  3. package/bin/lib/copy.mjs +74 -6
  4. package/docs/adr/0003-dictionary-presentation-is-declared.md +3 -0
  5. package/docs/adr/0004-page-content-state-is-composed.md +65 -0
  6. package/docs/adr/0005-structural-surfaces-share-an-explicit-anatomy.md +97 -0
  7. package/docs/adr/0006-semantic-context-precedes-visual-variant.md +182 -0
  8. package/docs/code-style.md +6 -2
  9. package/package.json +1 -1
  10. package/registry/instructions/opus.md +5 -0
  11. package/registry/skills/build-opus-ui/SKILL.md +27 -16
  12. package/registry/skills/build-opus-ui/references/evaluations.md +16 -5
  13. package/registry/skills/build-opus-ui/references/ui-patterns.md +38 -15
  14. package/registry/skills/model-opus-dictionary/SKILL.md +4 -2
  15. package/registry/skills/model-opus-dictionary/references/evaluations.md +4 -3
  16. package/registry/templates/app/src/App.tsx +1 -1
  17. package/src/core/dictionary.ts +52 -14
  18. package/src/core/index.ts +10 -0
  19. package/src/core/ui-context.ts +29 -0
  20. package/src/schema/drivers/zod.ts +34 -19
  21. package/src/ui/components/patterns/action-form-card.tsx +18 -12
  22. package/src/ui/components/patterns/confirm.tsx +26 -3
  23. package/src/ui/components/patterns/content-header.tsx +335 -61
  24. package/src/ui/components/patterns/data-state.tsx +23 -10
  25. package/src/ui/components/patterns/form.tsx +1 -1
  26. package/src/ui/components/patterns/list.tsx +1096 -777
  27. package/src/ui/components/patterns/page-state.tsx +115 -0
  28. package/src/ui/components/patterns/page.tsx +231 -41
  29. package/src/ui/components/patterns/sidebar.tsx +354 -80
  30. package/src/ui/components/patterns/trigger.tsx +13 -9
  31. package/src/ui/components/patterns/view.tsx +7 -11
  32. package/src/ui/components/primitives/alert-dialog.tsx +7 -5
  33. package/src/ui/components/primitives/alert.tsx +298 -80
  34. package/src/ui/components/primitives/ask.tsx +2 -1
  35. package/src/ui/components/primitives/badge.tsx +91 -30
  36. package/src/ui/components/primitives/button.tsx +99 -60
  37. package/src/ui/components/primitives/calendar.tsx +39 -39
  38. package/src/ui/components/primitives/card.tsx +96 -23
  39. package/src/ui/components/primitives/detail.tsx +2 -2
  40. package/src/ui/components/primitives/dictionary-value.tsx +9 -14
  41. package/src/ui/components/primitives/dot.tsx +74 -21
  42. package/src/ui/components/primitives/drawer.tsx +33 -20
  43. package/src/ui/components/primitives/field.tsx +4 -4
  44. package/src/ui/components/primitives/item.tsx +137 -81
  45. package/src/ui/components/primitives/menu.tsx +11 -3
  46. package/src/ui/components/primitives/metric-card.tsx +133 -0
  47. package/src/ui/components/primitives/table.tsx +2 -2
  48. package/src/ui/components/primitives/tooltip.tsx +1 -1
  49. package/src/ui/docs/DocBrowser.tsx +3 -3
  50. package/src/ui/docs/changelog.tsx +1 -1
  51. package/src/ui/docs/content/action-form-card.md +1 -1
  52. package/src/ui/docs/content/alert-dialog.md +8 -8
  53. package/src/ui/docs/content/alert.md +54 -23
  54. package/src/ui/docs/content/badge.md +18 -19
  55. package/src/ui/docs/content/button.md +12 -9
  56. package/src/ui/docs/content/card.md +5 -5
  57. package/src/ui/docs/content/content.md +44 -0
  58. package/src/ui/docs/content/customization.md +2 -2
  59. package/src/ui/docs/content/detail.md +5 -2
  60. package/src/ui/docs/content/dialog.md +2 -2
  61. package/src/ui/docs/content/dictionary-value.md +11 -10
  62. package/src/ui/docs/content/dot.md +7 -7
  63. package/src/ui/docs/content/drawer.md +6 -3
  64. package/src/ui/docs/content/field.md +1 -1
  65. package/src/ui/docs/content/input-group.md +3 -2
  66. package/src/ui/docs/content/item.md +47 -21
  67. package/src/ui/docs/content/menu.md +5 -4
  68. package/src/ui/docs/content/metric-card.md +41 -0
  69. package/src/ui/docs/content/page-state.md +45 -0
  70. package/src/ui/docs/content/page.md +48 -10
  71. package/src/ui/docs/content/semantic-context.md +63 -0
  72. package/src/ui/docs/content/sidebar.md +4 -4
  73. package/src/ui/docs/content/skeleton.md +2 -2
  74. package/src/ui/docs/content/table.md +3 -3
  75. package/src/ui/docs/content/tokens.md +28 -0
  76. package/src/ui/docs/content/tooltip.md +15 -1
  77. package/src/ui/docs/doc-client.tsx +2 -2
  78. package/src/ui/docs/registry.tsx +596 -228
  79. package/src/ui/lib/semantic-context.ts +30 -0
  80. package/src/ui/meta.ts +292 -270
  81. package/src/ui/react.tsx +378 -111
  82. package/src/ui/theme.css +66 -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
+ ## 12.11.0 — 2026-09-04
11
+
12
+ A UI passa a separar intenção semântica de tratamento visual. `context` aceita `neutral`,
13
+ `primary`, `info`, `success`, `warning` e `danger`; `variant` fica restrita a `solid`, `subtle`,
14
+ `outline`, `ghost` e `link`. `tone` e as variantes semânticas anteriores continuam aceitos para
15
+ migração, mas novos componentes e dicionários devem declarar `context`. Actions destrutivas
16
+ continuam usando `destructive`, projetado visualmente como `danger`.
17
+ Durante a migração, use o alias antigo sozinho: combiná-lo com `context` é ambíguo e agora falha
18
+ explicitamente em vez de descartar uma das intenções.
19
+
20
+ Páginas, conteúdos e estados assíncronos ganham anatomia compartilhada. `PageState` cobre vazio e
21
+ erro no enquadramento da página; `Content` organiza título, descrição e ações; `MetricCard` evita
22
+ cards de indicador montados manualmente. `Page`, sidebars, alerts, itens, cards, drawers e tabelas
23
+ expõem slots estruturais consistentes, documentados e verificados por `opus check`.
24
+ As composições públicas anteriores de `ContentHeader`, `Alert` e `ItemHeader` permanecem
25
+ funcionais como adaptadores durante a série 12, enquanto o gate orienta código novo à anatomia.
26
+
27
+ Controles de tamanho normal passam a compartilhar a mesma altura relativa, e `Detail` alinha os
28
+ rótulos sem depender do comprimento de cada atributo. A documentação do catálogo inclui os novos
29
+ padrões, tokens e exemplos, e o verificador aceita slots válidos envolvidos por condicionais JSX.
30
+
31
+ **Migração:** troque intenção semântica declarada em `variant` ou `tone` por `context`, mantendo em
32
+ `variant` apenas a aparência. Em dicionários de status ou estágio, substitua `tone` por `context`.
33
+ Use `PageState`, `Content` e os slots estruturais em vez de reproduzir vazio, erro, cabeçalho ou
34
+ ações com composição local. O gate informa os locais que ainda usam a forma antiga ou uma anatomia
35
+ incompleta.
36
+
37
+ ## 12.10.0 — 2026-09-03
38
+
39
+ `Alert` ganha a variante aditiva `warning` e passa a oferecer realce tonal nativo ao redor do
40
+ ícone. O layout com ícone reserva uma coluna estável; sem ícone, o aviso continua em bloco e não
41
+ cria espaço vazio. `style` permite ajustar as medidas internas quando uma composição exigir.
42
+
43
+ `FieldLabel` adota a mesma hierarquia tipográfica de `DetailField`, com ritmo vertical menor, e o
44
+ estado marcado de uma escolha em cartão deixa de vazar para rótulos comuns com checkbox. Tooltips
45
+ passam a ter largura máxima compartilhada e quebra de linha natural; `ActionForm` apenas consome
46
+ esse padrão, sem decidir a largura do primitivo.
47
+
48
+ `opus copy` passa a inventariar estaticamente `label`, `description` e `doc` declarados em
49
+ `t.dict`, inclusive a documentação do dicionário. Metadados livres não viram copy por inferência;
50
+ declarações dinâmicas continuam falhando no gate em vez de executar código consumidor. Em runtime,
51
+ o dicionário mantém um snapshot imutável das entradas, então alterações posteriores no objeto
52
+ original, em `metaFor` ou na metadata lógica não mudam a copy já declarada.
53
+
10
54
  ## 12.9.0 — 2026-09-03
11
55
 
12
56
  `Chat` aceita `empty`, um nó React para o estado sem mensagens: o app compõe o vazio com os