@softize/opus 27.0.0 → 28.0.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 (42) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/bin/lib/check.mjs +139 -30
  3. package/docs/adr/0015-action-size-follows-interaction-density.md +2 -0
  4. package/docs/adr/0017-ui-assumes-a-fixed-desktop-layout.md +14 -8
  5. package/docs/adr/0029-page-header-is-the-single-page-introduction.md +3 -1
  6. package/docs/adr/0057-doc-browser-permite-busca-no-chrome-do-consumidor.md +39 -5
  7. package/docs/adr/0060-surface-composition-separates-chrome-and-intro.md +161 -0
  8. package/docs/adr/README.md +2 -0
  9. package/package.json +1 -1
  10. package/registry/skills/build-opus-ui/SKILL.md +11 -11
  11. package/registry/skills/build-opus-ui/references/evaluations.md +10 -0
  12. package/registry/skills/build-opus-ui/references/ui-patterns.md +17 -15
  13. package/src/ui/components/patterns/list.tsx +62 -53
  14. package/src/ui/components/patterns/page.tsx +146 -38
  15. package/src/ui/components/patterns/presentation.tsx +44 -59
  16. package/src/ui/components/patterns/structural-header.tsx +42 -6
  17. package/src/ui/components/patterns/surface-anatomy.ts +52 -22
  18. package/src/ui/components/patterns/surface.tsx +2 -3
  19. package/src/ui/components/primitives/control.ts +2 -2
  20. package/src/ui/components/primitives/dialog.tsx +7 -2
  21. package/src/ui/components/primitives/drawer.tsx +7 -2
  22. package/src/ui/components/primitives/icon-picker.tsx +271 -34
  23. package/src/ui/components/primitives/pagination.tsx +5 -4
  24. package/src/ui/components/primitives/tabs.tsx +15 -2
  25. package/src/ui/components/primitives/toggle.tsx +1 -1
  26. package/src/ui/docs/DocBrowser.tsx +122 -12
  27. package/src/ui/docs/content/action-list.md +11 -2
  28. package/src/ui/docs/content/button.md +7 -7
  29. package/src/ui/docs/content/compositions.md +35 -23
  30. package/src/ui/docs/content/dialog.md +18 -6
  31. package/src/ui/docs/content/documentation-portal.md +40 -1
  32. package/src/ui/docs/content/drawer.md +17 -5
  33. package/src/ui/docs/content/icon-picker.md +37 -19
  34. package/src/ui/docs/content/input.md +1 -1
  35. package/src/ui/docs/content/page.md +169 -69
  36. package/src/ui/docs/content/pagination.md +7 -8
  37. package/src/ui/docs/content/presentation.md +4 -3
  38. package/src/ui/docs/content/surface.md +8 -5
  39. package/src/ui/docs/content/tabs.md +12 -4
  40. package/src/ui/docs/types.ts +2 -0
  41. package/src/ui/meta.ts +1 -1
  42. package/src/ui/react.tsx +9 -1
@@ -38,25 +38,30 @@ mostrar somente o ícone, declare `aria-label` para preservar seu nome acessíve
38
38
  </Tabs>
39
39
  ```
40
40
 
41
+ A barra e o painel ficam separados por `1rem`. O painel organiza seus blocos diretos com
42
+ o mesmo intervalo. Sem moldura, não há padding inferior: o hospedeiro fornece o recuo externo.
43
+ Não adicione margem ou padding para repetir esses intervalos.
44
+
41
45
  ## Emoldurar abas e painéis
42
46
 
43
47
  Use `framed` quando a navegação e seus painéis precisarem formar um único bloco. A propriedade
44
48
  reúne borda, raio e recorte no próprio `Tabs`, mas não aplica fundo: o bloco herda a
45
49
  superfície em que foi composto. Por isso, não envolva `Tabs` em um `Surface` somente para obter essa
46
- moldura.
50
+ moldura. O painel horizontal recebe `1rem` nas laterais e embaixo; o intervalo da barra
51
+ fornece o espaço superior. Na orientação vertical, a moldura recebe `1rem` ao redor da composição.
47
52
 
48
53
  ```tsx preview col
49
- <Tabs defaultValue="overview" framed className="gap-0">
54
+ <Tabs defaultValue="overview" framed>
50
55
  <TabsList>
51
56
  <TabsListItem value="overview">Visão geral</TabsListItem>
52
57
  <TabsListItem value="history">Histórico</TabsListItem>
53
58
  </TabsList>
54
- <TabsPanel value="overview" className="p-4">
59
+ <TabsPanel value="overview">
55
60
  <p className="text-sm text-muted-foreground">
56
61
  Resumo do workspace Empresa X.
57
62
  </p>
58
63
  </TabsPanel>
59
- <TabsPanel value="history" className="p-4">
64
+ <TabsPanel value="history">
60
65
  <p className="text-sm text-muted-foreground">
61
66
  Alterações recentes do workspace.
62
67
  </p>
@@ -196,3 +201,6 @@ do gatilho.
196
201
  | ------------ | -------- | ------ | ----------------------------------------------------------------------- |
197
202
  | `value` | `string` | | Identificador do painel, igual ao `value` do `TabsListItem` que o abre. |
198
203
  | `forceMount` | `true` | | Mantém o painel montado mesmo quando outra aba está ativa. |
204
+
205
+ Painéis com `forceMount` continuam montados quando inativos, mas ficam ocultos. Isso preserva
206
+ o estado de editores sem exibir simultaneamente o conteúdo de abas diferentes.
@@ -25,4 +25,6 @@ export interface DocGroup {
25
25
  export interface DocSection {
26
26
  label: string
27
27
  groups: DocGroup[]
28
+ /** False exclui a seção da leitura anterior/próxima, sem retirá-la da navegação ou busca. */
29
+ readingSequence?: boolean
28
30
  }
package/src/ui/meta.ts CHANGED
@@ -406,7 +406,7 @@ export const componentMeta = {
406
406
  name: "page",
407
407
  ancestry: "opus",
408
408
  whenToUse:
409
- "Estruture uma página com cabeçalho, estado e conteúdo na mesma anatomia. Page renderiza o `<main>` com um container centralizado de até 80rem (`max-w-7xl`); PageHeader reúne navegação contextual opcional, título e ações, enquanto PageBody recebe o conteúdo. PageShell pode fornecer navegação e ações conhecidas pela aplicação sem criar uma barra visual. Uma região interna pode fornecer o heading principal com `Surface level={1}`. PageActionsTarget fica restrito a workspaces imersivos. PageState substitui o header e o conteúdo durante carregamento, falha ou ausência, por isso informações indispensáveis entram no corpo, como Alert ou texto. Para uma falha parcial, mantenha o estado na seção com DataState; para uma região disponível para criação ou vínculo, use Empty.",
409
+ "Estruture uma página com cabeçalho, estado e conteúdo na mesma anatomia. Page renderiza o `<main>` com header e viewport em largura total e conteúdo centralizado de até 80rem; surfaceLayout escolhe sectioned (padrão) ou continuous, independente de layout flow/fill; PageHeader reúne navegação e ações da superfície; PageIntro abre PageBody com título e orientação. A composição compacta mantém o título no header, sem intro. PageShell pode fornecer navegação e ações conhecidas pela aplicação sem criar uma barra visual. Uma região interna pode fornecer o heading principal com `Surface level={1}`. PageActionsTarget fica restrito a workspaces imersivos. PageState substitui o header e o conteúdo durante carregamento, falha ou ausência, por isso informações indispensáveis entram no corpo, como Alert ou texto. Para uma falha parcial, mantenha o estado na seção com DataState; para uma região disponível para criação ou vínculo, use Empty.",
410
410
  },
411
411
  presentation: {
412
412
  name: "presentation",
package/src/ui/react.tsx CHANGED
@@ -88,9 +88,15 @@ export { Copyable } from "./components/primitives/copyable.tsx";
88
88
  export type { CopyableProps } from "./components/primitives/copyable.tsx";
89
89
  export {
90
90
  IconPicker,
91
+ IconCatalogProvider,
92
+ iconPickerSearch,
91
93
  iconPickerIcons,
92
94
  } from "./components/primitives/icon-picker.tsx";
93
- export type { IconPickerProps } from "./components/primitives/icon-picker.tsx";
95
+ export type {
96
+ IconPickerProps,
97
+ IconCatalog,
98
+ IconCatalogEntry,
99
+ } from "./components/primitives/icon-picker.tsx";
94
100
 
95
101
  export {
96
102
  Command,
@@ -509,6 +515,8 @@ export {
509
515
  PageShell,
510
516
  Page,
511
517
  PageHeader,
518
+ PageIntro,
519
+ PageIntroActions,
512
520
  PageNavigation,
513
521
  PageBack,
514
522
  PageTitle,