@softize/opus 18.0.1 → 18.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.
Files changed (58) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/docs/adr/0016-productive-surfaces-use-compact-density.md +62 -0
  3. package/docs/adr/0017-ui-assumes-a-fixed-desktop-layout.md +54 -0
  4. package/docs/relative-unit-scale.md +9 -2
  5. package/package.json +1 -1
  6. package/registry/skills/build-opus-ui/references/evaluations.md +3 -1
  7. package/registry/skills/build-opus-ui/references/ui-patterns.md +9 -3
  8. package/src/core/runtime.ts +7 -1
  9. package/src/core/types.ts +12 -3
  10. package/src/mcp/index.ts +4 -1
  11. package/src/ui/components/patterns/action-list-dialog.tsx +2 -2
  12. package/src/ui/components/patterns/content-header.tsx +1 -1
  13. package/src/ui/components/patterns/form-dialog.tsx +7 -2
  14. package/src/ui/components/patterns/list.tsx +239 -47
  15. package/src/ui/components/patterns/presentation.tsx +7 -5
  16. package/src/ui/components/patterns/state-surface.tsx +2 -2
  17. package/src/ui/components/patterns/surface-header.tsx +4 -4
  18. package/src/ui/components/primitives/alert.tsx +2 -2
  19. package/src/ui/components/primitives/breadcrumb.tsx +1 -1
  20. package/src/ui/components/primitives/button-group.tsx +1 -1
  21. package/src/ui/components/primitives/button.tsx +3 -3
  22. package/src/ui/components/primitives/calendar.tsx +1 -1
  23. package/src/ui/components/primitives/close-button.tsx +40 -0
  24. package/src/ui/components/primitives/detail.tsx +66 -28
  25. package/src/ui/components/primitives/dialog.tsx +36 -21
  26. package/src/ui/components/primitives/drawer.tsx +26 -19
  27. package/src/ui/components/primitives/empty-value.tsx +3 -3
  28. package/src/ui/components/primitives/empty.tsx +1 -1
  29. package/src/ui/components/primitives/field.tsx +12 -12
  30. package/src/ui/components/primitives/icon-picker.tsx +1 -1
  31. package/src/ui/components/primitives/input-group.tsx +1 -1
  32. package/src/ui/components/primitives/input.tsx +2 -2
  33. package/src/ui/components/primitives/item.tsx +5 -5
  34. package/src/ui/components/primitives/pagination.tsx +4 -4
  35. package/src/ui/components/primitives/select.tsx +2 -2
  36. package/src/ui/components/primitives/table.tsx +26 -17
  37. package/src/ui/components/primitives/tabs.tsx +80 -23
  38. package/src/ui/components/primitives/textarea.tsx +1 -1
  39. package/src/ui/components/primitives/toggle-group.tsx +9 -2
  40. package/src/ui/docs/content/action-form.md +19 -0
  41. package/src/ui/docs/content/action-list-dialog.md +1 -1
  42. package/src/ui/docs/content/action-list.md +7 -1
  43. package/src/ui/docs/content/alert.md +2 -0
  44. package/src/ui/docs/content/button.md +2 -1
  45. package/src/ui/docs/content/customization.md +11 -1
  46. package/src/ui/docs/content/detail.md +9 -8
  47. package/src/ui/docs/content/dialog.md +12 -5
  48. package/src/ui/docs/content/drawer.md +6 -3
  49. package/src/ui/docs/content/empty-value.md +4 -4
  50. package/src/ui/docs/content/field.md +1 -1
  51. package/src/ui/docs/content/item.md +2 -0
  52. package/src/ui/docs/content/page.md +1 -1
  53. package/src/ui/docs/content/presentation.md +2 -2
  54. package/src/ui/docs/content/tabs.md +16 -6
  55. package/src/ui/docs/content/toast.md +2 -1
  56. package/src/ui/docs/content/tokens.md +45 -2
  57. package/src/ui/react.tsx +1 -0
  58. package/src/ui/theme.css +3 -0
@@ -53,7 +53,7 @@ família oferece sólido, foreground, superfície sutil, ênfase e borda. Use as
53
53
  ```tsx preview
54
54
  const CONTEXTS = ['neutral', 'primary', 'info', 'success', 'warning', 'danger']
55
55
  render(
56
- <div className="grid w-full gap-2 sm:grid-cols-2 lg:grid-cols-3">
56
+ <div className="grid w-full grid-cols-3 gap-2">
57
57
  {CONTEXTS.map((context) => (
58
58
  <div
59
59
  key={context}
@@ -79,7 +79,7 @@ render(
79
79
  ```tsx preview
80
80
  const LINES = [
81
81
  ['border', 'Bordas de contêineres (cards, tabelas, separadores).'],
82
- ['input', 'Borda de campos de formulário.'],
82
+ ['input', 'Borda e fundo sutil de campos de formulário.'],
83
83
  ['ring', 'O anel de foco (focus-visible).'],
84
84
  ]
85
85
  render(
@@ -135,6 +135,49 @@ render(
135
135
  > aplicação continuam responsáveis pela densidade. Uma aplicação pode ajustar `font-size` em
136
136
  > `html`; texto, espaçamento, radius, foco e elevação acompanham a mesma decisão.
137
137
 
138
+ ## Tipografia produtiva
139
+
140
+ Interfaces operacionais precisam acomodar controles, dados e ações sem transformar o corpo comum
141
+ em texto secundário. Use `text-sm` (`0.875rem`) como corpo produtivo: descrições curtas, valores,
142
+ rótulos e texto de componentes. Reserve `text-base` (`1rem`) para leitura mais confortável, como
143
+ prosa longa, conteúdo editorial ou uma ênfase que dependa de tamanho.
144
+
145
+ O tema não reduz o texto do `body`. Componentes e regiões produtivas declaram `text-sm`
146
+ explicitamente em uma raiz controlada, enquanto o texto geral do documento permanece em `1rem`.
147
+ Assim, escolher o corpo da interface não recalibra tipografia, espaçamento ou dimensões globais.
148
+
149
+ `base` nomeia o degrau de `1rem` da escala técnica; não significa que todo produto precisa usá-lo
150
+ como corpo predominante. Preserve a fonte raiz usual do documento para que `1rem` continue sendo a
151
+ referência do navegador e para que espaçamentos e controles em `rem` não mudem quando a intenção for
152
+ somente escolher um papel tipográfico.
153
+
154
+ A herança continua fazendo parte da composição. Declare `text-sm` na raiz de um componente ou de
155
+ uma região produtiva e omita a classe apenas nos filhos que herdam dessa raiz controlada. Um
156
+ elemento também declara `text-sm` quando precisa restaurar o corpo produtivo dentro de um contexto
157
+ com outro tamanho. Não crie um alias como `text-body`: ele esconderia o mesmo degrau sem eliminar
158
+ a necessidade de declarar o papel tipográfico.
159
+
160
+ ```tsx preview
161
+ render(
162
+ <div className="space-y-3 text-sm">
163
+ <p>Corpo produtivo para a interface.</p>
164
+ <p className="text-base leading-relaxed">
165
+ Corpo ampliado para um trecho que pede leitura mais confortável.
166
+ </p>
167
+ <div className="text-xs text-muted-foreground">
168
+ Metadado compacto.
169
+ <p className="mt-1 text-sm text-foreground">
170
+ Corpo produtivo restaurado dentro do contexto compacto.
171
+ </p>
172
+ </div>
173
+ </div>,
174
+ )
175
+ ```
176
+
177
+ Alterar `font-size` em `html` permanece válido quando a aplicação quer recalibrar **toda** a
178
+ interface. Essa decisão escala tipografia, espaços, controles, radius e elevação em conjunto; não é
179
+ o mecanismo para fazer `text-sm` se chamar `text-base`.
180
+
138
181
  ## Radius
139
182
 
140
183
  > A escala mapeada no `@theme inline` preserva o sentido pré-v4 dos utilitários `rounded-*`
package/src/ui/react.tsx CHANGED
@@ -388,6 +388,7 @@ export {
388
388
  export type {
389
389
  ActionFilterBarProps,
390
390
  ActionFilterState,
391
+ AdvancedFiltersLayout,
391
392
  ActionListProps,
392
393
  ActionListColumn,
393
394
  ActionListState,
package/src/ui/theme.css CHANGED
@@ -333,6 +333,9 @@
333
333
  * do Sonner, independentemente da ordem em que a biblioteca injeta seus estilos. */
334
334
  .opus-toast {
335
335
  gap: 0.75rem;
336
+ padding: 0.75rem;
337
+ font-size: 0.875rem;
338
+ line-height: 1.25rem;
336
339
  }
337
340
 
338
341
  .opus-toast .opus-toast-icon {