@softize/opus 15.0.1 → 15.2.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.
@@ -1,22 +1,24 @@
1
1
  ## Esqueleto de página
2
2
 
3
- Use `Page` para manter navegação contextual, título, ações e conteúdo na mesma anatomia. O
4
- `PageHeader` padrão acompanha o conteúdo dentro do container; `variant="bar"` transforma o mesmo
5
- cabeçalho em uma faixa compacta no topo. Não monte um chrome paralelo para repetir essas regiões.
3
+ Use `Page` para manter título, ações, estado e conteúdo na mesma anatomia. Sozinha, ela apresenta
4
+ `PageHeader` dentro do container. Quando a aplicação possui uma barra persistente, envolva a rota
5
+ com `PageShell`: o shell fornece a navegação, a página fornece as ações e o título passa a
6
+ `PageIntro` dentro do conteúdo.
6
7
 
7
8
  Em larguras amplas, as ações ficam no extremo oposto e acompanham a base do título e da descrição;
8
9
  em larguras estreitas, passam para uma linha abaixo. O container é centralizado e ocupa a largura
9
10
  disponível até `80rem` (`max-w-7xl`). Use `className` somente quando a composição pedir outro teto
10
11
  ou largura total.
11
12
 
12
- A forma curta é o padrão para páginas comuns. Ela cria internamente `PageHeader` e `PageBody`;
13
- portanto, não produz uma estrutura visual ou semântica diferente da forma explícita. O cabeçalho é a
14
- mesma base estrutural de `Content`, mas reconhece somente título, descrição e ações. Contadores e
15
- outros indicadores pertencem ao conteúdo que os explica.
13
+ A forma curta é o padrão para páginas comuns. Fora de `PageShell`, ela cria `PageHeader` e
14
+ `PageBody`. Dentro dele, cria `PageIntro` e `PageBody`, enquanto envia as ações para a barra. A forma
15
+ explícita permite escolher a região adequada: `PageHeader` reúne navegação e contexto; `PageIntro`
16
+ mais presença ao título dentro do conteúdo. Contadores e outros indicadores pertencem ao
17
+ conteúdo que os explica.
16
18
 
17
- `Page` também pode ocupar o painel principal de um shell com sidebar. Tabs ficam reservados a
18
- recortes da mesma superfície. Canvas e outros workspaces espaciais imersivos podem usar um shell
19
- próprio quando o cabeçalho reduzir a área útil ou duplicar controles persistentes.
19
+ `PageShell` não inclui sidebar nem inventa breadcrumb. Ele ocupa o painel principal delimitado e
20
+ mantém a barra com `3rem`, mesmo quando o conteúdo muda de estado. Tabs ficam reservados a recortes
21
+ da mesma superfície. Canvas e outros workspaces espaciais imersivos podem usar um shell próprio.
20
22
 
21
23
  Estados integrais de carregamento, falha ou ausência são compostos no body com `PageState`,
22
24
  detalhado abaixo. `Page` não recebe flags de dados: uma página pode agregar fontes independentes e
@@ -63,13 +65,63 @@ Não combine `PageBack` com breadcrumb. Use o retorno para um único pai conheci
63
65
  mais de um ancestral relevante, envolva o `Breadcrumb` em `PageNavigation`; ele ocupa a mesma
64
66
  posição introdutória sem transformar a trilha em ação.
65
67
 
66
- ## Cabeçalho em barra
68
+ ## Barra persistente do shell
67
69
 
68
- Use `variant="bar"` quando título, retorno e ações precisarem formar uma faixa compacta e persistente
69
- no topo da página. `Page` estende a borda por toda a largura e mantém o conteúdo da barra alinhado ao
70
- mesmo teto do body. Nesse modo, `PageBack` vira icon-only e recebe tooltip e nome acessível “Voltar
71
- para {destino}”. Mantenha também as ações compactas: use `sm` em botões com texto e `icon-sm` em
72
- botões que exibem somente um ícone.
70
+ Use `PageShell` quando o shell conhece o breadcrumb e a rota conhece título e ações. Não crie um
71
+ `PaneHeader` paralelo nem esconda slots de `Page` com CSS. O Opus projeta `PageActions` na barra e
72
+ transforma a introdução da forma curta em `PageIntro`.
73
+
74
+ ```tsx preview col
75
+ <PageShell
76
+ navigation={
77
+ <Breadcrumb>
78
+ <BreadcrumbList>
79
+ <BreadcrumbItem>Vendas</BreadcrumbItem>
80
+ <BreadcrumbSeparator />
81
+ <BreadcrumbPage>Clientes</BreadcrumbPage>
82
+ </BreadcrumbList>
83
+ </Breadcrumb>
84
+ }
85
+ >
86
+ <Page
87
+ title="Clientes"
88
+ actions={
89
+ <Button size="sm">
90
+ <Plus /> Novo cliente
91
+ </Button>
92
+ }
93
+ >
94
+ Conteúdo da listagem.
95
+ </Page>
96
+ </PageShell>
97
+ ```
98
+
99
+ A barra permanece visível durante `PageState`; somente a introdução desaparece. Se uma ação não
100
+ puder ser executada sem o conteúdo, a própria rota deve omiti-la naquele estado.
101
+
102
+ Na composição explícita dentro do shell, use `PageIntro` e `PageBody`:
103
+
104
+ ```tsx preview col
105
+ <PageShell navigation={<Breadcrumb>...</Breadcrumb>}>
106
+ <Page>
107
+ <PageIntro>
108
+ <PageTitle>Clientes</PageTitle>
109
+ <PageDescription>Cadastros disponíveis para atendimento.</PageDescription>
110
+ <PageActions>
111
+ <Button size="sm">Novo cliente</Button>
112
+ </PageActions>
113
+ </PageIntro>
114
+ <PageBody>Conteúdo da listagem.</PageBody>
115
+ </Page>
116
+ </PageShell>
117
+ ```
118
+
119
+ ## Cabeçalho em barra da própria Page
120
+
121
+ Use `PageHeader variant="bar"` quando uma página autocontida conhecer título, retorno e ações. Essa
122
+ forma continua útil fora de um shell persistente. `PageBack` vira icon-only e recebe tooltip e nome
123
+ acessível “Voltar para {destino}”. Use `sm` em botões com texto e `icon-sm` em botões somente com
124
+ ícone.
73
125
 
74
126
  ```tsx preview col
75
127
  <Page className="max-w-none">
@@ -86,11 +138,8 @@ botões que exibem somente um ícone.
86
138
  </Page>
87
139
  ```
88
140
 
89
- Uma página comum não ganha a barra apenas por estar dentro de um shell. Escolha essa variante quando
90
- a faixa acrescentar contexto ou ações persistentes; sem isso, mantenha o header padrão.
91
-
92
- `PageActionsTarget` continua disponível para um workspace imersivo que já possua um chrome próprio.
93
- Ele projeta somente `PageActions` no elemento informado; não cria uma segunda região de cabeçalho.
141
+ Não aninhe essa variante em `PageShell`, que possui a barra. `PageActionsTarget` continua
142
+ disponível para um workspace imersivo que tenha chrome próprio e não use `PageShell`.
94
143
 
95
144
  ## Composição explícita
96
145
 
@@ -118,16 +167,21 @@ render(
118
167
  );
119
168
  ```
120
169
 
170
+ Use `PageIntro` no lugar de `PageHeader` quando a página precisar apenas de uma introdução no
171
+ conteúdo, sem navegação própria. Dentro de `PageShell`, essa é a única composição explícita válida;
172
+ fora dele, as duas formas são aceitas porque cumprem papéis diferentes.
173
+
121
174
  ## Estados integrais
122
175
 
123
176
  Use `PageState` quando carregamento, falha ou ausência substituírem todo o conteúdo principal. Na
124
177
  forma curta ele pode ser escrito como filho direto de `Page`, que cria o `PageBody`; na forma
125
178
  explícita, coloque-o sozinho dentro de `PageBody`. Enquanto `status` for `loading`, `error` ou
126
- `empty`, `Page` oculta o cabeçalho inteiro — incluindo o `PageBack` — e o estado ocupa a altura
127
- disponível. Uma subpágina que dependa desse retorno oferece a saída pelo `action` do próprio
179
+ `empty`, uma `Page` isolada oculta o cabeçalho inteiro — incluindo `PageBack` — e o estado ocupa a
180
+ altura disponível. Dentro de `PageShell`, a barra persistente permanece e somente `PageIntro` é
181
+ ocultado. Uma subpágina isolada que dependa do retorno oferece a saída pelo `action` do próprio
128
182
  `PageState`. O título do estado assume o heading principal. Esse registro também funciona quando um
129
- componente intermediário decide qual `PageState` renderizar. Em `ready`, o cabeçalho e o conteúdo
130
- voltam à composição normal.
183
+ componente intermediário decide qual `PageState` renderizar. Em `ready`, o cabeçalho ou a introdução
184
+ e o conteúdo voltam à composição normal.
131
185
 
132
186
  ```tsx preview col
133
187
  <Page title="Relatório">
@@ -172,6 +226,25 @@ estado na própria seção com `DataState`, `ActionView`, `ActionList` ou `Alert
172
226
  | `className` | `string` | `max-w-7xl` | Classes do container para substituir o teto padrão de `80rem`. |
173
227
  | `children` | `ReactNode` | | O body da página — espaçamento e diagramação são seus. |
174
228
 
229
+ ## Propriedades de PageShell
230
+
231
+ | Propriedade | Tipo | Descrição |
232
+ | ----------------- | ----------------------------- | ---------------------------------------------------------------------- |
233
+ | `navigation` | `ReactNode` | Navegação contextual da barra, normalmente um `Breadcrumb`. |
234
+ | `actions` | `ReactNode` | Ações conhecidas pelo shell, antes das ações declaradas pela `Page`. |
235
+ | `children` | `ReactNode` | Rota que renderiza uma `Page` descendente. |
236
+ | `headerClassName` | `string` | Classes adicionais do container interno da barra. |
237
+ | `className` | `string` | Classes adicionais da moldura. |
238
+ | demais | Atributos de `HTMLDivElement` | Atributos nativos repassados à moldura. |
239
+
240
+ ## Propriedades de PageIntro
241
+
242
+ | Propriedade | Tipo | Descrição |
243
+ | ----------- | ----------------------------- | ---------------------------------------------------------------- |
244
+ | `children` | `ReactNode` | Um `PageTitle` e, opcionalmente, descrição e ações da página. |
245
+ | `className` | `string` | Classes adicionais da região introdutória. |
246
+ | demais | Atributos de `HTMLDivElement` | Atributos nativos repassados à região introdutória. |
247
+
175
248
  ## Propriedades de PageHeader
176
249
 
177
250
  | Propriedade | Tipo | Padrão | Descrição |
@@ -202,7 +275,7 @@ estado na própria seção com `DataState`, `ActionView`, `ActionList` ou `Alert
202
275
 
203
276
  | Propriedade | Tipo | Descrição |
204
277
  | ----------- | --------------------------------- | ------------------------------------------------------ |
205
- | `children` | `ReactNode` | Título principal `h1`; compacto na variante `bar`. |
278
+ | `children` | `ReactNode` | Título principal `h1`; compacto na barra e ampliado em `PageIntro`. |
206
279
  | `className` | `string` | Classes adicionais do título. |
207
280
  | demais | Atributos de `HTMLHeadingElement` | Atributos nativos repassados ao heading. |
208
281
 
package/src/ui/meta.ts CHANGED
@@ -400,7 +400,7 @@ export const componentMeta = {
400
400
  name: "page",
401
401
  ancestry: "opus",
402
402
  whenToUse:
403
- "O esqueleto de página do back-office: <main> + container centralizado com teto padrão de 80rem (`max-w-7xl`). O shorthand cobre título, descrição e ações; a forma explícita acrescenta PageBack para retorno simples ou PageNavigation para uma trilha e permite `PageHeader variant=\"bar\"` quando a mesma anatomia precisar virar uma faixa compacta. No header padrão, PageBack fica acima do título; na barra, vira icon-only com tooltip. PageActionsTarget fica restrito a workspaces imersivos com chrome próprio. Quando todo o body estiver carregando, falhar ou estiver vazio, use PageState: ele oculta o header e ocupa a área disponível, centralizado e sem moldura. Para uma região disponível à criação ou vínculo, use Empty.",
403
+ "O esqueleto de página do back-office: <main> + container centralizado com teto padrão de 80rem (`max-w-7xl`). O shorthand cobre título, descrição e ações. Quando shell e rota conhecem partes diferentes da página, PageShell mantém a barra de 3rem, recebe a navegação e projeta as ações da Page; título e descrição formam PageIntro no conteúdo. Fora dele, a forma explícita escolhe PageHeader para o cabeçalho completo ou PageIntro para uma introdução sem navegação; `PageHeader variant=\"bar\"` atende uma página autocontida. PageActionsTarget fica restrito a workspaces imersivos sem PageShell. PageState oculta o header da Page isolada ou somente PageIntro dentro de PageShell. Para uma região disponível à criação ou vínculo, use Empty.",
404
404
  },
405
405
  router: {
406
406
  name: "router",
package/src/ui/react.tsx CHANGED
@@ -33,6 +33,7 @@ export type {
33
33
  ChatMessage,
34
34
  ChatArtifact,
35
35
  ChatTranscriptItem,
36
+ ChatTranscriptMessage,
36
37
  } from "./components/primitives/chat.tsx";
37
38
  export { Ask } from "./components/primitives/ask.tsx";
38
39
  export type { AskProps } from "./components/primitives/ask.tsx";
@@ -421,8 +422,10 @@ export type { DataStateProps } from "./components/patterns/data-state.tsx";
421
422
 
422
423
  // Esqueleto de página do back-office (main + container + header título/descrição/ação).
423
424
  export {
425
+ PageShell,
424
426
  Page,
425
427
  PageHeader,
428
+ PageIntro,
426
429
  PageNavigation,
427
430
  PageBack,
428
431
  PageTitle,
@@ -433,6 +436,7 @@ export {
433
436
  } from "./components/patterns/page.tsx";
434
437
  export type {
435
438
  PageProps,
439
+ PageShellProps,
436
440
  PageBackProps,
437
441
  PageHeaderProps,
438
442
  PageHeaderVariant,