@softize/opus 29.0.0 → 30.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 +21 -0
- package/bin/lib/check.mjs +86 -10
- package/docs/adr/0045-surface-replaces-content-and-card.md +3 -0
- package/docs/adr/0062-listas-contidas-e-texto-flexivel.md +68 -0
- package/docs/adr/0063-metadados-das-superficies.md +44 -0
- package/docs/adr/README.md +4 -0
- package/package.json +1 -1
- package/registry/skills/build-opus-ui/SKILL.md +1 -1
- package/registry/skills/build-opus-ui/references/evaluations.md +10 -1
- package/registry/skills/build-opus-ui/references/ui-patterns.md +10 -2
- package/src/core/types.ts +1 -1
- package/src/ui/components/patterns/list.tsx +18 -9
- package/src/ui/components/patterns/page.tsx +27 -0
- package/src/ui/components/patterns/structural-header.tsx +25 -3
- package/src/ui/components/patterns/surface.tsx +36 -8
- package/src/ui/components/primitives/dialog.tsx +74 -42
- package/src/ui/components/primitives/drawer.tsx +69 -42
- package/src/ui/components/primitives/table.tsx +3 -3
- package/src/ui/docs/content/action-list.md +14 -7
- package/src/ui/docs/content/dialog.md +39 -0
- package/src/ui/docs/content/drawer.md +36 -0
- package/src/ui/docs/content/page.md +30 -1
- package/src/ui/docs/content/surface.md +41 -8
- package/src/ui/docs/content/table.md +7 -0
- package/src/ui/react.tsx +4 -0
|
@@ -190,6 +190,30 @@ de continuar, use [`Dialog mode="alert"`](/ui/dialog), que não fecha pelo cliqu
|
|
|
190
190
|
- O botão de fechar tem o nome acessível `Fechar`. Botões só com ícone no cabeçalho precisam de
|
|
191
191
|
`aria-label`.
|
|
192
192
|
|
|
193
|
+
## Metadados junto à identidade
|
|
194
|
+
|
|
195
|
+
Use `DrawerMeta` para badges, autoria e datas relacionados ao registro. A faixa fica
|
|
196
|
+
abaixo da linha de título e ações, com espaço próprio; `DrawerDescription` continua
|
|
197
|
+
reservado à orientação textual breve. Os itens quebram em várias linhas quando necessário.
|
|
198
|
+
|
|
199
|
+
```tsx
|
|
200
|
+
<Drawer defaultOpen>
|
|
201
|
+
<DrawerContent>
|
|
202
|
+
<DrawerHeader />
|
|
203
|
+
<DrawerBody>
|
|
204
|
+
<DrawerIntro>
|
|
205
|
+
<DrawerTitle>Manual de atendimento</DrawerTitle>
|
|
206
|
+
<DrawerDescription>Orientações para a equipe.</DrawerDescription>
|
|
207
|
+
<DrawerMeta><Badge>Publicado</Badge><span>Por Ana</span></DrawerMeta>
|
|
208
|
+
</DrawerIntro>
|
|
209
|
+
<p>Conteúdo do manual.</p>
|
|
210
|
+
</DrawerBody>
|
|
211
|
+
</DrawerContent>
|
|
212
|
+
</Drawer>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
A composição aceita um único `DrawerMeta` e exige um `DrawerTitle`. Na forma explícita, coloque-o em `DrawerIntro` ou no `DrawerHeader` compacto. Não coloque o slot solto no corpo.
|
|
216
|
+
|
|
193
217
|
## Propriedades de Drawer
|
|
194
218
|
|
|
195
219
|
| Propriedade | Tipo | Padrão | Descrição |
|
|
@@ -335,3 +359,15 @@ Use `flush` quando o conteúdo controlar seus próprios recuos.
|
|
|
335
359
|
|
|
336
360
|
Na intro, `DrawerTitle` usa a mesma escala de `PageTitle` (`1.875rem`). No header
|
|
337
361
|
compacto, o título conserva a escala de `1.125rem`. O nível semântico não altera essas medidas.
|
|
362
|
+
|
|
363
|
+
## Propriedades de DrawerMeta
|
|
364
|
+
|
|
365
|
+
| Propriedade | Tipo | Descrição |
|
|
366
|
+
| --- | --- | --- |
|
|
367
|
+
| `children` | `ReactNode` | Badges, datas, autoria ou outros metadados do registro. |
|
|
368
|
+
| `className` | `string` | Ajusta a faixa de metadados. |
|
|
369
|
+
|
|
370
|
+
Aceita atributos nativos de `div`. O intervalo superior é de 0,75rem; os itens têm
|
|
371
|
+
0,75rem entre colunas e 0,5rem entre linhas. O componente não insere separadores nem
|
|
372
|
+
carrega dados. Omitir o slot não reserva espaço. Metadados não substituem orientações
|
|
373
|
+
ou condições necessárias à decisão e não são anunciados como descrição do modal.
|
|
@@ -360,11 +360,28 @@ Não use `PageState` para uma falha parcial. Se outra parte da página continua
|
|
|
360
360
|
estado na própria seção com [`DataState`](/ui/data-state), [`ActionView`](/ui/action-view),
|
|
361
361
|
[`ActionList`](/ui/action-list) ou [`Alert`](/ui/alert).
|
|
362
362
|
|
|
363
|
+
## Metadados junto à identidade
|
|
364
|
+
|
|
365
|
+
Use `PageMeta` para badges, autoria e datas relacionados ao registro. A faixa fica
|
|
366
|
+
abaixo da linha de título e ações, com espaço próprio; `PageDescription` continua
|
|
367
|
+
reservado à orientação textual breve. Os itens quebram em várias linhas quando necessário.
|
|
368
|
+
|
|
369
|
+
```tsx preview col
|
|
370
|
+
render(
|
|
371
|
+
<Page title="Manual de atendimento" description="Orientações para a equipe." meta={<><Badge>Publicado</Badge><span>Por Ana</span></>}>
|
|
372
|
+
<p>Conteúdo do manual.</p>
|
|
373
|
+
</Page>
|
|
374
|
+
);
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
A composição aceita um único `PageMeta` e exige um `PageTitle`. Na forma explícita, coloque-o em `PageIntro` ou no `PageHeader` compacto. Não coloque o slot solto no corpo.
|
|
378
|
+
|
|
363
379
|
## Propriedades de Page
|
|
364
380
|
|
|
365
381
|
| Propriedade | Tipo | Padrão | Descrição |
|
|
366
382
|
| ------------- | -------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
367
383
|
| `description` | `ReactNode` | | Orientação opcional sob o título na forma curta. |
|
|
384
|
+
| `meta` | `ReactNode` | | Forma curta: metadados sob o título e a orientação. Exige `title`. |
|
|
368
385
|
| `title` | `ReactNode` | | O h1 da página. |
|
|
369
386
|
| `actions` | `ReactNode` | | Ações contextuais no extremo oposto do cabeçalho. |
|
|
370
387
|
| `layout` | `'flow' \| 'fill'` | `'flow'` | Ocupação de altura, não anatomia: `fill` limita a página ao shell para que uma região interna role e leva essa altura até uma `ActionList` composta em `PageBody`. |
|
|
@@ -503,7 +520,7 @@ Aceita atributos HTML de `div` e exige um `PageTitle`. Recebe opcionalmente `Pag
|
|
|
503
520
|
|
|
504
521
|
| Propriedade | Tipo | Descrição |
|
|
505
522
|
| ----------- | ----------------------------- | ------------------------------------------------------------------------ |
|
|
506
|
-
| `children` | `ReactNode` | Um `PageTitle` e, opcionalmente, `PageDescription` e `PageIntroActions`. |
|
|
523
|
+
| `children` | `ReactNode` | Um `PageTitle` e, opcionalmente, `PageDescription`, `PageMeta` e `PageIntroActions`. |
|
|
507
524
|
| `className` | `string` | Classes adicionais da introdução. |
|
|
508
525
|
| demais | Atributos de `HTMLDivElement` | Repassados à região introdutória. |
|
|
509
526
|
|
|
@@ -536,3 +553,15 @@ controla a moldura externa; em PageBody, controla o viewport.
|
|
|
536
553
|
PageShell permite rolagem de contingência quando a rota renderiza um fallback ou um
|
|
537
554
|
wrapper sem altura definida. Para manter o header fixo, a rota deve preservar a cadeia
|
|
538
555
|
flexível de altura até Page. Uma Page diretamente no shell já segue esse contrato.
|
|
556
|
+
|
|
557
|
+
## Propriedades de PageMeta
|
|
558
|
+
|
|
559
|
+
| Propriedade | Tipo | Descrição |
|
|
560
|
+
| --- | --- | --- |
|
|
561
|
+
| `children` | `ReactNode` | Badges, datas, autoria ou outros metadados do registro. |
|
|
562
|
+
| `className` | `string` | Ajusta a faixa de metadados. |
|
|
563
|
+
|
|
564
|
+
Aceita atributos nativos de `div`. O intervalo superior é de 0,75rem; os itens têm
|
|
565
|
+
0,75rem entre colunas e 0,5rem entre linhas. O componente não insere separadores nem
|
|
566
|
+
carrega dados. Omitir o slot não reserva espaço. Metadados não substituem orientações
|
|
567
|
+
ou condições necessárias à decisão e não substituem a descrição textual da região.
|
|
@@ -432,6 +432,24 @@ faixa que cobre o conteúdo ao rolar — usa `bg-[var(--surface-background,var(-
|
|
|
432
432
|
página, vale `--background`; dentro de uma superfície elevada, o fundo dela. Um contêiner da
|
|
433
433
|
aplicação que pinte outro fundo declara a mesma variável com a cor que usa.
|
|
434
434
|
|
|
435
|
+
## Metadados junto à identidade
|
|
436
|
+
|
|
437
|
+
Use `SurfaceMeta` para badges, autoria e datas relacionados ao registro. A faixa fica
|
|
438
|
+
abaixo da linha de título e ações, com espaço próprio; `SurfaceDescription` continua
|
|
439
|
+
reservado à orientação textual breve. Os itens quebram em várias linhas quando necessário.
|
|
440
|
+
|
|
441
|
+
```tsx preview col
|
|
442
|
+
render(
|
|
443
|
+
<Surface as="article" title="Manual de atendimento" meta={<><Badge>Publicado</Badge><span>Por Ana</span></>}>
|
|
444
|
+
<p>Conteúdo do manual.</p>
|
|
445
|
+
</Surface>
|
|
446
|
+
);
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
A composição aceita um único `SurfaceMeta` e exige um `SurfaceTitle`. Na forma explícita, coloque-o em `SurfaceHeader`. Em `fieldset`, coloque os metadados no corpo; a legenda permanece restrita a título e mídia decorativa.
|
|
450
|
+
|
|
451
|
+
O total da coleção continua ao lado do título: use `count` na forma curta ou `SurfaceCount` na explícita. Se um `SurfaceMeta` antigo representava esse total, migre para `SurfaceCount`.
|
|
452
|
+
|
|
435
453
|
## Propriedades de Surface
|
|
436
454
|
|
|
437
455
|
| Propriedade | Tipo | Padrão | Descrição |
|
|
@@ -446,6 +464,7 @@ aplicação que pinte outro fundo declara a mesma variável com a cor que usa.
|
|
|
446
464
|
| `media` | `ReactNode` | | Forma curta: conteúdo do slot de mídia, antes do título. Exige `title`. |
|
|
447
465
|
| `count` | `number` | | Forma curta: total de itens ao lado do título. Exige `title`; indisponível em `fieldset`. |
|
|
448
466
|
| `description` | `ReactNode` | | Forma curta: frase de apoio sob o título. Exige `title`; indisponível em `fieldset`. |
|
|
467
|
+
| `meta` | `ReactNode` | | Forma curta: metadados sob o título e a orientação. Exige `title`; indisponível em `fieldset`. |
|
|
449
468
|
| `actions` | `ReactNode` | | Forma curta: ações sobre a superfície inteira. Exige `title`; indisponível em `fieldset`. |
|
|
450
469
|
| `className` | `string` | | Compõe sobre a superfície. Na caixa simples, é onde entra o recuo. |
|
|
451
470
|
| `children` | `ReactNode` | | Filhos livres, que formam o corpo, ou os slots `SurfaceHeader`, `SurfaceBody` e `SurfaceFooter`. |
|
|
@@ -456,7 +475,7 @@ As demais propriedades são as nativas do elemento escolhido em `as`.
|
|
|
456
475
|
|
|
457
476
|
| Propriedade | Tipo | Padrão | Descrição |
|
|
458
477
|
| ----------- | ----------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
459
|
-
| `children` | `ReactNode` | | No máximo um de cada: `SurfaceMedia`, `SurfaceTitle`, `SurfaceMeta`, `SurfaceDescription` e `SurfaceActions`. Em `fieldset`, o `SurfaceTitle` é obrigatório e somente ele e `SurfaceMedia` são aceitos. |
|
|
478
|
+
| `children` | `ReactNode` | | No máximo um de cada: `SurfaceMedia`, `SurfaceTitle`, `SurfaceCount`, `SurfaceMeta`, `SurfaceDescription` e `SurfaceActions`. Em `fieldset`, o `SurfaceTitle` é obrigatório e somente ele e `SurfaceMedia` são aceitos. |
|
|
460
479
|
| `className` | `string` | | Ajusta a região do header. |
|
|
461
480
|
|
|
462
481
|
`SurfaceHeader` só existe como filho direto de `Surface`.
|
|
@@ -475,13 +494,6 @@ As demais propriedades são as nativas do elemento escolhido em `as`.
|
|
|
475
494
|
| `children` | `ReactNode` | | Nome da superfície. O heading usa o `level` declarado em `Surface`. |
|
|
476
495
|
| `className` | `string` | | Ajusta o título. |
|
|
477
496
|
|
|
478
|
-
## Propriedades de SurfaceMeta
|
|
479
|
-
|
|
480
|
-
| Propriedade | Tipo | Padrão | Descrição |
|
|
481
|
-
| ----------- | ----------- | ------ | -------------------------------------------------------- |
|
|
482
|
-
| `children` | `ReactNode` | | Metadado curto ao lado do título, como o total de itens. |
|
|
483
|
-
| `className` | `string` | | Ajusta o metadado. |
|
|
484
|
-
|
|
485
497
|
## Propriedades de SurfaceDescription
|
|
486
498
|
|
|
487
499
|
| Propriedade | Tipo | Padrão | Descrição |
|
|
@@ -520,3 +532,24 @@ um wrapper filho declara relações locais mais compactas.
|
|
|
520
532
|
é opcional e não repete o título. A mesma regra vale para uma página (`level={1}`), uma seção ou
|
|
521
533
|
um card: condições, limites e consequências necessários à decisão ficam no corpo ou junto do
|
|
522
534
|
controle correspondente. Pular o subheading não deve comprometer a tarefa.
|
|
535
|
+
|
|
536
|
+
## Propriedades de SurfaceCount
|
|
537
|
+
|
|
538
|
+
| Propriedade | Tipo | Descrição |
|
|
539
|
+
| --- | --- | --- |
|
|
540
|
+
| `children` | `ReactNode` | Contador ao lado do título. |
|
|
541
|
+
| `className` | `string` | Ajusta a apresentação do contador. |
|
|
542
|
+
|
|
543
|
+
Aceita atributos nativos de `span`. Deve estar em `SurfaceHeader`, fora de `fieldset`.
|
|
544
|
+
|
|
545
|
+
## Propriedades de SurfaceMeta
|
|
546
|
+
|
|
547
|
+
| Propriedade | Tipo | Descrição |
|
|
548
|
+
| --- | --- | --- |
|
|
549
|
+
| `children` | `ReactNode` | Badges, datas, autoria ou outros metadados do registro. |
|
|
550
|
+
| `className` | `string` | Ajusta a faixa de metadados. |
|
|
551
|
+
|
|
552
|
+
Aceita atributos nativos de `div`. O intervalo superior é de 0,75rem; os itens têm
|
|
553
|
+
0,75rem entre colunas e 0,5rem entre linhas. O componente não insere separadores nem
|
|
554
|
+
carrega dados. Omitir o slot não reserva espaço. Metadados não substituem orientações
|
|
555
|
+
ou condições necessárias à decisão e não substituem a descrição textual da região.
|
|
@@ -8,6 +8,13 @@ A variante padrão não possui borda externa; `TableBody` mantém somente as div
|
|
|
8
8
|
Aplique `text-right` ao cabeçalho e às células quando o domínio pedir alinhamento numérico.
|
|
9
9
|
`TableCaption` descreve a tabela abaixo do conteúdo.
|
|
10
10
|
|
|
11
|
+
As células quebram texto entre palavras. Identificadores longos sem espaços podem exigir
|
|
12
|
+
rolagem horizontal; aplique `wrap-anywhere` à célula quando quiser permitir quebra no meio
|
|
13
|
+
desses valores. Use `whitespace-nowrap` para preservar valores inteiros, como números e datas.
|
|
14
|
+
O contêiner limita a tabela ao espaço recebido e oferece rolagem horizontal quando o conteúdo
|
|
15
|
+
ou larguras mínimas explícitas não cabem. Em uma composição flex ou grid, permita que o ancestral também
|
|
16
|
+
encolha (`min-w-0`); a tabela não pode redefinir a largura de um ancestral.
|
|
17
|
+
|
|
11
18
|
```tsx preview col
|
|
12
19
|
<Table>
|
|
13
20
|
<TableCaption>Sessões recentes do workspace Empresa X.</TableCaption>
|
package/src/ui/react.tsx
CHANGED
|
@@ -177,6 +177,7 @@ export {
|
|
|
177
177
|
DialogActions,
|
|
178
178
|
DialogIntro,
|
|
179
179
|
DialogIntroActions,
|
|
180
|
+
DialogMeta,
|
|
180
181
|
DialogBody,
|
|
181
182
|
DialogFooter,
|
|
182
183
|
DialogTitle,
|
|
@@ -326,6 +327,7 @@ export {
|
|
|
326
327
|
DrawerActions,
|
|
327
328
|
DrawerIntro,
|
|
328
329
|
DrawerIntroActions,
|
|
330
|
+
DrawerMeta,
|
|
329
331
|
DrawerClose,
|
|
330
332
|
DrawerContent,
|
|
331
333
|
DrawerFooter,
|
|
@@ -517,6 +519,7 @@ export {
|
|
|
517
519
|
PageHeader,
|
|
518
520
|
PageIntro,
|
|
519
521
|
PageIntroActions,
|
|
522
|
+
PageMeta,
|
|
520
523
|
PageNavigation,
|
|
521
524
|
PageBack,
|
|
522
525
|
PageTitle,
|
|
@@ -549,6 +552,7 @@ export {
|
|
|
549
552
|
SurfaceTitle,
|
|
550
553
|
SurfaceDescription,
|
|
551
554
|
SurfaceMeta,
|
|
555
|
+
SurfaceCount,
|
|
552
556
|
SurfaceActions,
|
|
553
557
|
SurfaceBody,
|
|
554
558
|
SurfaceFooter,
|