@softize/opus 21.0.0 → 22.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.
- package/CHANGELOG.md +57 -0
- package/bin/lib/check.mjs +31 -28
- package/docs/adr/0004-page-content-state-is-composed.md +3 -2
- package/docs/adr/0005-structural-surfaces-share-an-explicit-anatomy.md +3 -0
- package/docs/adr/0006-semantic-context-precedes-visual-variant.md +23 -14
- package/docs/adr/0011-page-shell-coordinates-persistent-page-chrome.md +5 -0
- package/docs/adr/0013-presentation-is-a-portable-action-oriented-artifact.md +7 -4
- package/docs/adr/0016-list-collection-header-belongs-to-content.md +13 -8
- package/docs/adr/0023-surfaces-share-one-anatomy-and-two-layouts.md +27 -26
- package/docs/adr/0025-content-frame-treatment-does-not-change-semantics.md +1 -0
- package/docs/adr/0029-page-header-is-the-single-page-introduction.md +71 -0
- package/docs/adr/0030-framed-content-can-use-sectioned-anatomy.md +89 -0
- package/docs/adr/0031-detail-dividers-own-the-tabular-label-treatment.md +61 -0
- package/docs/adr/0032-tab-baseline-respects-the-container-inset.md +59 -0
- package/docs/adr/0033-drawer-uses-an-inset-structural-frame.md +72 -0
- package/docs/adr/0034-tabs-can-own-a-frame-without-owning-a-surface.md +60 -0
- package/docs/adr/0035-button-group-separates-frame-relationship-and-distribution.md +63 -0
- package/docs/adr/0036-tabs-declares-trigger-distribution.md +58 -0
- package/docs/ownership-vs-shadcn-lock.md +5 -0
- package/docs/radius-scale.md +5 -2
- package/package.json +1 -1
- package/registry/skills/build-opus-ui/SKILL.md +9 -6
- package/registry/skills/build-opus-ui/references/evaluations.md +5 -2
- package/registry/skills/build-opus-ui/references/ui-patterns.md +14 -16
- package/src/queue/drivers/bullmq.ts +15 -2
- package/src/ui/components/patterns/content-header.tsx +51 -13
- package/src/ui/components/patterns/list.tsx +51 -33
- package/src/ui/components/patterns/page.tsx +139 -251
- package/src/ui/components/patterns/presentation.tsx +2 -6
- package/src/ui/components/primitives/button-group.tsx +80 -8
- package/src/ui/components/primitives/button.tsx +85 -60
- package/src/ui/components/primitives/detail.tsx +63 -57
- package/src/ui/components/primitives/dialog.tsx +8 -11
- package/src/ui/components/primitives/drawer.tsx +16 -12
- package/src/ui/components/primitives/tabs.tsx +123 -54
- package/src/ui/docs/content/button.md +55 -29
- package/src/ui/docs/content/content.md +61 -36
- package/src/ui/docs/content/detail.md +28 -19
- package/src/ui/docs/content/drawer.md +53 -47
- package/src/ui/docs/content/input.md +51 -35
- package/src/ui/docs/content/page.md +84 -95
- package/src/ui/docs/content/pane.md +83 -63
- package/src/ui/docs/content/presentation.md +20 -20
- package/src/ui/docs/content/tabs.md +107 -36
- package/src/ui/meta.ts +5 -5
- package/src/ui/react.tsx +0 -1
|
@@ -89,8 +89,8 @@ fundo sustenta o modal, mas não é uma etapa para onde voltar. Formulários mod
|
|
|
89
89
|
rodapé pelo conteúdo, com `Cancelar` em `ghost` e a ação principal sólida.
|
|
90
90
|
|
|
91
91
|
Dentro de [`PageShell`](/ui/page), a superfície `page` usa a anatomia real da aplicação. O
|
|
92
|
-
`PageHeader`
|
|
93
|
-
|
|
92
|
+
`PageHeader` reúne a navegação contextual, o título e as ações globais; o corpo vai para `PageBody`,
|
|
93
|
+
com `PageFooter` quando há ações de rodapé.
|
|
94
94
|
|
|
95
95
|
Uma Presentation de listagem exibida como página muda essa distribuição para manter a criação perto
|
|
96
96
|
da coleção. O `PageBody` recebe um [`Content`](/ui/content) com a
|
|
@@ -186,7 +186,7 @@ lança um erro que nomeia a Presentation.
|
|
|
186
186
|
|
|
187
187
|
Com `heading: "shell"`, o padrão, a casca emite o título da definição. Quando o conteúdo React já
|
|
188
188
|
declara o heading principal da página, como um `Content level={1}`, use `heading: "content"`: dentro
|
|
189
|
-
de `PageShell`, a casca deixa de emitir o `
|
|
189
|
+
de `PageShell`, a casca deixa de emitir o `PageHeader` com título e o documento continua com um único `h1`. Em
|
|
190
190
|
Dialog e Drawer, o título continua no cabeçalho da superfície.
|
|
191
191
|
|
|
192
192
|
Se o conteúdo precisa ocupar a altura da página e controlar a própria rolagem, como uma lista com
|
|
@@ -231,24 +231,24 @@ no manifest e concentre a inspeção na Lens em vez de criar um launcher flutuan
|
|
|
231
231
|
|
|
232
232
|
## Propriedades de Presentation
|
|
233
233
|
|
|
234
|
-
| Propriedade | Tipo | Padrão
|
|
235
|
-
| -------------------- | ------------------------------------------------ |
|
|
236
|
-
| `definition` | `PresentationDefinition` |
|
|
237
|
-
| `definitions` | `PresentationDefinition[]` |
|
|
238
|
-
| `actions` | `PresentationActionRegistry` |
|
|
239
|
-
| `invocation` | `PresentationInvocation` |
|
|
240
|
-
| `bindingContext` | `PresentationBindingContext` |
|
|
241
|
-
| `assistant` | `PresentationAssistantRuntime` |
|
|
242
|
-
| `onInvocationChange` | `(next: PresentationInvocation \| null) => void` |
|
|
243
|
-
| `onRefresh` | `(action: string \| null) => void` |
|
|
244
|
-
| `listState` | `ActionListState` |
|
|
245
|
-
| `onListStateChange` | `(state: ActionListState) => void` |
|
|
246
|
-
| `open` | `boolean` | `true`
|
|
247
|
-
| `onOpenChange` | `(open: boolean) => void` |
|
|
248
|
-
| `className` | `string` |
|
|
249
|
-
| `bodyClassName` | `string` |
|
|
234
|
+
| Propriedade | Tipo | Padrão | Descrição |
|
|
235
|
+
| -------------------- | ------------------------------------------------ | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
236
|
+
| `definition` | `PresentationDefinition` | | Artefato estático que descreve o recurso. |
|
|
237
|
+
| `definitions` | `PresentationDefinition[]` | | Registry alcançável por navegação, abertura e retorno. |
|
|
238
|
+
| `actions` | `PresentationActionRegistry` | | Contratos compartilháveis referenciados pelo artefato. |
|
|
239
|
+
| `invocation` | `PresentationInvocation` | | Superfície, input e pilha da exibição atual. |
|
|
240
|
+
| `bindingContext` | `PresentationBindingContext` | | Rota, item, seleção, sessão e resultado disponíveis. |
|
|
241
|
+
| `assistant` | `PresentationAssistantRuntime` | | Painel contextual fornecido pela superfície hospedeira. |
|
|
242
|
+
| `onInvocationChange` | `(next: PresentationInvocation \| null) => void` | | Recebe navegação, retorno e fechamento. |
|
|
243
|
+
| `onRefresh` | `(action: string \| null) => void` | | Recebe invalidações declaradas após sucesso. |
|
|
244
|
+
| `listState` | `ActionListState` | | Recorte controlado da action `list` do body, quando a aplicação o sincroniza com a URL. |
|
|
245
|
+
| `onListStateChange` | `(state: ActionListState) => void` | | Recebe cada mudança de recorte ou exibição da lista do body, como busca, filtros, período e página. |
|
|
246
|
+
| `open` | `boolean` | `true` | Estado controlado de Dialog ou Drawer. |
|
|
247
|
+
| `onOpenChange` | `(open: boolean) => void` | | Notifica abertura e fechamento da superfície modal. |
|
|
248
|
+
| `className` | `string` | | Classes adicionais da superfície. |
|
|
249
|
+
| `bodyClassName` | `string` | | Classes adicionais do body, aplicadas uma única vez. |
|
|
250
250
|
| `layout` | `'flow' \| 'fill'` | `'flow'` | Em `page`, `fill` limita a altura ao shell e entrega a rolagem ao conteúdo do body; a lista de um body `list` ocupa essa altura e rola só os resultados. Dialog e Drawer ignoram. |
|
|
251
|
-
| `children` | `ReactNode` |
|
|
251
|
+
| `children` | `ReactNode` | | Conteúdo React do body declarado com `body.component`. Obrigatório nesse caso e recusado com `body.action`. |
|
|
252
252
|
|
|
253
253
|
## Propriedades de PresentationInspector
|
|
254
254
|
|
|
@@ -10,32 +10,91 @@ mostrar somente o ícone, declare `aria-label` para preservar seu nome acessíve
|
|
|
10
10
|
```tsx preview col
|
|
11
11
|
<Tabs defaultValue="sessions">
|
|
12
12
|
<TabsList>
|
|
13
|
-
<TabsTrigger value="overview" icon={<LayoutDashboard />}>
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
<TabsTrigger value="overview" icon={<LayoutDashboard />}>
|
|
14
|
+
Visão geral
|
|
15
|
+
</TabsTrigger>
|
|
16
|
+
<TabsTrigger value="sessions" icon={<History />}>
|
|
17
|
+
Sessões
|
|
18
|
+
</TabsTrigger>
|
|
19
|
+
<TabsTrigger value="skills" icon={<Settings />}>
|
|
20
|
+
Skills
|
|
21
|
+
</TabsTrigger>
|
|
16
22
|
</TabsList>
|
|
17
23
|
<TabsContent value="overview">
|
|
18
|
-
<p className="text-sm text-muted-foreground">
|
|
24
|
+
<p className="text-sm text-muted-foreground">
|
|
25
|
+
Resumo do workspace Empresa X.
|
|
26
|
+
</p>
|
|
19
27
|
</TabsContent>
|
|
20
28
|
<TabsContent value="sessions">
|
|
21
|
-
<p className="text-sm text-muted-foreground">
|
|
29
|
+
<p className="text-sm text-muted-foreground">
|
|
30
|
+
3 sessões nesta semana, 1 em andamento.
|
|
31
|
+
</p>
|
|
22
32
|
</TabsContent>
|
|
23
33
|
<TabsContent value="skills">
|
|
24
|
-
<p className="text-sm text-muted-foreground">
|
|
34
|
+
<p className="text-sm text-muted-foreground">
|
|
35
|
+
6 skills vinculadas aos agentes do workspace.
|
|
36
|
+
</p>
|
|
25
37
|
</TabsContent>
|
|
26
38
|
</Tabs>
|
|
27
39
|
```
|
|
28
40
|
|
|
41
|
+
## Emoldurar abas e painéis
|
|
42
|
+
|
|
43
|
+
Use `framed` quando a navegação e seus painéis precisarem formar um único bloco. A propriedade
|
|
44
|
+
reúne borda, raio e recorte no próprio `Tabs`, mas não aplica fundo: o bloco herda a
|
|
45
|
+
superfície em que foi composto. Por isso, não envolva `Tabs` em um `Card` somente para obter essa
|
|
46
|
+
moldura.
|
|
47
|
+
|
|
48
|
+
```tsx preview col
|
|
49
|
+
<Tabs defaultValue="overview" framed className="gap-0">
|
|
50
|
+
<TabsList variant="line" className="px-2 pt-2">
|
|
51
|
+
<TabsTrigger value="overview">Visão geral</TabsTrigger>
|
|
52
|
+
<TabsTrigger value="history">Histórico</TabsTrigger>
|
|
53
|
+
</TabsList>
|
|
54
|
+
<TabsContent value="overview" className="p-4">
|
|
55
|
+
<p className="text-sm text-muted-foreground">
|
|
56
|
+
Resumo do workspace Empresa X.
|
|
57
|
+
</p>
|
|
58
|
+
</TabsContent>
|
|
59
|
+
<TabsContent value="history" className="p-4">
|
|
60
|
+
<p className="text-sm text-muted-foreground">
|
|
61
|
+
Alterações recentes do workspace.
|
|
62
|
+
</p>
|
|
63
|
+
</TabsContent>
|
|
64
|
+
</Tabs>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Distribuir as abas igualmente
|
|
68
|
+
|
|
69
|
+
Use `distribution="equal"` quando as seções tiverem o mesmo nível e precisarem repartir a largura
|
|
70
|
+
disponível. O valor padrão, `content`, mantém cada gatilho com a largura do próprio rótulo. A
|
|
71
|
+
área interativa e o fundo de hover ocupam toda a fração recebida pela aba. A distribuição não
|
|
72
|
+
altera os painéis associados.
|
|
73
|
+
|
|
74
|
+
```tsx preview col
|
|
75
|
+
<Tabs defaultValue="overview" distribution="equal">
|
|
76
|
+
<TabsList variant="line">
|
|
77
|
+
<TabsTrigger value="overview">Visão geral</TabsTrigger>
|
|
78
|
+
<TabsTrigger value="contacts">Contatos</TabsTrigger>
|
|
79
|
+
<TabsTrigger value="history">Histórico</TabsTrigger>
|
|
80
|
+
</TabsList>
|
|
81
|
+
<TabsContent value="overview">Resumo do atendimento.</TabsContent>
|
|
82
|
+
<TabsContent value="contacts">Tentativas de contato.</TabsContent>
|
|
83
|
+
<TabsContent value="history">Alterações registradas.</TabsContent>
|
|
84
|
+
</Tabs>
|
|
85
|
+
```
|
|
86
|
+
|
|
29
87
|
## Variante line
|
|
30
88
|
|
|
31
89
|
Use `variant="line"` em `TabsList` quando a navegação precisar de uma linha-base, como em um
|
|
32
90
|
cabeçalho. Na orientação horizontal, a lista ocupa toda a largura disponível e a aba ativa é
|
|
33
|
-
marcada sobre essa linha, em vez de usar uma superfície preenchida.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
91
|
+
marcada sobre essa linha, em vez de usar uma superfície preenchida. A linha respeita o recuo do
|
|
92
|
+
contêiner; dentro de `DrawerBody` e `DialogBody`, ela acompanha o alinhamento do restante do corpo
|
|
93
|
+
sem alcançar as laterais da superfície.
|
|
94
|
+
Cada item contém uma área interativa com a mesma altura de um Button do tamanho correspondente. A
|
|
95
|
+
área permanece transparente e recebe fundo apenas no hover; a aba ativa é indicada pela linha
|
|
96
|
+
primária inferior. Um respiro de `0.375rem` separa o controle dessa linha; em `Tabs framed`, ele
|
|
97
|
+
aumenta para `0.5rem` e acompanha o padding superior da moldura.
|
|
39
98
|
|
|
40
99
|
```tsx preview col
|
|
41
100
|
<Tabs defaultValue="agents">
|
|
@@ -45,10 +104,14 @@ vertical amplie a área interativa.
|
|
|
45
104
|
<TabsTrigger value="settings">Configurações</TabsTrigger>
|
|
46
105
|
</TabsList>
|
|
47
106
|
<TabsContent value="agents">
|
|
48
|
-
<p className="text-sm text-muted-foreground">
|
|
107
|
+
<p className="text-sm text-muted-foreground">
|
|
108
|
+
developer, reviewer e designer ativos.
|
|
109
|
+
</p>
|
|
49
110
|
</TabsContent>
|
|
50
111
|
<TabsContent value="repos">
|
|
51
|
-
<p className="text-sm text-muted-foreground">
|
|
112
|
+
<p className="text-sm text-muted-foreground">
|
|
113
|
+
empresa-x-api e empresa-x-web vinculados.
|
|
114
|
+
</p>
|
|
52
115
|
</TabsContent>
|
|
53
116
|
<TabsContent value="settings">
|
|
54
117
|
<p className="text-sm text-muted-foreground">Preferências do workspace.</p>
|
|
@@ -69,13 +132,19 @@ Com `orientation="vertical"`, a lista forma uma coluna. O exemplo usa a variante
|
|
|
69
132
|
<TabsTrigger value="history">Histórico</TabsTrigger>
|
|
70
133
|
</TabsList>
|
|
71
134
|
<TabsContent value="prompt">
|
|
72
|
-
<p className="text-sm text-muted-foreground">
|
|
135
|
+
<p className="text-sm text-muted-foreground">
|
|
136
|
+
O prompt do agente developer.
|
|
137
|
+
</p>
|
|
73
138
|
</TabsContent>
|
|
74
139
|
<TabsContent value="skills">
|
|
75
|
-
<p className="text-sm text-muted-foreground">
|
|
140
|
+
<p className="text-sm text-muted-foreground">
|
|
141
|
+
Skills vinculadas a este agente.
|
|
142
|
+
</p>
|
|
76
143
|
</TabsContent>
|
|
77
144
|
<TabsContent value="history">
|
|
78
|
-
<p className="text-sm text-muted-foreground">
|
|
145
|
+
<p className="text-sm text-muted-foreground">
|
|
146
|
+
Sessões anteriores deste agente.
|
|
147
|
+
</p>
|
|
79
148
|
</TabsContent>
|
|
80
149
|
</Tabs>
|
|
81
150
|
```
|
|
@@ -98,31 +167,33 @@ mais alto que os elementos vizinhos.
|
|
|
98
167
|
|
|
99
168
|
## Propriedades de Tabs
|
|
100
169
|
|
|
101
|
-
| Propriedade
|
|
102
|
-
|
|
103
|
-
| `defaultValue`
|
|
104
|
-
| `value`
|
|
105
|
-
| `onValueChange` | `(value: string) => void`
|
|
106
|
-
| `size`
|
|
107
|
-
| `
|
|
170
|
+
| Propriedade | Tipo | Padrão | Descrição |
|
|
171
|
+
| --------------- | ---------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
172
|
+
| `defaultValue` | `string` | | Aba inicial no modo não controlado. |
|
|
173
|
+
| `value` | `string` | | Aba ativa no modo controlado. Use com `onValueChange`. |
|
|
174
|
+
| `onValueChange` | `(value: string) => void` | | Chamado quando a pessoa seleciona outra aba. |
|
|
175
|
+
| `size` | `'default' \| 'sm'` | `'default'` | Altura da lista na escala única dos controles (2.25 e 2rem), aplicada em `TabsList`. Não altera a altura de `line` horizontal, que acompanha o conteúdo. |
|
|
176
|
+
| `distribution` | `'content' \| 'equal'` | `'content'` | Preserva a largura dos rótulos ou divide igualmente a largura disponível entre os gatilhos. |
|
|
177
|
+
| `framed` | `boolean` | `false` | Aplica borda, raio e recorte ao conjunto sem definir fundo ou foreground. |
|
|
178
|
+
| `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Direção da lista de abas. |
|
|
108
179
|
|
|
109
180
|
## Propriedades de TabsList
|
|
110
181
|
|
|
111
|
-
| Propriedade | Tipo
|
|
112
|
-
|
|
113
|
-
| `variant`
|
|
182
|
+
| Propriedade | Tipo | Padrão | Descrição |
|
|
183
|
+
| ----------- | --------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
184
|
+
| `variant` | `'default' \| 'line'` | `'default'` | `default` usa uma superfície preenchida; `line` cria uma linha-base horizontal de largura total e marca nela a aba ativa. |
|
|
114
185
|
|
|
115
186
|
## Propriedades de TabsTrigger
|
|
116
187
|
|
|
117
|
-
| Propriedade | Tipo
|
|
118
|
-
|
|
119
|
-
| `value`
|
|
120
|
-
| `icon`
|
|
121
|
-
| `disabled`
|
|
188
|
+
| Propriedade | Tipo | Padrão | Descrição |
|
|
189
|
+
| ----------- | ----------- | ------- | ----------------------------------------------------------------------------------------------- |
|
|
190
|
+
| `value` | `string` | | Identificador que associa o gatilho ao `TabsContent` correspondente. |
|
|
191
|
+
| `icon` | `ReactNode` | | Ícone decorativo antes do rótulo, em `1rem`. Em uma aba sem texto, declare também `aria-label`. |
|
|
192
|
+
| `disabled` | `boolean` | `false` | Impede a seleção da aba. |
|
|
122
193
|
|
|
123
194
|
## Propriedades de TabsContent
|
|
124
195
|
|
|
125
|
-
| Propriedade
|
|
126
|
-
|
|
127
|
-
| `value`
|
|
128
|
-
| `forceMount` | `true`
|
|
196
|
+
| Propriedade | Tipo | Padrão | Descrição |
|
|
197
|
+
| ------------ | -------- | ------ | ---------------------------------------------------------------------- |
|
|
198
|
+
| `value` | `string` | | Identificador do painel, igual ao `value` do `TabsTrigger` que o abre. |
|
|
199
|
+
| `forceMount` | `true` | | Mantém o painel montado mesmo quando outra aba está ativa. |
|
package/src/ui/meta.ts
CHANGED
|
@@ -63,7 +63,7 @@ export const componentMeta = {
|
|
|
63
63
|
name: "detail",
|
|
64
64
|
ancestry: "opus",
|
|
65
65
|
whenToUse:
|
|
66
|
-
'Apresente dados somente leitura como pares de rótulo e valor. DetailGroup organiza os DetailField com a semântica de uma lista de definições; `columns` controla a grade
|
|
66
|
+
'Apresente dados somente leitura como pares de rótulo e valor. DetailGroup organiza os DetailField com a semântica de uma lista de definições; `columns` controla a grade e `orientation` posiciona rótulo e valor. Em orientação horizontal, `dividers` ativa o tratamento tabular completo: divisórias, padding por célula, fundo sutil e largura compartilhada dos rótulos. `variant="framed"` aplica somente a moldura externa. Para entrada, validação e erro, use Field; para uma coleção pesquisável, use ActionList.',
|
|
67
67
|
},
|
|
68
68
|
dock: {
|
|
69
69
|
name: "dock",
|
|
@@ -75,7 +75,7 @@ export const componentMeta = {
|
|
|
75
75
|
name: "button",
|
|
76
76
|
ancestry: "shadcn",
|
|
77
77
|
whenToUse:
|
|
78
|
-
"Inicie uma ação com um controle clicável. Use `context` para o significado, `variant` para o tratamento visual e `size` para a escala compartilhada (`xs`…`lg` e os quadrados `icon-*`); `icon` recebe um nó e `busy` comunica o andamento e impede um novo acionamento. Para ações relacionadas, use ButtonGroup conectado ou
|
|
78
|
+
"Inicie uma ação com um controle clicável. Use `context` para o significado, `variant` para o tratamento visual e `size` para a escala compartilhada (`xs`…`lg` e os quadrados `icon-*`); `icon` recebe um nó e `busy` comunica o andamento e impede um novo acionamento. Para ações relacionadas, use ButtonGroup conectado, espaçado ou dividido.",
|
|
79
79
|
},
|
|
80
80
|
card: {
|
|
81
81
|
name: "card",
|
|
@@ -123,7 +123,7 @@ export const componentMeta = {
|
|
|
123
123
|
name: "content-header",
|
|
124
124
|
ancestry: "opus",
|
|
125
125
|
whenToUse:
|
|
126
|
-
'Estruture uma região com título e corpo. No caso comum, declare título, mídia, descrição, contador e ações diretamente em Content; use `framed` quando a região precisar de limite próprio, `frameVariant="legend"` para integrar visualmente o header à borda e `as="fieldset"` somente para agrupar campos sob uma legenda nativa. Componha ContentHeader apenas quando precisar controlar a anatomia.',
|
|
126
|
+
'Estruture uma região com título e corpo. No caso comum, declare título, mídia, descrição, contador e ações diretamente em Content; use `framed` quando a região precisar de limite próprio, `layout="sectioned"` quando o filho controlar o recuo do body, `frameVariant="legend"` para integrar visualmente o header à borda e `as="fieldset"` somente para agrupar campos sob uma legenda nativa. Componha ContentHeader apenas quando precisar controlar a anatomia.',
|
|
127
127
|
},
|
|
128
128
|
copyable: {
|
|
129
129
|
name: "copyable",
|
|
@@ -201,7 +201,7 @@ export const componentMeta = {
|
|
|
201
201
|
name: "tabs",
|
|
202
202
|
ancestry: "shadcn",
|
|
203
203
|
whenToUse:
|
|
204
|
-
|
|
204
|
+
'Alterne entre painéis relacionados no mesmo nível de navegação. Cada TabsTrigger aponta para um TabsContent pelo mesmo `value`; TabsList controla o tratamento visual e Tabs define orientação, escala, distribuição e moldura. Use `distribution="equal"` para repartir a largura entre seções equivalentes e `framed` para delimitar o conjunto sem criar uma nova superfície.',
|
|
205
205
|
},
|
|
206
206
|
textarea: {
|
|
207
207
|
name: "textarea",
|
|
@@ -412,7 +412,7 @@ export const componentMeta = {
|
|
|
412
412
|
name: "page",
|
|
413
413
|
ancestry: "opus",
|
|
414
414
|
whenToUse:
|
|
415
|
-
"Estruture uma página com cabeçalho,
|
|
415
|
+
"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 Content. 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.",
|
|
416
416
|
},
|
|
417
417
|
presentation: {
|
|
418
418
|
name: "presentation",
|