@praxisui/page-builder 8.0.0-beta.2 → 8.0.0-beta.20
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/README.md +78 -17
- package/fesm2022/praxisui-page-builder.mjs +10173 -1077
- package/index.d.ts +881 -17
- package/package.json +5 -4
package/README.md
CHANGED
|
@@ -11,10 +11,10 @@ Ferramentas de edicao para paginas dinamicas canonicas baseadas em `praxis-dynam
|
|
|
11
11
|
## When to use
|
|
12
12
|
|
|
13
13
|
- Montar paginas dinamicas com widgets e layout visual sobre o runtime canonico
|
|
14
|
-
- Entregar experiencia de configuracao de pagina/widget
|
|
14
|
+
- Entregar experiencia de configuracao de pagina/widget com editor visual canonico de conexoes
|
|
15
15
|
- Integrar page composition com IA, settings panel e contratos compartilhados do Praxis UI
|
|
16
16
|
|
|
17
|
-
O pacote permanece focado no shell canonico de authoring em torno de `praxis-dynamic-page`: palette, page settings, widget shell e
|
|
17
|
+
O pacote permanece focado no shell canonico de authoring em torno de `praxis-dynamic-page`: palette, page settings, widget shell, catalogos de IA e edicao visual de `composition.links`. A fonte de verdade das conexoes continua sendo o contrato `WidgetPageDefinition` do `@praxisui/core`; o editor visual apenas materializa esse contrato canonico.
|
|
18
18
|
|
|
19
19
|
## Instalacao
|
|
20
20
|
|
|
@@ -37,11 +37,16 @@ Peer dependencies (Angular v20):
|
|
|
37
37
|
Este pacote expoe o shell ativo do builder canonico de pagina dinamica:
|
|
38
38
|
- `ComponentPaletteDialogComponent` para adicionar widgets a pagina.
|
|
39
39
|
- `FloatingToolbarComponent` e `TileToolbarComponent` para acoes rapidas de add/save/preview/configuracao.
|
|
40
|
-
-
|
|
40
|
+
- `ConnectionEditorComponent` para inspecionar, criar e remover conexoes canonicas em `composition.links`.
|
|
41
41
|
- `WidgetShellEditorComponent` e `DynamicPageConfigEditorComponent` para authoring de shell/canvas sem redefinir a semantica canonica de composicao.
|
|
42
42
|
|
|
43
|
-
Conexoes continuam pertencendo ao contrato `WidgetPageDefinition`,
|
|
44
|
-
|
|
43
|
+
Conexoes continuam pertencendo ao contrato `WidgetPageDefinition`. O editor visual do Page Builder cria, remove e edita links inline preservando o envelope canonico `page.composition.links`, incluindo `condition` em Json Logic, `policy` operacional e `transform` canônico, sem introduzir modelo paralelo de grafo. O historico de desfazer/refazer do editor e transitorio: ele reemite snapshots canonicos por `pageChange`, mas nao persiste estado de historico dentro da pagina.
|
|
44
|
+
|
|
45
|
+
O roadmap tecnico para evoluir o editor radial esta registrado em [`connection-editor-reference-study.md`](./connection-editor-reference-study.md).
|
|
46
|
+
|
|
47
|
+
Nested component ports devem ser modeladas no mesmo contrato `composition.links`, usando `component-port + nestedPath`.
|
|
48
|
+
O editor representa o endpoint nested como sub-identidade do owner top-level, sem criar um no de canvas separado para o widget filho.
|
|
49
|
+
Planos de IA (`UiCompositionPlan`) tambem devem usar `nestedPath` para widgets internos; nao gere `widgetEvent`, wrappers host-specific ou `bindingPath` profundo como caminho principal para nested ports.
|
|
45
50
|
|
|
46
51
|
## AI Capabilities Registration
|
|
47
52
|
|
|
@@ -94,21 +99,47 @@ Registro via token:
|
|
|
94
99
|
|
|
95
100
|
Para gerar uma página a partir de um prompt usando o backend canônico do `praxis-config-starter`, configure `PageBuilderAgenticAuthoringService` com o endpoint interno opt-in `/api/praxis/config/ai/authoring`.
|
|
96
101
|
|
|
97
|
-
O chrome conversacional do assistente usa `PraxisAiAssistantShellComponent` de `@praxisui/ai`. O Page Builder continua dono da semântica agentic de página: resolução de intenção, preview, apply, save, reopen e compilação do plano validado para `WidgetPageDefinition`.
|
|
102
|
+
O chrome conversacional do assistente usa `PraxisAiAssistantShellComponent` de `@praxisui/ai`, mas a presença minimizada deve ser renderizada pelo shell da aplicação com `PraxisAiAssistantSessionHostComponent`, lendo o `PraxisAssistantSessionRegistryService`. O Page Builder apenas registra sua sessão com identidade estável e contexto `Page Builder`; a identidade pública continua sendo o copiloto semântico Praxis. O Page Builder continua dono da semântica agentic de página: resolução de intenção, preview, apply, save, reopen e compilação do plano validado para `WidgetPageDefinition`.
|
|
103
|
+
|
|
104
|
+
### Agentic Authoring Manifest
|
|
105
|
+
|
|
106
|
+
`PRAXIS_PAGE_BUILDER_AUTHORING_MANIFEST` declara o contrato executável de authoring do pacote e é exportado pelo `public-api` de `@praxisui/page-builder`.
|
|
107
|
+
|
|
108
|
+
O manifesto cobre as famílias de operação `page.configure`, `canvas.configure`, `widget.add`, `widget.remove`, `widget.moveResize`, `widget.shell.configure`, `composition.link.add`, `composition.link.remove`, `composition.plan.compile`, `state.set`, `page.preview.apply`, `page.persist.save` e `childOperation.delegate`.
|
|
109
|
+
|
|
110
|
+
As fronteiras canônicas são:
|
|
111
|
+
- o documento persistido continua sendo `WidgetPageDefinition`;
|
|
112
|
+
- `UiCompositionPlan` é apenas o plano intermediário de IA e deve compilar antes do preview/apply local;
|
|
113
|
+
- wiring persistido usa `page.composition.links`, incluindo `nestedPath` para component ports internas;
|
|
114
|
+
- o Page Builder não redefine inputs de widgets filhos. Edições de `definition.inputs` devem delegar para o manifesto do componente filho ou para `ComponentDocMeta.configEditor`;
|
|
115
|
+
- `pageIdentity` e ETag pertencem ao fluxo de persistência do `praxis-config-starter` e não entram no documento runtime da página.
|
|
98
116
|
|
|
99
117
|
```ts
|
|
100
118
|
import { PAGE_BUILDER_AGENTIC_AUTHORING_OPTIONS } from '@praxisui/page-builder';
|
|
119
|
+
import { DomainKnowledgeService, DomainRuleService } from '@praxisui/core';
|
|
101
120
|
|
|
102
121
|
providers: [
|
|
103
122
|
{
|
|
104
123
|
provide: PAGE_BUILDER_AGENTIC_AUTHORING_OPTIONS,
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
'
|
|
110
|
-
|
|
111
|
-
|
|
124
|
+
useFactory: () => {
|
|
125
|
+
const domainKnowledge = inject(DomainKnowledgeService);
|
|
126
|
+
const domainRules = inject(DomainRuleService);
|
|
127
|
+
return {
|
|
128
|
+
baseUrl: '/api/praxis/config/ai/authoring',
|
|
129
|
+
// Domain Knowledge change-sets stay governed by praxis-config-starter.
|
|
130
|
+
createProjectKnowledgeChangeSet: (request, options) => domainKnowledge.createChangeSet(request, options),
|
|
131
|
+
getProjectKnowledgeChangeSet: (changeSetId, options) => domainKnowledge.getChangeSet(changeSetId, options),
|
|
132
|
+
validateProjectKnowledgeChangeSet: (changeSetId, options) => domainKnowledge.validateChangeSet(changeSetId, options),
|
|
133
|
+
transitionProjectKnowledgeChangeSetStatus: (changeSetId, request, options) =>
|
|
134
|
+
domainKnowledge.transitionChangeSetStatus(changeSetId, request, options),
|
|
135
|
+
applyProjectKnowledgeChangeSet: (changeSetId, options) => domainKnowledge.applyChangeSet(changeSetId, options),
|
|
136
|
+
sharedRuleIntake: (request, options) => domainRules.intake(request, options),
|
|
137
|
+
headersFactory: () => ({
|
|
138
|
+
'X-Tenant-ID': tenantId,
|
|
139
|
+
'X-User-ID': userId,
|
|
140
|
+
'X-Env': 'local',
|
|
141
|
+
}),
|
|
142
|
+
};
|
|
112
143
|
},
|
|
113
144
|
},
|
|
114
145
|
]
|
|
@@ -116,12 +147,19 @@ providers: [
|
|
|
116
147
|
|
|
117
148
|
Fluxo canônico:
|
|
118
149
|
|
|
119
|
-
- `resolveIntent` envia prompt, pagina atual e widget selecionado para resolver operacao, recurso, schema, surface e elegibilidade.
|
|
150
|
+
- `resolveIntent` envia todo prompt de authoring, pagina atual e widget selecionado para resolver operacao, recurso, schema, surface e elegibilidade no backend canonico. O Page Builder nao deve inferir intencao, recurso ou operacao por heuristica local antes dessa chamada.
|
|
120
151
|
- `previewPage` envia o prompt junto de `intentResolution` elegivel e recebe `MinimalFormPlan` + `CompiledFormPatch`.
|
|
152
|
+
- `DomainKnowledgeService` em `@praxisui/core` e o cliente canonico para continuar propostas de Project Knowledge como change-sets governados em `/api/praxis/config/domain-knowledge/change-sets`; o Page Builder pode acionar essa trilha como cockpit, mas nao deve materializar evidencias localmente nem tratar o frontend como fonte primaria da decisao.
|
|
153
|
+
- Hosts podem habilitar `[agenticAuthoringEnableStreaming]="true"` para usar `/api/praxis/config/ai/authoring/turn/stream/**`. O Page Builder consome eventos SSE de progresso e usa o `result` terminal como a mesma fonte de preview; se o endpoint de start ainda nao estiver disponivel, o fluxo pode voltar para `resolveIntent` + `previewPage`. Depois que a conexao SSE e iniciada, erros de transporte sao tolerados por uma janela curta de reconexao e, se persistirem, sao exibidos como falha do stream em vez de disparar uma segunda execucao sincrona silenciosa.
|
|
154
|
+
- Em streaming, a conversa deve refletir estados intermediarios do turno, como resolucao de intencao, selecao de recurso, planejamento e geracao de preview. Nao trate o SSE apenas como transporte do resultado final: cada `PraxisAssistantTurnViewState` emitido precisa atualizar status, mensagens, anexos, respostas rapidas, diagnosticos e preview disponivel.
|
|
155
|
+
- Para cenarios corporativos, mantenha streaming e diagnosticos como capacidades opt-in do host. Streaming melhora feedback percebido em prompts curtos ou ambiguos; diagnosticos exibem prompt/contexto/catalogos e devem ficar restritos a auditoria, suporte ou ambientes controlados.
|
|
121
156
|
- `resolveIntent` e `previewPage` tambem aceitam `sessionId`, `clientTurnId`, `conversationMessages`, `pendingClarification` e `attachmentSummaries` para que respostas curtas e contexto anexado continuem o turno sem reescrever o prompt no frontend.
|
|
122
157
|
- `attachmentSummaries` deve conter apenas metadados serializaveis (`id`, `name`, `kind`, `mimeType`, `sizeBytes`, `source`, `hasPreview`). O frontend nao envia `File`, bytes, base64 nem URLs locais `blob:`. Quando uma pergunta de clarificacao nasce de um turno com anexos, o backend pode ecoar esses resumos em `pendingClarification.diagnostics.attachmentSummaries`; o Page Builder reenvia esse estado no proximo turno.
|
|
123
|
-
- `
|
|
124
|
-
- `
|
|
158
|
+
- Quando `resolveIntent` retornar candidatos ambiguos, o Page Builder deve preservar `quickReplies` como chips clicaveis ricos. Campos como `description`, `icon`, `tone` e `contextHints` pertencem ao contrato do backend e nao devem ser recriados ou descartados no frontend.
|
|
159
|
+
- Hosts podem habilitar `[agenticAuthoringIncludeLlmDiagnostics]="true"` apenas em cenarios de auditoria/debug. O input adiciona `contextHints.includeLlmDiagnostics=true` nas chamadas `resolveIntent` e, quando o backend retorna `llmDiagnostics`, o Page Builder mostra esse JSON em um painel tecnico separado da conversa. O padrao permanece desligado para nao expor prompt/contexto operacional em fluxos comuns.
|
|
160
|
+
- Para criacao de dashboard apos escolha de recurso, `previewPage` pode retornar `uiCompositionPlan.layoutPreset=resource-dashboard`; o builder deve aplicar esse plano como preview de pagina, nao tratar o artefato como fluxo restrito a formulario.
|
|
161
|
+
- `PageBuilderAiAdapter.applyCompiledFormPatch` aplica somente `compiledFormPatch.patch.page` no runtime do builder, materializando uma cópia local antes de atualizar a página.
|
|
162
|
+
- `applyPage` persiste a página renderizável corrente após o preview local em `ui_user_config`, com `componentType`, `componentId`, `scope` e `If-Match` delegados ao backend canônico.
|
|
125
163
|
|
|
126
164
|
O frontend não deve persistir o envelope completo do patch como payload de runtime. O envelope fica para preview, auditoria e diagnóstico; o documento salvo é a página renderizável.
|
|
127
165
|
|
|
@@ -188,6 +226,9 @@ O builder canonico expoe authoring de shell/palette sobre `praxis-dynamic-page`.
|
|
|
188
226
|
|
|
189
227
|
`page` e um `WidgetPageDefinition` (do `@praxisui/core`) contendo `widgets` e opcionalmente `composition.links`. O envelope `composition` e o caminho `composition.links` formam a superficie canonica persistida para wiring da pagina, com `condition` em Json Logic e `policy` para comportamento operacional.
|
|
190
228
|
|
|
229
|
+
Para conectar portas de widgets internos em containers como `praxis-tabs` ou `praxis-expansion`, use `composition.links[].from/to.ref.nestedPath`.
|
|
230
|
+
`ref.widget` continua sendo o owner top-level no canvas, e o ultimo segmento de `nestedPath` deve ser `kind: "widget"` com `key` estavel.
|
|
231
|
+
|
|
191
232
|
Para conteudo editorial rico dentro da pagina, use um widget `praxis-rich-content`
|
|
192
233
|
com `definition.inputs.document: RichContentDocument`. Isso evita criar uma DSL
|
|
193
234
|
local de page-builder para cards, imagens, timelines ou blocos de apresentacao,
|
|
@@ -229,7 +270,7 @@ this.settingsPanel.open({
|
|
|
229
270
|
|
|
230
271
|
- Trate `composition.links` como parte do contrato canonico salvo no JSON da pagina.
|
|
231
272
|
- Use `composition.links[].condition` para guardas semanticas em Json Logic e `composition.links[].policy` para debounce/distinct/missing-value.
|
|
232
|
-
- Quando precisar revisar ligacoes,
|
|
273
|
+
- Quando precisar revisar ligacoes, use o editor visual para interacao e mantenha a inspecao textual/versionada do contrato como fonte de auditoria.
|
|
233
274
|
|
|
234
275
|
## API (resumo)
|
|
235
276
|
|
|
@@ -238,10 +279,30 @@ Exports deste pacote:
|
|
|
238
279
|
- `FloatingToolbarComponent`
|
|
239
280
|
- `TileToolbarComponent`
|
|
240
281
|
- `WidgetShellEditorComponent`
|
|
282
|
+
- `ConnectionEditorComponent`
|
|
241
283
|
- `DynamicPageConfigEditorComponent`
|
|
242
284
|
- `DynamicPageBuilderComponent`
|
|
243
285
|
- `PageBuilderAgenticAuthoringService`
|
|
244
286
|
- `PAGE_BUILDER_AGENTIC_AUTHORING_OPTIONS`
|
|
287
|
+
- `createProjectKnowledgeChangeSet`, `getProjectKnowledgeChangeSet`, `validateProjectKnowledgeChangeSet`, `transitionProjectKnowledgeChangeSetStatus` e `applyProjectKnowledgeChangeSet` permitem que o cockpit continue Project Knowledge citado como `Domain Knowledge` governado por change-set canonico, sempre com validacao, aprovacao, aplicacao e readback seguro no backend.
|
|
288
|
+
- `sharedRuleIntake` permite abrir a trilha governada de `domain-rules/intake` quando o backend devolver `recommendedAuthoringFlow=shared_rule_authoring`; o handoff exportado preserva `endpoint`, `intakeEndpoint`, `nextEndpoint`, `routeGateStatus`, `routeFailureCode`, `routeDecisionSource` e `previewDisposition` para que hosts mostrem a rota canonica completa sem reinterpretar localmente a decisao.
|
|
289
|
+
|
|
290
|
+
Campos de routing no handoff:
|
|
291
|
+
- `routeGateStatus` vem do gate de resolucao de intencao retornado pelo backend, como `route_required`.
|
|
292
|
+
- `routeFailureCode` preserva o motivo canonico, como `intent-resolution-shared-rule-route-required`.
|
|
293
|
+
- `routeDecisionSource` indica se a fonte foi `contextHints.domainCatalog.recommendedAuthoringFlow` ou o gate de resolucao.
|
|
294
|
+
- `previewDisposition` explicita que o preview visual foi bloqueado por rota governada, em vez de sugerir um `componentEditPlan`.
|
|
295
|
+
|
|
296
|
+
Checkpoint operacional de review/publicacao:
|
|
297
|
+
- O Page Builder emite o handoff canonico de `shared_rule_authoring` e oferece um cockpit governado para continuar a decisao sem assumir autoria primaria da regra de negocio.
|
|
298
|
+
- O cockpit chama, por cliente real, a sequencia `definition/intake -> simulation -> governed review -> status transition -> semantic publication confirmation -> publication/materializations -> enforcement validation`.
|
|
299
|
+
- Quando um preview traz `diagnostics.projectKnowledgeAudit`, o cockpit de Project Knowledge pode propor `add_evidence` via `/api/praxis/config/domain-knowledge/change-sets`, validar, aprovar, aplicar e reler a projecao segura sem expor o conteudo bruto da evidencia na UI.
|
|
300
|
+
- Quando o prompt de authoring trouxer um caminho explicito como `/api/helpdesk/chamados`, a validacao do cockpit deve confirmar que o backend preservou esse alvo canonico no handoff, sem re-grounding por vocabulario solto do prompt.
|
|
301
|
+
- Timeline e historico governado sao observabilidade derivada. O cockpit pode exibir indisponibilidade dessa projecao, mas nao deve tratar a timeline como fonte primaria ou bloquear create/simulate/approve/activate quando o backend antigo ainda nao expuser o endpoint.
|
|
302
|
+
- A revisao deve exibir readiness, approvals, warnings, diagnostics e predicted materializations vindos do backend; nao reconstrua heuristicas de publicacao no frontend.
|
|
303
|
+
- A publicacao deve ser uma acao deliberada e confirmada semanticamente antes de chamar `/domain-rules/publications`.
|
|
304
|
+
- Materializacoes resultantes devem ser apresentadas como projecoes derivadas irmas (`option_source`, `backend_validation`, `workflow_action`, `approval_policy` ou futuras camadas), nao como novas regras primarias.
|
|
305
|
+
- A validacao de enforcement no cockpit consulta materializacoes aplicadas e prepara a evidencia para o runtime consumidor; ela nao reimplementa localmente a politica publicada.
|
|
245
306
|
|
|
246
307
|
Integracoes comuns:
|
|
247
308
|
- `SettingsPanelService.open({ id, title, content: { component, inputs } })` para page settings e shell editors
|