@praxisui/page-builder 9.0.45 → 9.0.47
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 +31 -0
- package/ai/component-registry.json +124 -63
- package/fesm2022/praxisui-page-builder.mjs +83 -100
- package/package.json +4 -4
- package/types/praxisui-page-builder.d.ts +24 -17
package/README.md
CHANGED
|
@@ -287,6 +287,15 @@ Repeated parent/resource context can be declared through `UiCompositionPlan.cont
|
|
|
287
287
|
|
|
288
288
|
Compiled links may retain `metadata.source: 'ui-composition-plan'` as explicit authoring provenance. This value is part of core's public `LinkMetadata` contract and remains distinct from `native-composition-link`, `persisted-composition-link`, and legacy migration provenance.
|
|
289
289
|
|
|
290
|
+
`bindings[].from` accepts `global-action` as the canonical continuation source for results emitted through `dynamicPage.composition.dispatch`. The authored source declares only a stable `actionId`; the runtime dispatch payload is the value delivered to state or component targets. `payload`, `payloadExpr`, `meta`, labels and result-type hints do not participate in endpoint matching and fail closed when placed on a global-action source. Those fields remain valid only for global-action targets, where they configure command dispatch. The compiler persists the source as `{ kind: 'global-action', ref: { actionId } }`, matching Core's existing runtime contract without a host adapter.
|
|
291
|
+
|
|
292
|
+
When a `template` transform changes the semantic kind of its source, declare
|
|
293
|
+
`transform.output.semanticKind` (and, when applicable, `schemaId`, `schemaRef`
|
|
294
|
+
and `stableShape`). The compiler projects the same output hint onto the canonical
|
|
295
|
+
pipeline and its materializing step, allowing registry-aware preflight to compare
|
|
296
|
+
the transformed contract with the target port. Do not relax target compatibility
|
|
297
|
+
or relabel the source port to hide a transformation.
|
|
298
|
+
|
|
290
299
|
The official Employee Operations case is an executable regression for this boundary. Its first-class `*.ui-composition-plan.json` artifact expresses 22 persisted links as one `selectionSyncs` declaration, two `contextScopes` declarations and one explicit transformed binding, while compilation preserves the same 22 source/target paths, guards, transforms and policies. This reduces the wiring declarations from 22 to 4 (82%) without hiding the executable graph from runtime inspection, audit or the public JSON viewer. Context scopes are deliberately limited to direct inheritance: a value that must be wrapped or reshaped remains an explicit binding with a canonical transform.
|
|
291
300
|
|
|
292
301
|
Page-owned copy can remain compact in the authoring plan. When a `PraxisTextValue` descriptor declares only `{ key }` and the key exists in `i18n.dictionaries[fallbackLocale]`, both canonical compilers materialize that message as the descriptor's runtime `text` fallback. The persisted `WidgetPageDefinition` therefore stays portable while authors do not repeat the same fallback beside every key. Explicit `text` still wins and unknown keys remain untouched, so the compiler never invents copy.
|
|
@@ -307,6 +316,28 @@ Every official local apply of a `UiCompositionPlan` now runs a fail-closed prefl
|
|
|
307
316
|
|
|
308
317
|
`preflightUiCompositionPlan(plan, targetRegistry)` is exported by `@praxisui/page-builder` for official Dynamic Page hosts that compile plans outside `DynamicPageBuilderComponent`. Those hosts must inject their runtime `ComponentMetadataRegistry`; omitting it fails closed with `UI_COMPOSITION_TARGET_REGISTRY_REQUIRED`.
|
|
309
318
|
|
|
319
|
+
Workspace contributors can exercise this path in the reference host at
|
|
320
|
+
`/dynamic-page-lab`. Its **Certificação do UiCompositionPlan** station displays
|
|
321
|
+
the compact plan, registry-aware preflight, compiled `WidgetPageDefinition`, real
|
|
322
|
+
Dynamic Page, diagnostics, widget-event trail and sanitized runtime observation
|
|
323
|
+
without introducing another compiler or registry. Its scenario catalog reuses the
|
|
324
|
+
same A2-A4 plan fixtures exercised by focused certification specs—forms/filters,
|
|
325
|
+
CRUD lifecycle and parent/related-resource—alongside the certified A5
|
|
326
|
+
Table/shell/global-action contracts. An unknown component proves fail-closed
|
|
327
|
+
behavior. The browser proof for the related-resource scenario requires a real
|
|
328
|
+
parent selection, the relationship filter and visible child columns/data derived
|
|
329
|
+
from the remote schema; request success alone is insufficient. The same route's
|
|
330
|
+
People Operations dashboard is authored as a 9-widget/10-binding plan and proves
|
|
331
|
+
filter and governed decision propagation through the compiled graph. The broader
|
|
332
|
+
certification matrix remains tracked in issue #430; issue #431 closed the former
|
|
333
|
+
global-action source limitation.
|
|
334
|
+
|
|
335
|
+
For multi-consumer interaction state, author one `event -> state` binding and
|
|
336
|
+
project `state -> component-port` to each consumer. A direct event delivery is
|
|
337
|
+
transient; it must not become the page's durable semantic source across runtime
|
|
338
|
+
recomposition. The People Operations certification scenario applies this rule to
|
|
339
|
+
`state.activeFilter` and verifies the complete fan-out in the browser.
|
|
340
|
+
|
|
310
341
|
When a preview contains both `uiCompositionPlan` and `compiledFormPatch`, the semantic plan is the attested source for local preview. Persistence rebuilds `patch.page` from that locally materialized page so a backend patch cannot bypass the registry-aware gate. Provider readiness in this cut means that the target registry contains owner metadata with a materializable Angular component type; uniform certification of the owner providers and bootstrap recipes remains tracked by issue #392 and is not inferred through Page Builder heuristics.
|
|
311
342
|
|
|
312
343
|
Streaming apply is fail-closed. A preview is persistable only when it is the unchanged payload of an applicable terminal `result` event and its diagnostics carry the matching `streamId`, `threadId`, `turnId`, and `resultEventId`. A locally regenerated or normalized preview remains available for review, but it cannot reuse an older terminal reference or call `page-apply`; the backend must issue a new terminal result for the new patch.
|