@softize/opus 27.1.0 → 29.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 +113 -0
- package/bin/cli.mjs +68 -3
- package/bin/lib/check.mjs +139 -30
- package/bin/lib/copy.mjs +505 -67
- package/bin/lib/materialize.mjs +99 -1
- package/docs/adr/0015-action-size-follows-interaction-density.md +2 -0
- package/docs/adr/0028-schedules-run-actions-as-the-system-by-action-opt-in.md +1 -1
- package/docs/adr/0029-page-header-is-the-single-page-introduction.md +3 -1
- package/docs/adr/0037-design-data-lives-outside-the-contract.md +1 -1
- package/docs/adr/0060-surface-composition-separates-chrome-and-intro.md +161 -0
- package/docs/adr/0061-claude-md-imports-agents-md.md +41 -0
- package/docs/adr/README.md +4 -0
- package/docs/code-style.md +47 -8
- package/docs/protocol.md +1 -1
- package/docs/releasing.md +7 -0
- package/package.json +1 -1
- package/registry/instructions/opus.md +3 -1
- package/registry/skills/build-opus-ui/SKILL.md +16 -14
- package/registry/skills/build-opus-ui/references/evaluations.md +10 -0
- package/registry/skills/build-opus-ui/references/ui-patterns.md +17 -15
- package/registry/skills/maintain-opus-docs/SKILL.md +2 -1
- package/registry/skills/maintain-opus-docs/references/editorial-standard.md +9 -0
- package/registry/skills/maintain-opus-docs/references/evaluations.md +8 -0
- package/registry/templates/app/pnpm-workspace.yaml +1 -1
- package/src/core/system-actor.ts +1 -1
- package/src/ui/components/patterns/list.tsx +63 -54
- package/src/ui/components/patterns/page.tsx +146 -38
- package/src/ui/components/patterns/presentation.tsx +44 -59
- package/src/ui/components/patterns/structural-header.tsx +42 -6
- package/src/ui/components/patterns/surface-anatomy.ts +52 -22
- package/src/ui/components/patterns/surface.tsx +2 -3
- package/src/ui/components/primitives/control.ts +2 -2
- package/src/ui/components/primitives/dialog.tsx +7 -2
- package/src/ui/components/primitives/drawer.tsx +7 -2
- package/src/ui/components/primitives/icon-picker.tsx +271 -34
- package/src/ui/components/primitives/pagination.tsx +5 -4
- package/src/ui/components/primitives/tabs.tsx +15 -2
- package/src/ui/components/primitives/toggle.tsx +1 -1
- package/src/ui/docs/content/action-list.md +12 -3
- package/src/ui/docs/content/actions.md +1 -1
- package/src/ui/docs/content/auth.md +3 -3
- package/src/ui/docs/content/button.md +7 -7
- package/src/ui/docs/content/cli.md +6 -0
- package/src/ui/docs/content/communication.md +10 -8
- package/src/ui/docs/content/compositions.md +35 -23
- package/src/ui/docs/content/dialog.md +18 -6
- package/src/ui/docs/content/drawer.md +17 -5
- package/src/ui/docs/content/events.md +13 -13
- package/src/ui/docs/content/icon-picker.md +37 -19
- package/src/ui/docs/content/input.md +1 -1
- package/src/ui/docs/content/installation.md +4 -0
- package/src/ui/docs/content/log.md +1 -1
- package/src/ui/docs/content/page.md +169 -69
- package/src/ui/docs/content/pagination.md +7 -8
- package/src/ui/docs/content/presentation.md +4 -3
- package/src/ui/docs/content/queue.md +2 -2
- package/src/ui/docs/content/router.md +1 -1
- package/src/ui/docs/content/scheduler.md +15 -15
- package/src/ui/docs/content/surface.md +8 -5
- package/src/ui/docs/content/tabs.md +12 -4
- package/src/ui/docs/content/testing.md +4 -4
- package/src/ui/meta.ts +1 -1
- package/src/ui/react.tsx +9 -1
- package/src/vite/design.ts +1 -1
|
@@ -70,8 +70,8 @@ runtime: `ctx.user` é `null`, `ctx.can` nega tudo e `isSystemActor(ctx)` respon
|
|
|
70
70
|
|
|
71
71
|
```ts
|
|
72
72
|
it('o fechamento diário roda pelo sistema', async () => {
|
|
73
|
-
const { output } = await runAction(
|
|
74
|
-
expect(output.
|
|
73
|
+
const { output } = await runAction(ledgerClose, {}, { schedule: 'ledger.close-day' })
|
|
74
|
+
expect(output.closedEntries).toBeGreaterThan(0)
|
|
75
75
|
})
|
|
76
76
|
```
|
|
77
77
|
|
|
@@ -102,8 +102,8 @@ validação de chave dos drivers reais:
|
|
|
102
102
|
import { memStorage, runAction } from '@softize/opus/testing'
|
|
103
103
|
|
|
104
104
|
const storage = memStorage()
|
|
105
|
-
await runAction(
|
|
106
|
-
expect(storage.keys()).toEqual(['
|
|
105
|
+
await runAction(invoiceAttach, { id: '9' }, { user, storage })
|
|
106
|
+
expect(storage.keys()).toEqual(['invoices/9.pdf'])
|
|
107
107
|
```
|
|
108
108
|
|
|
109
109
|
## fake — dados gerados pelo schema
|
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
|
|
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 {
|
|
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,
|
package/src/vite/design.ts
CHANGED
|
@@ -89,7 +89,7 @@ export interface OpusDesignOptions {
|
|
|
89
89
|
entry?: string | string[]
|
|
90
90
|
|
|
91
91
|
/**
|
|
92
|
-
* Cenários de design (ADR 0037): módulos que exportam `defineDesignScenario(
|
|
92
|
+
* Cenários de design (ADR 0037): módulos que exportam `defineDesignScenario(contract, response)`.
|
|
93
93
|
* Aceita caminhos e globs, como `entry`. O cenário vence a resposta padrão gerada pelo `fake`;
|
|
94
94
|
* cenário de action inexistente impede o boot, com a lista no erro.
|
|
95
95
|
* Sem default: o projeto decide onde os cenários ficam e se são versionados.
|