@softize/opus 16.1.0 → 17.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.
- package/CHANGELOG.md +41 -0
- package/bin/lib/check.mjs +9 -13
- package/bin/lib/copy.mjs +29 -4
- package/docs/adr/0005-structural-surfaces-share-an-explicit-anatomy.md +6 -3
- package/docs/adr/0009-page-title-does-not-carry-a-counter.md +5 -2
- package/docs/adr/0011-page-shell-coordinates-persistent-page-chrome.md +12 -14
- package/docs/adr/0012-modal-header-only-names-the-surface.md +8 -4
- package/docs/adr/0013-presentation-is-a-portable-action-oriented-artifact.md +20 -11
- package/docs/adr/0014-structural-headers-do-not-carry-description.md +35 -0
- package/docs/adr/0015-action-size-follows-interaction-density.md +64 -0
- package/package.json +2 -2
- package/registry/skills/build-opus-ui/references/evaluations.md +1 -1
- package/registry/skills/build-opus-ui/references/ui-patterns.md +19 -18
- package/registry/templates/app/package.json +1 -1
- package/src/core/presentation.ts +142 -13
- package/src/ui/components/patterns/form.tsx +35 -10
- package/src/ui/components/patterns/page.tsx +93 -48
- package/src/ui/components/patterns/presentation.tsx +489 -329
- package/src/ui/components/patterns/surface-header.tsx +4 -3
- package/src/ui/components/patterns/trigger.tsx +8 -1
- package/src/ui/components/patterns/view.tsx +2 -2
- package/src/ui/components/primitives/command.tsx +82 -42
- package/src/ui/components/primitives/dialog.tsx +180 -97
- package/src/ui/components/primitives/drawer.tsx +63 -22
- package/src/ui/docs/content/button.md +8 -2
- package/src/ui/docs/content/command.md +3 -1
- package/src/ui/docs/content/content.md +1 -1
- package/src/ui/docs/content/dialog.md +9 -9
- package/src/ui/docs/content/drawer.md +4 -4
- package/src/ui/docs/content/page.md +16 -31
- package/src/ui/docs/content/presentation.md +73 -80
- package/src/ui/meta.ts +2 -2
- package/src/ui/react.tsx +1 -8
|
@@ -2,17 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
Use `Page` para manter título, ações, estado e conteúdo na mesma anatomia. Sozinha, ela apresenta
|
|
4
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
|
|
6
|
-
`PageIntro` dentro do conteúdo.
|
|
5
|
+
com `PageShell`: o shell fornece a navegação e a página projeta título e ações na barra.
|
|
7
6
|
|
|
8
7
|
`PageHeader` mantém navegação, título e ações na mesma linha. O container é centralizado e ocupa a
|
|
9
8
|
largura disponível até `80rem` (`max-w-7xl`). Use `className` somente quando a composição pedir
|
|
10
9
|
outro teto ou largura total.
|
|
11
10
|
|
|
12
11
|
A forma curta é o padrão para páginas comuns. Fora de `PageShell`, ela cria `PageHeader` e
|
|
13
|
-
`PageBody`. Dentro dele, cria `
|
|
14
|
-
explícita permite
|
|
15
|
-
|
|
12
|
+
`PageBody`. Dentro dele, cria `PageHeader` e `PageBody`, projetando o header na barra. A forma
|
|
13
|
+
explícita permite acrescentar um `PageIntro` opcional no conteúdo sem duplicar o título estrutural.
|
|
14
|
+
Contadores e outros indicadores pertencem ao
|
|
16
15
|
conteúdo que os explica.
|
|
17
16
|
|
|
18
17
|
`PageShell` não inclui sidebar nem inventa breadcrumb. Ele ocupa o painel principal já delimitado e
|
|
@@ -28,7 +27,6 @@ render(
|
|
|
28
27
|
<div className="w-full overflow-hidden rounded-lg border border-border">
|
|
29
28
|
<Page
|
|
30
29
|
title="Workspaces"
|
|
31
|
-
description="Ambientes compartilhados pela equipe."
|
|
32
30
|
actions={
|
|
33
31
|
<Button>
|
|
34
32
|
<Plus /> Novo workspace
|
|
@@ -54,7 +52,6 @@ controle aparece antes do título como ícone com nome acessível e tooltip deri
|
|
|
54
52
|
<PageHeader>
|
|
55
53
|
<PageBack href="/customers">Clientes</PageBack>
|
|
56
54
|
<PageTitle>Qualidade da base</PageTitle>
|
|
57
|
-
<PageDescription>Revise conflitos e canais de contato.</PageDescription>
|
|
58
55
|
</PageHeader>
|
|
59
56
|
<PageBody>Conteúdo da análise.</PageBody>
|
|
60
57
|
</Page>
|
|
@@ -67,8 +64,8 @@ posição introdutória sem transformar a trilha em ação.
|
|
|
67
64
|
## Barra persistente do shell
|
|
68
65
|
|
|
69
66
|
Use `PageShell` quando o shell conhece o breadcrumb e a rota conhece título e ações. Não crie um
|
|
70
|
-
`PaneHeader` paralelo nem esconda slots de `Page` com CSS. O Opus projeta `
|
|
71
|
-
|
|
67
|
+
`PaneHeader` paralelo nem esconda slots de `Page` com CSS. O Opus projeta `PageTitle` e
|
|
68
|
+
`PageActions` na barra.
|
|
72
69
|
|
|
73
70
|
```tsx preview col
|
|
74
71
|
<PageShell
|
|
@@ -85,7 +82,7 @@ transforma a introdução da forma curta em `PageIntro`.
|
|
|
85
82
|
<Page
|
|
86
83
|
title="Clientes"
|
|
87
84
|
actions={
|
|
88
|
-
<Button
|
|
85
|
+
<Button>
|
|
89
86
|
<Plus /> Novo cliente
|
|
90
87
|
</Button>
|
|
91
88
|
}
|
|
@@ -95,21 +92,20 @@ transforma a introdução da forma curta em `PageIntro`.
|
|
|
95
92
|
</PageShell>
|
|
96
93
|
```
|
|
97
94
|
|
|
98
|
-
A barra permanece visível durante `PageState`;
|
|
95
|
+
A barra permanece visível durante `PageState`; uma introdução opcional desaparece. Se uma ação não
|
|
99
96
|
puder ser executada sem o conteúdo, a própria rota deve omiti-la naquele estado.
|
|
100
97
|
|
|
101
|
-
Na composição explícita dentro do shell, use `
|
|
98
|
+
Na composição explícita dentro do shell, use `PageHeader` e `PageBody`:
|
|
102
99
|
|
|
103
100
|
```tsx preview col
|
|
104
101
|
<PageShell navigation={<Breadcrumb>...</Breadcrumb>}>
|
|
105
102
|
<Page>
|
|
106
|
-
<
|
|
103
|
+
<PageHeader>
|
|
107
104
|
<PageTitle>Clientes</PageTitle>
|
|
108
|
-
<PageDescription>Cadastros disponíveis para atendimento.</PageDescription>
|
|
109
105
|
<PageActions>
|
|
110
|
-
<Button
|
|
106
|
+
<Button>Novo cliente</Button>
|
|
111
107
|
</PageActions>
|
|
112
|
-
</
|
|
108
|
+
</PageHeader>
|
|
113
109
|
<PageBody>Conteúdo da listagem.</PageBody>
|
|
114
110
|
</Page>
|
|
115
111
|
</PageShell>
|
|
@@ -125,7 +121,6 @@ render(
|
|
|
125
121
|
<Page>
|
|
126
122
|
<PageHeader>
|
|
127
123
|
<PageTitle>Workspaces</PageTitle>
|
|
128
|
-
<PageDescription>Ambientes compartilhados pela equipe.</PageDescription>
|
|
129
124
|
<PageActions>
|
|
130
125
|
<Button>
|
|
131
126
|
<Plus /> Novo workspace
|
|
@@ -141,9 +136,8 @@ render(
|
|
|
141
136
|
);
|
|
142
137
|
```
|
|
143
138
|
|
|
144
|
-
Use `PageIntro`
|
|
145
|
-
|
|
146
|
-
fora dele, as duas formas são aceitas porque cumprem papéis diferentes.
|
|
139
|
+
Use `PageIntro` somente quando o conteúdo precisar de uma introdução adicional. Ele não substitui
|
|
140
|
+
o `PageHeader`, não repete o título da página e pode ser omitido.
|
|
147
141
|
|
|
148
142
|
## Estados integrais
|
|
149
143
|
|
|
@@ -195,7 +189,6 @@ estado na própria seção com `DataState`, `ActionView`, `ActionList` ou `Alert
|
|
|
195
189
|
| Propriedade | Tipo | Padrão | Descrição |
|
|
196
190
|
| ------------- | ----------- | ----------- | ----------------------------------------------------------------------------------------------- |
|
|
197
191
|
| `title` | `ReactNode` | | O h1 da página. |
|
|
198
|
-
| `description` | `ReactNode` | | Linha de contexto sob o título (ex.: "N no total · X ativos"). |
|
|
199
192
|
| `actions` | `ReactNode` | | Ações contextuais no extremo oposto do cabeçalho; em telas estreitas, ficam abaixo do contexto. |
|
|
200
193
|
| `className` | `string` | `max-w-7xl` | Classes do container para substituir o teto padrão de `80rem`. |
|
|
201
194
|
| `children` | `ReactNode` | | O body da página — espaçamento e diagramação são seus. |
|
|
@@ -215,7 +208,7 @@ estado na própria seção com `DataState`, `ActionView`, `ActionList` ou `Alert
|
|
|
215
208
|
|
|
216
209
|
| Propriedade | Tipo | Descrição |
|
|
217
210
|
| ----------- | ----------------------------- | ------------------------------------------------------------- |
|
|
218
|
-
| `children` | `ReactNode` |
|
|
211
|
+
| `children` | `ReactNode` | Conteúdo introdutório opcional do body. |
|
|
219
212
|
| `className` | `string` | Classes adicionais da região introdutória. |
|
|
220
213
|
| demais | Atributos de `HTMLDivElement` | Atributos nativos repassados à região introdutória. |
|
|
221
214
|
|
|
@@ -224,7 +217,7 @@ estado na própria seção com `DataState`, `ActionView`, `ActionList` ou `Alert
|
|
|
224
217
|
| Propriedade | Tipo | Descrição |
|
|
225
218
|
| ----------- | ----------- | ----------------------------------------------------------------------------------- |
|
|
226
219
|
| `className` | `string` | Classes adicionais da região externa do cabeçalho. |
|
|
227
|
-
| `children` | `ReactNode` | Um `PageTitle` e, opcionalmente, `PageBack` ou `PageNavigation
|
|
220
|
+
| `children` | `ReactNode` | Um `PageTitle` e, opcionalmente, `PageBack` ou `PageNavigation` e ações. |
|
|
228
221
|
|
|
229
222
|
## Propriedades de PageBack
|
|
230
223
|
|
|
@@ -252,14 +245,6 @@ estado na própria seção com `DataState`, `ActionView`, `ActionList` ou `Alert
|
|
|
252
245
|
| `className` | `string` | Classes adicionais do título. |
|
|
253
246
|
| demais | Atributos de `HTMLHeadingElement` | Atributos nativos repassados ao heading. |
|
|
254
247
|
|
|
255
|
-
## Propriedades de PageDescription
|
|
256
|
-
|
|
257
|
-
| Propriedade | Tipo | Descrição |
|
|
258
|
-
| ----------- | ----------------------------------- | ------------------------------------------ |
|
|
259
|
-
| `children` | `ReactNode` | Contexto apresentado abaixo do título. |
|
|
260
|
-
| `className` | `string` | Classes adicionais da descrição. |
|
|
261
|
-
| demais | Atributos de `HTMLParagraphElement` | Atributos nativos repassados ao parágrafo. |
|
|
262
|
-
|
|
263
248
|
## Propriedades de PageActions
|
|
264
249
|
|
|
265
250
|
| Propriedade | Tipo | Descrição |
|
|
@@ -1,25 +1,55 @@
|
|
|
1
|
-
`Presentation` preserva a identidade de um recurso quando
|
|
1
|
+
`Presentation` preserva a identidade de um recurso quando o contexto pede uma página, um dialog ou
|
|
2
2
|
um drawer. A superfície decide quanto espaço ocupar; o recurso continua com a mesma navegação,
|
|
3
3
|
cabeçalho, body e rodapé.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
Dialog e Drawer mantêm no cabeçalho a ordem horizontal de navegação ou retorno, título e ações.
|
|
6
|
+
O retorno aparece em uma surface modal somente
|
|
7
|
+
quando ela foi aberta sobre outro Dialog ou Drawer; a Page ao fundo sustenta o modal, mas não cria
|
|
8
|
+
uma etapa de navegação. Formulários modais encerram o footer com `Cancelar` e a ação principal.
|
|
9
|
+
Em Page hospedada por `PageShell`, a barra concentra navegação e ações, enquanto o título abre o
|
|
10
|
+
conteúdo em um `PageIntro`. Assim o breadcrumb não disputa espaço nem repete o título na mesma linha.
|
|
11
|
+
Ações textuais de header e footer usam o tamanho `default`, pois pertencem à decisão da superfície;
|
|
12
|
+
o tamanho `sm` permanece reservado às operações densas de toolbar, seção e coleção. Contexto e
|
|
13
|
+
variante continuam definindo hierarquia visual sem alterar essa medida.
|
|
9
14
|
|
|
10
15
|
Use esse padrão quando uma lista puder abrir um detalhe lateral, quando a mesma edição precisar
|
|
11
16
|
funcionar em modal e em rota própria ou quando um fluxo começar compacto e crescer sem ganhar uma
|
|
12
17
|
segunda implementação.
|
|
13
18
|
|
|
14
|
-
Dentro de `PageShell`, a superfície `page` usa a anatomia real da aplicação:
|
|
15
|
-
barra,
|
|
19
|
+
Dentro de `PageShell`, a superfície `page` usa a anatomia real da aplicação: a Presentation projeta
|
|
20
|
+
navigation e actions no header da barra, apresenta o título em `PageIntro` e compõe `PageBody` e,
|
|
21
|
+
quando necessário, `PageFooter`.
|
|
16
22
|
Fora do shell, ela materializa o `PageHeader` completo para exemplos e superfícies independentes.
|
|
17
23
|
Não envolva a Presentation em um card para simular a página; valide proporção, rolagem e ações no
|
|
18
24
|
shell que efetivamente hospeda a rota.
|
|
19
25
|
|
|
20
26
|
```tsx live
|
|
27
|
+
const workspaceUpdate = defineContract({
|
|
28
|
+
name: "workspace.update",
|
|
29
|
+
kind: "form",
|
|
30
|
+
label: "Salvar workspace",
|
|
31
|
+
input: z.object({ name: z.string() }),
|
|
32
|
+
output: z.object({ id: z.string() }),
|
|
33
|
+
fields: { name: { label: "Nome" } },
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const workspacePresentation = definePresentation({
|
|
37
|
+
schemaVersion: 1,
|
|
38
|
+
id: "workspace.update",
|
|
39
|
+
title: "Workspace",
|
|
40
|
+
body: { action: workspaceUpdate.name },
|
|
41
|
+
});
|
|
42
|
+
|
|
21
43
|
function Example() {
|
|
22
|
-
const [
|
|
44
|
+
const [open, setOpen] = React.useState(true);
|
|
45
|
+
const [invocation, setInvocation] = React.useState(() =>
|
|
46
|
+
definePresentationInvocation({
|
|
47
|
+
schemaVersion: 1,
|
|
48
|
+
presentationId: workspacePresentation.id,
|
|
49
|
+
surface: "page",
|
|
50
|
+
input: {},
|
|
51
|
+
}),
|
|
52
|
+
);
|
|
23
53
|
|
|
24
54
|
return (
|
|
25
55
|
<div className="space-y-4">
|
|
@@ -28,8 +58,11 @@ function Example() {
|
|
|
28
58
|
<Button
|
|
29
59
|
key={value}
|
|
30
60
|
size="sm"
|
|
31
|
-
variant={surface === value ? "solid" : "outline"}
|
|
32
|
-
onClick={() =>
|
|
61
|
+
variant={invocation.surface === value ? "solid" : "outline"}
|
|
62
|
+
onClick={() => {
|
|
63
|
+
setInvocation({ ...invocation, surface: value });
|
|
64
|
+
setOpen(true);
|
|
65
|
+
}}
|
|
33
66
|
>
|
|
34
67
|
{value}
|
|
35
68
|
</Button>
|
|
@@ -37,25 +70,17 @@ function Example() {
|
|
|
37
70
|
</ButtonGroup>
|
|
38
71
|
|
|
39
72
|
<Presentation
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
</>
|
|
52
|
-
}
|
|
53
|
-
>
|
|
54
|
-
<Content title="Dados gerais">
|
|
55
|
-
O renderer injeta aqui o formulário, a lista ou a visualização ligada
|
|
56
|
-
à action.
|
|
57
|
-
</Content>
|
|
58
|
-
</Presentation>
|
|
73
|
+
definition={workspacePresentation}
|
|
74
|
+
definitions={[workspacePresentation]}
|
|
75
|
+
actions={{ [workspaceUpdate.name]: workspaceUpdate }}
|
|
76
|
+
invocation={invocation}
|
|
77
|
+
open={invocation.surface === "page" || open}
|
|
78
|
+
onOpenChange={setOpen}
|
|
79
|
+
onInvocationChange={(next) => {
|
|
80
|
+
if (next) setInvocation(next);
|
|
81
|
+
else setOpen(false);
|
|
82
|
+
}}
|
|
83
|
+
/>
|
|
59
84
|
</div>
|
|
60
85
|
);
|
|
61
86
|
}
|
|
@@ -66,7 +91,9 @@ render(<Example />);
|
|
|
66
91
|
## A declaração
|
|
67
92
|
|
|
68
93
|
`definePresentation` cria o artefato serializável. O body recebe uma action `form`, `list` ou
|
|
69
|
-
`view`; uma action `simple` aparece como comando no cabeçalho ou no rodapé.
|
|
94
|
+
`view`; uma action `simple` aparece como comando no cabeçalho ou no rodapé. Em formulário,
|
|
95
|
+
`body.submitLabel` nomeia a ação conforme o resultado esperado, como “Criar departamento” ou
|
|
96
|
+
“Salvar alterações”. Actions que precisam de
|
|
70
97
|
interface abrem outra Presentation. Bindings fornecem valores vindos da rota, do registro, da
|
|
71
98
|
seleção, da sessão ou do resultado anterior sem guardar callbacks no JSON.
|
|
72
99
|
|
|
@@ -121,35 +148,25 @@ refresh, deep link ou histórico.
|
|
|
121
148
|
|
|
122
149
|
`PresentationInspector` renderiza um botão somente com ícone. Ao acioná-lo, reúne definição,
|
|
123
150
|
invocação, bindings resolvidos e diagnósticos em um único JSON e oferece a cópia do conteúdo. Chaves
|
|
124
|
-
sensíveis são mascaradas. Use a ferramenta em
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
Use `floating` quando o inspetor precisar ficar disponível sem ocupar o cabeçalho. O componente
|
|
129
|
-
aplica tamanho, forma, borda e elevação de FAB; `className` define a âncora na superfície consumidora.
|
|
130
|
-
Reserve espaço para outros controles flutuantes do shell em vez de sobrepô-los.
|
|
131
|
-
|
|
132
|
-
Quando várias Presentations puderem estar montadas ao mesmo tempo, envolva o shell com
|
|
133
|
-
`PresentationDevtoolsProvider`, anuncie cada recurso com `usePresentationRegistration` e renderize
|
|
134
|
-
um único `PresentationDevtools`. O launcher abre a lista ativa e só cria o snapshot mascarado depois
|
|
135
|
-
que uma Presentation é escolhida. Monte os três exclusivamente em desenvolvimento: o inventário
|
|
136
|
-
inclui definição, invocação, bindings resolvidos e diagnósticos que não pertencem à experiência de
|
|
137
|
-
produção.
|
|
151
|
+
sensíveis são mascaradas. Use a ferramenta em uma bancada de desenvolvimento ou na Lens; ela não
|
|
152
|
+
faz parte da navegação do recurso para a pessoa usuária. Na aplicação final, publique as definições
|
|
153
|
+
no manifest e concentre a inspeção na Lens em vez de criar um launcher flutuante no shell.
|
|
138
154
|
|
|
139
155
|
## Propriedades de Presentation
|
|
140
156
|
|
|
141
|
-
| Propriedade
|
|
142
|
-
|
|
|
143
|
-
| `
|
|
144
|
-
| `
|
|
145
|
-
| `
|
|
146
|
-
| `
|
|
147
|
-
| `
|
|
148
|
-
| `
|
|
149
|
-
| `
|
|
150
|
-
| `
|
|
151
|
-
| `
|
|
152
|
-
| `
|
|
157
|
+
| Propriedade | Tipo | Padrão | Descrição |
|
|
158
|
+
| -------------------- | ----------------------------------------- | ------ | ----------------------------------------------------------- |
|
|
159
|
+
| `definition` | `PresentationDefinition` | | Artefato estático que descreve o recurso. |
|
|
160
|
+
| `definitions` | `PresentationDefinition[]` | | Registry alcançável por navegação, abertura e retorno. |
|
|
161
|
+
| `actions` | `PresentationActionRegistry` | | Contratos compartilháveis referenciados pelo artefato. |
|
|
162
|
+
| `invocation` | `PresentationInvocation` | | Surface, input e pilha da exibição atual. |
|
|
163
|
+
| `bindingContext` | `PresentationBindingContext` | | Rota, item, seleção, sessão e resultado disponíveis. |
|
|
164
|
+
| `onInvocationChange` | `(next: PresentationInvocation \| null) => void` | | Recebe navegação, retorno e fechamento. |
|
|
165
|
+
| `onRefresh` | `(action: string \| null) => void` | | Recebe invalidações declaradas após sucesso. |
|
|
166
|
+
| `open` | `boolean` | `true` | Estado controlado de Dialog ou Drawer. |
|
|
167
|
+
| `onOpenChange` | `(open: boolean) => void` | | Notifica abertura e fechamento da superfície modal. |
|
|
168
|
+
| `className` | `string` | | Classes adicionais da superfície. |
|
|
169
|
+
| `bodyClassName` | `string` | | Classes adicionais do body, aplicadas uma única vez. |
|
|
153
170
|
|
|
154
171
|
## Propriedades de PresentationInspector
|
|
155
172
|
|
|
@@ -161,28 +178,4 @@ produção.
|
|
|
161
178
|
| `diagnostics` | `PresentationDiagnostic[]` | | Diagnósticos da definição ou execução. |
|
|
162
179
|
| `triggerLabel` | `string` | `Ver JSON da Presentation` | Nome acessível e tooltip do botão. |
|
|
163
180
|
| `title` | `string` | `JSON da Presentation` | Título do dialog de inspeção. |
|
|
164
|
-
| `floating` | `boolean` | `false` | Apresenta o gatilho com aparência de FAB. |
|
|
165
181
|
| `className` | `string` | | Classes adicionais do gatilho. |
|
|
166
|
-
|
|
167
|
-
## Propriedades de PresentationDevtoolsProvider
|
|
168
|
-
|
|
169
|
-
| Propriedade | Tipo | Descrição |
|
|
170
|
-
| ----------- | ----------- | ------------------------------------------ |
|
|
171
|
-
| `children` | `ReactNode` | Árvore que registra Presentations ativas. |
|
|
172
|
-
|
|
173
|
-
## Parâmetros de usePresentationRegistration
|
|
174
|
-
|
|
175
|
-
| Propriedade | Tipo | Padrão | Descrição |
|
|
176
|
-
| ------------- | ---------------------------- | ------ | ------------------------------------------------------ |
|
|
177
|
-
| `definition` | `PresentationDefinition` | | Definição estática da Presentation. |
|
|
178
|
-
| `invocation` | `unknown` | | Estado vivo serializável, quando existir. |
|
|
179
|
-
| `resolved` | `unknown` | | Bindings resolvidos pelo renderer. |
|
|
180
|
-
| `diagnostics` | `PresentationDiagnostic[]` | | Diagnósticos da definição ou execução. |
|
|
181
|
-
| `enabled` | `boolean` | `true` | Mantém ou retira o recurso do inventário ativo. |
|
|
182
|
-
|
|
183
|
-
## Propriedades de PresentationDevtools
|
|
184
|
-
|
|
185
|
-
| Propriedade | Tipo | Padrão | Descrição |
|
|
186
|
-
| -------------- | -------- | -------------------------------- | ---------------------------------------------- |
|
|
187
|
-
| `triggerLabel` | `string` | `Inspecionar Presentations ativas` | Nome acessível e tooltip do launcher. |
|
|
188
|
-
| `className` | `string` | | Classes adicionais; o shell define a posição. |
|
package/src/ui/meta.ts
CHANGED
|
@@ -400,13 +400,13 @@ 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
|
|
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 e ações. Quando shell e rota conhecem partes diferentes da página, PageShell mantém a barra de 3rem e recebe navegação, título e ações da Page. PageIntro é um bloco opcional de introdução no conteúdo. Fora do shell, a forma explícita usa PageHeader para o cabeçalho completo. PageActionsTarget fica restrito a workspaces imersivos sem PageShell. PageState oculta somente PageIntro; informações importantes entram no corpo como Alert ou texto. Para uma região disponível à criação ou vínculo, use Empty.",
|
|
404
404
|
},
|
|
405
405
|
presentation: {
|
|
406
406
|
name: "presentation",
|
|
407
407
|
ancestry: "opus",
|
|
408
408
|
whenToUse:
|
|
409
|
-
"Descreva um recurso que precisa manter a mesma anatomia ao aparecer como Page, Dialog ou Drawer. Presentation organiza navegação, título, ações de cabeçalho, body e ações de rodapé sem redefinir o conteúdo para cada superfície. A definição persistente liga esses slots a actions Opus; a invocação carrega o estado JSON da execução. PresentationInspector
|
|
409
|
+
"Descreva um recurso que precisa manter a mesma anatomia ao aparecer como Page, Dialog ou Drawer. Presentation organiza navegação, título, ações de cabeçalho, body e ações de rodapé sem redefinir o conteúdo para cada superfície. A definição persistente liga esses slots a actions Opus; a invocação carrega o estado JSON da execução. PresentationInspector abre um snapshot isolado, enquanto a Lens apresenta o inventário estático projetado no manifest.",
|
|
410
410
|
},
|
|
411
411
|
router: {
|
|
412
412
|
name: "router",
|
package/src/ui/react.tsx
CHANGED
|
@@ -420,20 +420,14 @@ export type { DataStateProps } from "./components/patterns/data-state.tsx";
|
|
|
420
420
|
|
|
421
421
|
export {
|
|
422
422
|
Presentation,
|
|
423
|
-
PresentationDevtools,
|
|
424
|
-
PresentationDevtoolsProvider,
|
|
425
423
|
PresentationInspector,
|
|
426
|
-
usePresentationRegistration,
|
|
427
424
|
} from "./components/patterns/presentation.tsx";
|
|
428
425
|
export type {
|
|
429
426
|
PresentationProps,
|
|
430
|
-
PresentationDevtoolsProps,
|
|
431
|
-
PresentationDevtoolsProviderProps,
|
|
432
427
|
PresentationInspectorProps,
|
|
433
|
-
PresentationRegistration,
|
|
434
428
|
} from "./components/patterns/presentation.tsx";
|
|
435
429
|
|
|
436
|
-
// Esqueleto de página do back-office (main + container + header título
|
|
430
|
+
// Esqueleto de página do back-office (main + container + header com navegação, título e ações).
|
|
437
431
|
export {
|
|
438
432
|
PageShell,
|
|
439
433
|
Page,
|
|
@@ -442,7 +436,6 @@ export {
|
|
|
442
436
|
PageNavigation,
|
|
443
437
|
PageBack,
|
|
444
438
|
PageTitle,
|
|
445
|
-
PageDescription,
|
|
446
439
|
PageActions,
|
|
447
440
|
PageActionsTarget,
|
|
448
441
|
PageBody,
|