@praxisui/page-builder 9.0.68-rc.0 → 9.0.68-rc.2
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 +147 -3
- package/ai/component-registry.json +76 -10
- package/fesm2022/praxisui-page-builder.mjs +763 -348
- package/package.json +4 -4
- package/types/praxisui-page-builder.d.ts +85 -1
package/README.md
CHANGED
|
@@ -65,6 +65,20 @@ content-aware minimums remain important, including in restored layouts; changing
|
|
|
65
65
|
recipe does not silently rewrite a saved user page. Auto-content rows still do not
|
|
66
66
|
provide pixel-continuous vertical shrinking of a one-row widget.
|
|
67
67
|
|
|
68
|
+
### Organization references and inherited appearance
|
|
69
|
+
|
|
70
|
+
Selecting an organization reference preserves an existing canvas and does not convert a
|
|
71
|
+
flow page into a canvas. Explicitly editing the base grid creates a canvas when none exists,
|
|
72
|
+
placing every widget while preserving its identity and inputs. Untouched row units, gaps and
|
|
73
|
+
row-height defaults remain omitted; the editor does not freeze resolved runtime defaults.
|
|
74
|
+
**Inherit appearance** keeps the page shell preset unset so the theme/context can continue
|
|
75
|
+
to supply it. Selecting a shell preset writes an explicit override; clearing it restores
|
|
76
|
+
inheritance, including after Apply and reopen.
|
|
77
|
+
|
|
78
|
+
Inside Widget Settings, **Undo last resize** prepares the inverse preview; **Apply** commits
|
|
79
|
+
it to the page. This differs from discarding an unapplied draft and from saving the page
|
|
80
|
+
through its host. Preset selection does not introduce collective repacking or new AI operations.
|
|
81
|
+
|
|
68
82
|
### Device composition
|
|
69
83
|
|
|
70
84
|
**Page settings → Responsiveness** opens on Mobile and shows one device at a time.
|
|
@@ -741,9 +755,20 @@ adjustments are counted; **Use style only** clears those adjustments while prese
|
|
|
741
755
|
the chosen preset, identity and actions. The sample illustrates the shell, not the
|
|
742
756
|
widget's real content or dimensions.
|
|
743
757
|
|
|
744
|
-
The local Dynamic Page Lab
|
|
745
|
-
|
|
746
|
-
|
|
758
|
+
The local Dynamic Page Lab reads all 14 styles from the canonical shell catalog.
|
|
759
|
+
Its comparison applies identical content to 13 card styles, with a separate compact
|
|
760
|
+
specimen for `filter-bar`. Choose people/capacity, finance/purchasing or operations/services;
|
|
761
|
+
compare metrics, trends, queues, tables, record details or filter summaries; inspect
|
|
762
|
+
ready, empty, simulated loading, recoverable error and read-only presentations.
|
|
763
|
+
These are illustrative content/state specimens, not integrations with data adapters,
|
|
764
|
+
ChartDocument or domain permissions. Recovery preserves the selected domain and content.
|
|
765
|
+
|
|
766
|
+
Both page configuration editors include a collapsible comparison of the four canonical
|
|
767
|
+
organizations, their structural roles and intended uses. The diagram is schematic;
|
|
768
|
+
it does not preview or rearrange the user's canvas. Effective theme and layout suggestion
|
|
769
|
+
are distinguished: an explicit theme wins over the layout default. Explicit layout/grouping
|
|
770
|
+
and canvas coordinates remain authoritative. Mobile preferences describe composition intent;
|
|
771
|
+
selecting an organization alone does not create tabs, hide content or wire master/detail.
|
|
747
772
|
|
|
748
773
|
|
|
749
774
|
The shell editor gives the active topic the available editing width. Its illustrative sample follows
|
|
@@ -872,3 +897,122 @@ O modo **Somente conteúdo** altera apenas `shell.kind`: título, descrição, a
|
|
|
872
897
|
aparência e ações continuam sendo editados e preservados em Aplicar/Salvar/Redefinir e na
|
|
873
898
|
reabertura. Ocultar a moldura no runtime não autoriza descartar o rascunho dos demais campos.
|
|
874
899
|
Os campos de aparência mantêm rótulos flutuantes visíveis mesmo quando estão vazios.
|
|
900
|
+
|
|
901
|
+
### Preset studio: inherited organization and operational scenarios
|
|
902
|
+
|
|
903
|
+
Both page editors pass `layoutPresetOptions` to the comparison and use Core's shared
|
|
904
|
+
`resolveWidgetPageLayoutPreset` behavior. The comparison identifies inherited organization,
|
|
905
|
+
marks the effective layout, distinguishes explicit/inherited themes, and exposes all diagram
|
|
906
|
+
roles as a semantic list. The separate required-role list describes mandatory slots.
|
|
907
|
+
Shell style labels resolve through Core in Portuguese and English, including outside editors.
|
|
908
|
+
|
|
909
|
+
The local `/dynamic-page-lab` preset studio links six governed scenarios from
|
|
910
|
+
`ERGON_COMPOSITION_CASES` by task: catalog maintenance, record detail, tabbed dossier,
|
|
911
|
+
missions/teams, actions with justification, and partial outcomes in bulk actions. These routes consume the existing composition
|
|
912
|
+
recipes and real Quick Start data; navigation does not apply the selected appearance to them.
|
|
913
|
+
They may write data when their existing actions are confirmed. The style specimens remain
|
|
914
|
+
illustrative and keep keyboard focus on the recovered specimen after simulated failure.
|
|
915
|
+
These scenarios demonstrate existing capabilities; they do not define new shell presets or business contracts.
|
|
916
|
+
|
|
917
|
+
|
|
918
|
+
### Effective shell style and material authoring
|
|
919
|
+
|
|
920
|
+
The widget Styles topic shows the base finish, whether it is explicit or inherited from the
|
|
921
|
+
page/theme, and the number of appearance overrides. Changing the base finish preserves those
|
|
922
|
+
overrides. “Use style only” clears appearance overrides without removing identity or actions.
|
|
923
|
+
The live preview uses the runtime-resolved inherited preset; saving an inherited choice leaves
|
|
924
|
+
`shell.preset` absent. Content-only presentation explicitly indicates that the outer shell is disabled.
|
|
925
|
+
|
|
926
|
+
Advanced appearance round-trips `card.backdropFilter` and `card.fallbackBackground`, including
|
|
927
|
+
CSS variables. The existing `widget.shell.configure` AI operation describes those paths; they
|
|
928
|
+
configure the shell only. Dark glass uses transparency and blur in normal flow, with an opaque
|
|
929
|
+
fallback for reduced transparency, unavailable filters and expanded/fullscreen surfaces.
|
|
930
|
+
|
|
931
|
+
|
|
932
|
+
The advanced shell editor also round-trips `card.borderWidth`, `card.borderStyle`,
|
|
933
|
+
`header.borderWidth` and `header.borderStyle`. Card controls accept per-side CSS
|
|
934
|
+
shorthands; header controls validate a single bottom-divider width/style. Invalid
|
|
935
|
+
CSS marks the Appearance topic invalid. Preview, custom preset thumbnails, override
|
|
936
|
+
counting and “Use style only” consume/clear these same canonical fields. The existing
|
|
937
|
+
`widget.shell.configure` operation advertises them without another operation or preset ID.
|
|
938
|
+
|
|
939
|
+
In `/dynamic-page-lab`, open **Estúdio de presets → Testar com componentes reais →
|
|
940
|
+
Explorar cores e bordas**. The optional experiment combines five demonstration palettes,
|
|
941
|
+
two surface tones, four fills and six stroke choices over the actual table, chart,
|
|
942
|
+
form and indicator. It is disabled by default; turning it off restores the selected
|
|
943
|
+
preset without recreating the component's inputs. These are illustrative appearance
|
|
944
|
+
overrides, not business status colors or additional public presets. The UI explains
|
|
945
|
+
the continuous-layer limitation of gradient borders combined with non-solid strokes.
|
|
946
|
+
|
|
947
|
+
Empty or whitespace-only appearance fields are omitted so inheritance can resume.
|
|
948
|
+
Header border color accepts one bottom-divider color; card border color may vary by
|
|
949
|
+
side. Invalid values block Save, and correcting them restores the editor's validity.
|
|
950
|
+
|
|
951
|
+
### Dedicated template studio
|
|
952
|
+
|
|
953
|
+
The canvas page settings editor separates four tasks into exclusive tabs:
|
|
954
|
+
|
|
955
|
+
- **Visual templates**: four themes with token-based illustrative samples, effective-theme
|
|
956
|
+
inheritance and fourteen canonical widget-surface choices under a dedicated disclosure.
|
|
957
|
+
- **Layout templates**: the existing composition catalog, open for comparison with role
|
|
958
|
+
diagrams, required roles and theme precedence. Canvas positions remain explicit.
|
|
959
|
+
- **Arrange**: nine visual distributions for existing widgets: stack, equal halves,
|
|
960
|
+
left/right two-thirds emphasis, equal thirds, broad center, left/right three-quarter
|
|
961
|
+
emphasis and equal quarters. Choices show their actual integer column widths.
|
|
962
|
+
- **Adjustments**: grid, grouping, device layouts, context, state and widget limits.
|
|
963
|
+
|
|
964
|
+
Indivisible columns are apportioned by fractional remainder, keeping equal lanes within
|
|
965
|
+
one column. Arrangement thumbnails use those actual integer widths. Text details include
|
|
966
|
+
both source and proposed positions and sizes.
|
|
967
|
+
|
|
968
|
+
Navigation does not dirty the document. Gallery thumbnails are illustrative; arrangement
|
|
969
|
+
review maps use the actual before/after canvas geometry and stable widget numbers, with
|
|
970
|
+
accessible details of names and positions. A proposal receives focus above the gallery.
|
|
971
|
+
Page theme tokens come from Core; per-widget overrides retain their existing priority.
|
|
972
|
+
The editor provides pt-BR/en-US copy, keyboard focus, reduced-motion behavior and layouts
|
|
973
|
+
for narrow panels. This introduces no persisted template type or parallel layout engine.
|
|
974
|
+
|
|
975
|
+
### Explicit collective canvas arrangement
|
|
976
|
+
|
|
977
|
+
In **Page settings → Arrange**, choose a visual distribution. This is an
|
|
978
|
+
explicit arrangement of a complete existing base canvas, independent of layout preset
|
|
979
|
+
selection. The current geometric reading order assigns columns; no titles or business
|
|
980
|
+
roles are inferred. Heights, content, shell appearance, widget keys and composition links
|
|
981
|
+
are preserved. The last column receives any remainder when the grid is indivisible.
|
|
982
|
+
|
|
983
|
+
Review the numbered before/after maps and widget names, then choose **Use arrangement
|
|
984
|
+
in draft** and the Settings Panel's **Apply**. Preparation does not dirty or emit the page.
|
|
985
|
+
A changed draft immediately removes the stale proposal and clears its selection. **Undo arrangement** restores the previous
|
|
986
|
+
geometry in the draft and can be applied through the same panel. The single undo survives
|
|
987
|
+
an exact page echo after Apply; replacing the page or resetting the editor clears it.
|
|
988
|
+
Save continues to use the existing persistence flow. Core confirms a successful
|
|
989
|
+
Apply through the session's transient `appliedValues$`; the page editor uses the existing
|
|
990
|
+
`SettingsValueProvider.acceptAppliedValue` contract to advance its baseline. The receipt
|
|
991
|
+
contains the authored document captured before runtime enrichment, not materialized data.
|
|
992
|
+
|
|
993
|
+
Core's `prepareCanvasArrangement(page, widths)` owns the atomic calculation. Widths are
|
|
994
|
+
positive integer grid spans whose sum equals `canvas.columns`; they are not preset IDs or
|
|
995
|
+
semantic roles. Success returns a canvas and changed keys. Failure returns no canvas,
|
|
996
|
+
blocked keys and `geometry`, `limits` or `device-overrides`. Position locks are fixed
|
|
997
|
+
obstacles; size locks retain their size; limits are never rewritten to fit an arrangement.
|
|
998
|
+
Overlapping or incomplete source geometry is rejected instead of repaired implicitly.
|
|
999
|
+
|
|
1000
|
+
The scope is the base canvas. Inheriting devices follow the base. Complete device geometry
|
|
1001
|
+
remains untouched. Partial device anchors that would inherit changed geometry block the
|
|
1002
|
+
proposal; this action does not invent overrides or provide a device-specific solver.
|
|
1003
|
+
This manual geometry operation adds no assistant tool or intent-routing shortcut. The
|
|
1004
|
+
existing AI manifest's canvas operation remains separate and is not certified as invoking
|
|
1005
|
+
this preparation helper.
|
|
1006
|
+
|
|
1007
|
+
|
|
1008
|
+
Collective arrangement admission is repeated when producing the final provider value,
|
|
1009
|
+
using Core `validateCanvasArrangement(candidate, source)`. A grid reduction cannot emit
|
|
1010
|
+
items outside the current columns; correcting the columns restores eligibility without
|
|
1011
|
+
silently calculating a different arrangement. Effective numeric limits are checked for
|
|
1012
|
+
inheriting devices too, even when they author no positions. A changed rendered diagnostic
|
|
1013
|
+
invalidates the proposal safely and requires preparation again.
|
|
1014
|
+
|
|
1015
|
+
Undo restores only `col`, `row`, `colSpan` and `rowSpan`. Additional gap, theme, content-size
|
|
1016
|
+
or limit edits remain in the draft. The owner-confirmed Apply receipt retains the undo
|
|
1017
|
+
when the reviewed geometry matches, including when unrelated fields were edited before
|
|
1018
|
+
Apply. Reset or replacement of the page still invalidates the transaction.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-09-
|
|
3
|
+
"generatedAt": "2026-09-10T01:25:13.157Z",
|
|
4
4
|
"packageName": "@praxisui/page-builder",
|
|
5
|
-
"packageVersion": "9.0.68-rc.
|
|
5
|
+
"packageVersion": "9.0.68-rc.2",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -2073,6 +2073,72 @@
|
|
|
2073
2073
|
"shell": {
|
|
2074
2074
|
"type": "object",
|
|
2075
2075
|
"properties": {
|
|
2076
|
+
"appearance": {
|
|
2077
|
+
"type": "object",
|
|
2078
|
+
"properties": {
|
|
2079
|
+
"card": {
|
|
2080
|
+
"type": "object",
|
|
2081
|
+
"properties": {
|
|
2082
|
+
"background": {
|
|
2083
|
+
"type": "string"
|
|
2084
|
+
},
|
|
2085
|
+
"borderColor": {
|
|
2086
|
+
"type": "string"
|
|
2087
|
+
},
|
|
2088
|
+
"borderWidth": {
|
|
2089
|
+
"type": "string",
|
|
2090
|
+
"description": "CSS border width; accepts per-side values."
|
|
2091
|
+
},
|
|
2092
|
+
"borderStyle": {
|
|
2093
|
+
"type": "string",
|
|
2094
|
+
"description": "CSS border style: solid, dashed, dotted, double, none; accepts per-side values."
|
|
2095
|
+
},
|
|
2096
|
+
"borderRadius": {
|
|
2097
|
+
"type": "string"
|
|
2098
|
+
},
|
|
2099
|
+
"shadow": {
|
|
2100
|
+
"type": "string"
|
|
2101
|
+
},
|
|
2102
|
+
"backdropFilter": {
|
|
2103
|
+
"type": "string",
|
|
2104
|
+
"description": "CSS backdrop effect for a translucent card, e.g. blur(16px) saturate(125%). none disables it."
|
|
2105
|
+
},
|
|
2106
|
+
"fallbackBackground": {
|
|
2107
|
+
"type": "string",
|
|
2108
|
+
"description": "Opaque background for reduced transparency, unsupported blur and fullscreen/expanded modes."
|
|
2109
|
+
}
|
|
2110
|
+
}
|
|
2111
|
+
},
|
|
2112
|
+
"header": {
|
|
2113
|
+
"type": "object",
|
|
2114
|
+
"properties": {
|
|
2115
|
+
"background": {
|
|
2116
|
+
"type": "string"
|
|
2117
|
+
},
|
|
2118
|
+
"borderColor": {
|
|
2119
|
+
"type": "string"
|
|
2120
|
+
},
|
|
2121
|
+
"borderWidth": {
|
|
2122
|
+
"type": "string",
|
|
2123
|
+
"description": "CSS width of the bottom header divider."
|
|
2124
|
+
},
|
|
2125
|
+
"borderStyle": {
|
|
2126
|
+
"type": "string",
|
|
2127
|
+
"description": "CSS style of the bottom header divider."
|
|
2128
|
+
},
|
|
2129
|
+
"titleColor": {
|
|
2130
|
+
"type": "string"
|
|
2131
|
+
},
|
|
2132
|
+
"subtitleColor": {
|
|
2133
|
+
"type": "string"
|
|
2134
|
+
},
|
|
2135
|
+
"iconColor": {
|
|
2136
|
+
"type": "string"
|
|
2137
|
+
}
|
|
2138
|
+
}
|
|
2139
|
+
}
|
|
2140
|
+
}
|
|
2141
|
+
},
|
|
2076
2142
|
"avatar": {
|
|
2077
2143
|
"type": "object",
|
|
2078
2144
|
"additionalProperties": false,
|
|
@@ -3821,9 +3887,9 @@
|
|
|
3821
3887
|
{
|
|
3822
3888
|
"chunkIndex": 10,
|
|
3823
3889
|
"chunkKind": "authoring_manifest",
|
|
3824
|
-
"content": "{\"operationId\":\"widget.shell.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure widget shell Effects: compile-domain-patch. Rename the employees widget card and enable the refresh shell action.\",\"scope\":\"templating\",\"target\":{\"kind\":\"widgetShell\",\"resolver\":\"widget-shell-by-widget-key\",\"required\":true},\"inputContract\":{\"required\":[\"widgetKey\"],\"properties\":[\"widgetKey\",\"shell\"],\"semanticTerms\":[\"widgetKey\",\"shell\",\"shell.avatar\",\"shell.stickyHeader\",\"shell.avatar.imageSrc\",\"shell.avatar.name\",\"shell.avatar.initials\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"widgets[].shell\"],\"validators\":[{\"validatorId\":\"widget-exists\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_WIDGET_EXISTS\",\"description\":\"Target widget must exist.\"},{\"validatorId\":\"widget-shell-shape-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_SHELL_SHAPE\",\"description\":\"Widget shell config must match the shell editor contract.\"},{\"validatorId\":\"settings-panel-bridge-available\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_SETTINGS_BRIDGE\",\"description\":\"Settings panel bridge must be available for shell/page editors.\"},{\"validatorId\":\"child-inputs-not-mutated\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CHILD_INPUTS_NOT_MUTATED\",\"description\":\"Shell edits cannot mutate child inputs.\"}],\"preconditions\":[\"page-loaded\",\"target-widget-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-widget-shell\",\"request\":\"Rename the employees widget card and enable the refresh shell action.\",\"operationId\":\"widget.shell.configure\",\"target\":\"employees-table\",\"params\":{\"widgetKey\":\"employees-table\",\"shell\":{\"title\":\"Employees\",\"actions\":[{\"id\":\"refresh\"}]}},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
3890
|
+
"content": "{\"operationId\":\"widget.shell.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure widget shell Effects: compile-domain-patch. Rename the employees widget card and enable the refresh shell action.\",\"scope\":\"templating\",\"target\":{\"kind\":\"widgetShell\",\"resolver\":\"widget-shell-by-widget-key\",\"required\":true},\"inputContract\":{\"required\":[\"widgetKey\"],\"properties\":[\"widgetKey\",\"shell\"],\"semanticTerms\":[\"widgetKey\",\"shell\",\"shell.appearance\",\"shell.avatar\",\"shell.stickyHeader\",\"shell.appearance.card\",\"shell.appearance.header\",\"shell.avatar.imageSrc\",\"shell.avatar.name\",\"shell.avatar.initials\",\"shell.appearance.card.background\",\"shell.appearance.card.borderColor\",\"shell.appearance.card.borderWidth\",\"shell.appearance.card.borderStyle\",\"shell.appearance.card.borderRadius\",\"shell.appearance.card.shadow\",\"shell.appearance.card.backdropFilter\",\"shell.appearance.card.fallbackBackground\",\"shell.appearance.header.background\",\"shell.appearance.header.borderColor\",\"shell.appearance.header.borderWidth\",\"shell.appearance.header.borderStyle\",\"shell.appearance.header.titleColor\",\"shell.appearance.header.subtitleColor\",\"shell.appearance.header.iconColor\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"widgets[].shell\"],\"validators\":[{\"validatorId\":\"widget-exists\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_WIDGET_EXISTS\",\"description\":\"Target widget must exist.\"},{\"validatorId\":\"widget-shell-shape-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_SHELL_SHAPE\",\"description\":\"Widget shell config must match the shell editor contract.\"},{\"validatorId\":\"settings-panel-bridge-available\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_SETTINGS_BRIDGE\",\"description\":\"Settings panel bridge must be available for shell/page editors.\"},{\"validatorId\":\"child-inputs-not-mutated\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CHILD_INPUTS_NOT_MUTATED\",\"description\":\"Shell edits cannot mutate child inputs.\"}],\"preconditions\":[\"page-loaded\",\"target-widget-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-widget-shell\",\"request\":\"Rename the employees widget card and enable the refresh shell action.\",\"operationId\":\"widget.shell.configure\",\"target\":\"employees-table\",\"params\":{\"widgetKey\":\"employees-table\",\"shell\":{\"title\":\"Employees\",\"actions\":[{\"id\":\"refresh\"}]}},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
3825
3891
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3826
|
-
"contentHash": "
|
|
3892
|
+
"contentHash": "a21737f13478c3a046020e438cacdb33ad1733d554608317954901b4480b7a19",
|
|
3827
3893
|
"sourceKind": "component_definition",
|
|
3828
3894
|
"sourceId": "praxis-page-builder",
|
|
3829
3895
|
"corpusVersion": "1.0.0"
|
|
@@ -3941,9 +4007,9 @@
|
|
|
3941
4007
|
{
|
|
3942
4008
|
"chunkIndex": 22,
|
|
3943
4009
|
"chunkKind": "authoring_manifest",
|
|
3944
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"widget.shell.configure\",\"title\":\"Configure widget shell\",\"scope\":\"templating\",\"targetKind\":\"widgetShell\",\"target\":{\"kind\":\"widgetShell\",\"resolver\":\"widget-shell-by-widget-key\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"widgetKey\"],\"properties\":{\"widgetKey\":{\"type\":\"string\"},\"shell\":{\"type\":\"object\",\"properties\":{\"
|
|
4010
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"widget.shell.configure\",\"title\":\"Configure widget shell\",\"scope\":\"templating\",\"targetKind\":\"widgetShell\",\"target\":{\"kind\":\"widgetShell\",\"resolver\":\"widget-shell-by-widget-key\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"widgetKey\"],\"properties\":{\"widgetKey\":{\"type\":\"string\"},\"shell\":{\"type\":\"object\",\"properties\":{\"appearance\":{\"type\":\"object\",\"properties\":{\"card\":{\"type\":\"object\",\"properties\":{\"background\":{\"type\":\"string\"},\"borderColor\":{\"type\":\"string\"},\"borderWidth\":{\"type\":\"string\",\"description\":\"CSS border width; accepts per-side values.\"},\"borderStyle\":{\"type\":\"string\",\"description\":\"CSS border style: solid, dashed, dotted, double, none; accepts per-side values.\"},\"borderRadius\":{\"type\":\"string\"},\"shadow\":{\"type\":\"string\"},\"backdropFilter\":{\"type\":\"string\",\"description\":\"CSS backdrop effect for a translucent card, e.g. blur(16px) saturate(125%). none disables it.\"},\"fallbackBackground\":{\"type\":\"string\",\"description\":\"Opaque background for reduced transparency, unsupported blur and fullscreen/expanded modes.\"}}},\"header\":{\"type\":\"object\",\"properties\":{\"background\":{\"type\":\"string\"},\"borderColor\":{\"type\":\"string\"},\"borderWidth\":{\"type\":\"string\",\"description\":\"CSS width of the bottom header divider.\"},\"borderStyle\":{\"type\":\"string\",\"description\":\"CSS style of the bottom header divider.\"},\"titleColor\":{\"type\":\"string\"},\"subtitleColor\":{\"type\":\"string\"},\"iconColor\":{\"type\":\"string\"}}}}},\"avatar\":{\"type\":\"object\",\"additionalProperties\":false,\"properties\":{\"imageSrc\":{\"type\":\"string\",\"description\":\"Photo URL or shell template, including ${transient.employee.avatarUrl}.\"},\"name\":{\"type\":\"string\",\"description\":\"Accessible name and initials fallback; supports shell templates.\"},\"initials\":{\"type\":\"string\",\"description\":\"Optional explicit initials fallback.\"}}},\"stickyHeader\":{\"type\":\"boolean\",\"description\":\"Retain the existing header within the widget during page scrolling; suspended for drag authoring, collapsed/overlay states and scroll recovery.\"}}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-widget-shell-configure\",\"handlerContract\":{\"reads\":[\"WidgetPageDefinition.widgets\",\"WidgetShellEditorComponent\",\"SettingsPanelBridge\"],\"writes\":[\"page.widgets[].shell\"],\"identityKeys\":[\"widgetKey\"],\"failureModes\":[\"widget-not-found\",\"settings-panel-bridge-missing\",\"shell-config-invalid\"],\"description\":\"Updates the page-builder-owned widget shell without editing child component inputs.\"}}],\"validators\":[\"widget-exists\",\"widget-shell-shape-valid\",\"settings-panel-bridge-available\",\"child-inputs-not-mutated\"],\"affectedPaths\":[\"widgets[].shell\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"page-loaded\",\"target-widget-exists\"]}]}",
|
|
3945
4011
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3946
|
-
"contentHash": "
|
|
4012
|
+
"contentHash": "25fb9a56747225c1826dbbadb9ffaeb717872428bfe6a325d7a5ee1dac3ecd0a",
|
|
3947
4013
|
"sourceKind": "component_definition",
|
|
3948
4014
|
"sourceId": "praxis-page-builder",
|
|
3949
4015
|
"corpusVersion": "1.0.0"
|
|
@@ -3951,9 +4017,9 @@
|
|
|
3951
4017
|
{
|
|
3952
4018
|
"chunkIndex": 23,
|
|
3953
4019
|
"chunkKind": "authoring_manifest",
|
|
3954
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"composition.link.
|
|
4020
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"composition.link.add\",\"title\":\"Add page composition link\",\"scope\":\"dataBinding\",\"targetKind\":\"compositionLink\",\"target\":{\"kind\":\"compositionLink\",\"resolver\":\"composition-link-by-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"from\",\"to\",\"intent\"],\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"from\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"kind\",\"ref\"],\"additionalProperties\":false,\"properties\":{\"kind\":{\"enum\":[\"component-port\"]},\"ref\":{\"type\":\"object\",\"required\":[\"widget\",\"port\",\"direction\"],\"additionalProperties\":false,\"properties\":{\"widget\":{\"type\":\"string\"},\"port\":{\"type\":\"string\"},\"direction\":{\"enum\":[\"input\",\"output\"]},\"bindingPath\":{\"type\":\"string\"},\"nestedPath\":{\"type\":\"array\"}}}}},{\"type\":\"object\",\"required\":[\"kind\",\"ref\"],\"additionalProperties\":false,\"properties\":{\"kind\":{\"enum\":[\"state\"]},\"ref\":{\"type\":\"object\",\"required\":[\"path\"],\"additionalProperties\":false,\"properties\":{\"path\":{\"type\":\"string\"},\"layer\":{\"enum\":[\"values\",\"derived\",\"transient\"]}}}}},{\"type\":\"object\",\"required\":[\"kind\",\"ref\"],\"additionalProperties\":false,\"properties\":{\"kind\":{\"enum\":[\"global-action\"]},\"ref\":{\"type\":\"object\",\"required\":[\"actionId\"],\"additionalProperties\":false,\"properties\":{\"actionId\":{\"type\":\"string\"}}}}}]},\"to\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"kind\",\"ref\"],\"additionalProperties\":false,\"properties\":{\"kind\":{\"enum\":[\"component-port\"]},\"ref\":{\"type\":\"object\",\"required\":[\"widget\",\"port\",\"direction\"],\"additionalProperties\":false,\"properties\":{\"widget\":{\"type\":\"string\"},\"port\":{\"type\":\"string\"},\"direction\":{\"enum\":[\"input\",\"output\"]},\"bindingPath\":{\"type\":\"string\"},\"nestedPath\":{\"type\":\"array\"}}}}},{\"type\":\"object\",\"required\":[\"kind\",\"ref\"],\"additionalProperties\":false,\"properties\":{\"kind\":{\"enum\":[\"state\"]},\"ref\":{\"type\":\"object\",\"required\":[\"path\"],\"additionalProperties\":false,\"properties\":{\"path\":{\"type\":\"string\"},\"layer\":{\"enum\":[\"values\",\"derived\",\"transient\"]}}}}},{\"type\":\"object\",\"required\":[\"kind\",\"ref\"],\"additionalProperties\":false,\"properties\":{\"kind\":{\"enum\":[\"global-action\"]},\"ref\":{\"type\":\"object\",\"required\":[\"actionId\"],\"additionalProperties\":false,\"properties\":{\"actionId\":{\"type\":\"string\"},\"payload\":{\"type\":\"object\"},\"payloadExpr\":{\"type\":\"string\"},\"meta\":{\"type\":\"object\"}}}}}]},\"intent\":{\"enum\":[\"event-propagation\",\"state-write\",\"state-read\",\"command-dispatch\",\"selection-sync\",\"data-projection\",\"status-propagation\"]},\"condition\":{\"type\":\"object\"},\"transform\":{\"type\":\"object\"},\"policy\":{\"type\":\"object\"},\"metadata\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-composition-link-add\",\"handlerContract\":{\"reads\":[\"WidgetPageDefinition.composition.links\",\"WidgetPageDefinition.widgets\",\"PAGE_BUILDER_AI_CAPABILITIES\"],\"writes\":[\"page.composition.links[]\"],\"identityKeys\":[\"id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"from\",\"to\",\"intent\"],\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\"},\"from\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"kind\",\"ref\"],\"additionalProperties\":false,\"properties\":{\"kind\":{\"enum\":[\"component-port\"]},\"ref\":{\"type\":\"object\",\"required\":[\"widget\",\"port\",\"direction\"],\"additionalProperties\":false,\"properties\":{\"widget\":{\"type\":\"string\"},\"port\":{\"type\":\"string\"},\"direction\":{\"enum\":[\"input\",\"output\"]},\"bindingPath\":{\"type\":\"string\"},\"nestedPath\":{\"type\":\"array\"}}}}},{\"type\":\"object\",\"required\":[\"kind\",\"ref\"],\"additionalProperties\":false,\"properties\":{\"kind\":{\"enum\":[\"state\"]},\"ref\":{\"type\":\"object\",\"required\":[\"path\"],\"additionalProperties\":false,\"properties\":{\"path\":{\"type\":\"string\"},\"layer\":{\"enum\":[\"values\",\"derived\",\"transient\"]}}}}},{\"type\":\"object\",\"required\":[\"kind\",\"ref\"],\"additionalProperties\":false,\"properties\":{\"kind\":{\"enum\":[\"global-action\"]},\"ref\":{\"type\":\"object\",\"required\":[\"actionId\"],\"additionalProperties\":false,\"properties\":{\"actionId\":{\"type\":\"string\"}}}}}]},\"to\":{\"oneOf\":[{\"type\":\"object\",\"required\":[\"kind\",\"ref\"],\"additionalProperties\":false,\"properties\":{\"kind\":{\"enum\":[\"component-port\"]},\"ref\":{\"type\":\"object\",\"required\":[\"widget\",\"port\",\"direction\"],\"additionalProperties\":false,\"properties\":{\"widget\":{\"type\":\"string\"},\"port\":{\"type\":\"string\"},\"direction\":{\"enum\":[\"input\",\"output\"]},\"bindingPath\":{\"type\":\"string\"},\"nestedPath\":{\"type\":\"array\"}}}}},{\"type\":\"object\",\"required\":[\"kind\",\"ref\"],\"additionalProperties\":false,\"properties\":{\"kind\":{\"enum\":[\"state\"]},\"ref\":{\"type\":\"object\",\"required\":[\"path\"],\"additionalProperties\":false,\"properties\":{\"path\":{\"type\":\"string\"},\"layer\":{\"enum\":[\"values\",\"derived\",\"transient\"]}}}}},{\"type\":\"object\",\"required\":[\"kind\",\"ref\"],\"additionalProperties\":false,\"properties\":{\"kind\":{\"enum\":[\"global-action\"]},\"ref\":{\"type\":\"object\",\"required\":[\"actionId\"],\"additionalProperties\":false,\"properties\":{\"actionId\":{\"type\":\"string\"},\"payload\":{\"type\":\"object\"},\"payloadExpr\":{\"type\":\"string\"},\"meta\":{\"type\":\"object\"}}}}}]},\"intent\":{\"enum\":[\"event-propagation\",\"state-write\",\"state-read\",\"command-dispatch\",\"selection-sync\",\"data-projection\",\"status-propagation\"]},\"condition\":{\"type\":\"object\"},\"transform\":{\"type\":\"object\"},\"policy\":{\"type\":\"object\"},\"metadata\":{\"type\":\"object\"}}},\"failureModes\":[\"link-id-duplicate\",\"endpoint-not-found\",\"nested-path-invalid\",\"json-logic-invalid\"],\"description\":\"Adds canonical declarative wiring in page.composition.links, including component-port nestedPath endpoints.\"}}],\"validators\":[\"composition-link-id-unique\",\"composition-endpoints-resolve\",\"nested-path-terminal-widget-key-required\",\"json-logic-condition-valid\",\"no-legacy-connections-write\"],\"affectedPaths\":[\"composition.links[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"page-loaded\",\"widgets-resolvable\"]},{\"operationId\":\"composition.link.remove\",\"title\":\"Remove page composition link\",\"scope\":\"dataBinding\",\"targetKind\":\"compositionLink\",\"target\":{\"kind\":\"compositionLink\",\"resolver\":\"composition-link-by-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\"},\"confirmed\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-composition-link-remove\",\"handlerContract\":{\"reads\":[\"WidgetPageDefinition.composition.links\"],\"writes\":[\"page.composition.links[]\"],\"identityKeys\":[\"id\"],\"failureModes\":[\"composition-link-not-found\",\"destructive-removal-not-confirmed\"],\"description\":\"Removes a canonical composition link by stable id.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"composition-link-exists\",\"destructive-removal-confirmed\",\"composition-links-still-valid\"],\"affectedPaths\":[\"composition.links[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"page-loaded\",\"target-link-exists\"]}]}",
|
|
3955
4021
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3956
|
-
"contentHash": "
|
|
4022
|
+
"contentHash": "bf19a7dd9c2b8b8dbb3a5137f8ea66247b891c76197a9443dde5f589b031afee",
|
|
3957
4023
|
"sourceKind": "component_definition",
|
|
3958
4024
|
"sourceId": "praxis-page-builder",
|
|
3959
4025
|
"corpusVersion": "1.0.0"
|
|
@@ -3961,9 +4027,9 @@
|
|
|
3961
4027
|
{
|
|
3962
4028
|
"chunkIndex": 24,
|
|
3963
4029
|
"chunkKind": "authoring_manifest",
|
|
3964
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"childOperation.delegate\",\"title\":\"Delegate widget child operation\",\"scope\":\"global\",\"targetKind\":\"childOperation\",\"target\":{\"kind\":\"childOperation\",\"resolver\":\"widget-child-authoring-manifest-operation\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"widgetKey\",\"childComponentId\",\"childOperationId\",\"reason\"],\"properties\":{\"widgetKey\":{\"type\":\"string\"},\"childComponentId\":{\"type\":\"string\"},\"childOperationId\":{\"type\":\"string\"},\"reason\":{\"type\":\"string\"},\"childTarget\":{\"type\":\"object\"},\"childParams\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-child-operation-delegate\",\"handlerContract\":{\"reads\":[\"WidgetPageDefinition.widgets\",\"ComponentDocMeta.configEditor\",\"child ComponentAuthoringManifest\",\"PAGE_BUILDER_WIDGET_AI_CATALOGS\"],\"writes\":[\"page.widgets[].definition.inputs\"],\"identityKeys\":[\"widgetKey\",\"childComponentId\",\"childOperationId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"widgetKey\",\"childComponentId\",\"childOperationId\",\"reason\"],\"properties\":{\"widgetKey\":{\"type\":\"string\"},\"childComponentId\":{\"type\":\"string\"},\"childOperationId\":{\"type\":\"string\"},\"reason\":{\"type\":\"string\"},\"childTarget\":{\"type\":\"object\"},\"childParams\":{\"type\":\"object\"}}},\"failureModes\":[\"widget-not-found\",\"child-manifest-missing\",\"child-operation-unknown\",\"local-child-input-write-attempted\"],\"description\":\"Delegates child widget input edits to the owning manifest or configEditor instead of redefining child semantics in page-builder.\"}}],\"validators\":[\"widget-exists\",\"child-manifest-available\",\"child-operation-known\",\"component-config-editor-respected\",\"no-local-child-input-write\"],\"affectedPaths\":[\"widgets[].definition.inputs\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"page-loaded\",\"target-widget-exists\",\"child-authoring-contract-available\"]}]}",
|
|
4030
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"composition.plan.compile\",\"title\":\"Compile UI composition plan\",\"scope\":\"rules\",\"targetKind\":\"agenticPreview\",\"target\":{\"kind\":\"agenticPreview\",\"resolver\":\"agentic-preview-result\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"uiCompositionPlan\"],\"properties\":{\"uiCompositionPlan\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-ui-composition-plan-compile\",\"handlerContract\":{\"reads\":[\"UiCompositionPlanAuthoringInput\",\"UiCompositionPlan\",\"UiCompositionPlanTemplateReference\",\"UiCompositionPlanTemplateMaterialization\",\"UiCompositionPlan.i18n\",\"UiCompositionPlan.context\",\"UiCompositionPlan.layout\",\"UiCompositionPlan.selectionSyncs\",\"UiCompositionPlan.contextScopes\",\"UiCompositionPlan.bindings[].transform.fallbackValue\",\"UiCompositionPlan.bindings[].transform.select-case\",\"resolveUiCompositionPlanTemplate\",\"compileUiCompositionPlan\",\"preflightUiCompositionPlan\",\"ComponentMetadataRegistry\",\"PAGE_BUILDER_WIDGET_AI_CATALOGS\",\"ComponentDocMeta.configEditor\"],\"writes\":[\"compiledFormPatch.patch.page\"],\"identityKeys\":[\"uiCompositionPlan.id\",\"widgetKey\",\"uiCompositionPlan.bindings[].id\",\"uiCompositionPlan.selectionSyncs[].id\",\"uiCompositionPlan.contextScopes[].id\"],\"failureModes\":[\"ui-composition-plan-invalid\",\"ui-composition-template-reference-invalid\",\"ui-composition-template-not-found\",\"ui-composition-template-hash-mismatch\",\"ui-composition-template-overrides-unsupported\",\"widget-catalog-missing\",\"compiled-page-invalid\",\"child-config-editor-missing\"],\"description\":\"Resolves an optional exact governed template reference and compiles the expanded UiCompositionPlan into a renderable WidgetPageDefinition patch.page.\"}}],\"validators\":[\"ui-composition-plan-valid\",\"compiled-page-valid\",\"widget-keys-unique\",\"composition-endpoints-resolve\",\"canvas-items-reference-existing-widgets\"],\"affectedPaths\":[\"uiCompositionPlan\",\"compiledFormPatch.patch.page\"],\"submissionImpact\":\"none\",\"preconditions\":[\"agentic-preview-loaded\",\"component-catalog-loaded\"]},{\"operationId\":\"state.set\",\"title\":\"Set page state value\",\"scope\":\"dataBinding\",\"targetKind\":\"state\",\"target\":{\"kind\":\"state\",\"resolver\":\"page-state-path\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"path\",\"value\"],\"properties\":{\"path\":{\"type\":\"string\"},\"value\":{},\"layer\":{\"enum\":[\"page\",\"session\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-state-set\",\"handlerContract\":{\"reads\":[\"WidgetPageDefinition.state\",\"WidgetPageDefinition.composition.links\"],\"writes\":[\"page.state\"],\"identityKeys\":[\"path\"],\"failureModes\":[\"state-path-invalid\",\"state-json-invalid\",\"composition-state-link-invalid\"],\"description\":\"Sets canonical page state used by composition links without creating host-only binding paths.\"}}],\"validators\":[\"state-path-valid\",\"state-layer-valid\",\"state-json-valid\",\"composition-state-links-still-valid\"],\"affectedPaths\":[\"state\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"page-loaded\"]},{\"operationId\":\"page.preview.apply\",\"title\":\"Apply agentic preview locally\",\"scope\":\"interaction\",\"targetKind\":\"agenticPreview\",\"target\":{\"kind\":\"agenticPreview\",\"resolver\":\"agentic-preview-result\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"previewId\"],\"properties\":{\"previewId\":{\"type\":\"string\"},\"compiledFormPatch\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-preview-apply\",\"handlerContract\":{\"reads\":[\"UiCompositionPlan\",\"PageBuilderAiAdapter.applyUiCompositionPlan\",\"ComponentMetadataRegistry\",\"CompositionValidatorService.validatePage\",\"compiledFormPatch.patch.page\",\"PraxisAssistantTurnViewState\"],\"writes\":[\"DynamicPageBuilderComponent.page\",\"pageChange\"],\"identityKeys\":[\"previewId\"],\"failureModes\":[\"preview-result-invalid\",\"target-registry-missing\",\"component-not-registered\",\"component-not-materializable\",\"port-not-registered\",\"port-contract-incompatible\",\"patch-page-missing\",\"runtime-page-invalid\",\"patch-envelope-persistence-attempted\"],\"description\":\"Preflights UiCompositionPlan against the target runtime registry and canonical Core composition validator before applying the attested WidgetPageDefinition locally.\"}}],\"validators\":[\"preview-result-valid\",\"ui-composition-target-registry-available\",\"ui-composition-components-materializable\",\"composition-endpoints-resolve\",\"compiled-page-patch-present\",\"no-envelope-runtime-persistence\",\"runtime-page-valid\"],\"affectedPaths\":[\"uiCompositionPlan\",\"compiledFormPatch.patch.page\",\"page\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"agentic-preview-loaded\"]},{\"operationId\":\"page.persist.save\",\"title\":\"Persist page through config API\",\"scope\":\"interaction\",\"targetKind\":\"pageIdentity\",\"target\":{\"kind\":\"pageIdentity\",\"resolver\":\"page-builder-persistence-identity\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"pageIdentity\"],\"properties\":{\"pageIdentity\":{\"type\":\"object\"},\"page\":{\"type\":\"object\"},\"etag\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-page-persist-save\",\"handlerContract\":{\"reads\":[\"pageIdentity\",\"WidgetPageDefinition\",\"PAGE_BUILDER_AGENTIC_AUTHORING_OPTIONS\",\"ui_user_config ETag\"],\"writes\":[\"POST/PUT /api/praxis/config/ui-user-config\",\"If-Match\"],\"identityKeys\":[\"pageIdentity.componentType\",\"pageIdentity.componentId\",\"pageIdentity.scope\"],\"failureModes\":[\"page-identity-incomplete\",\"etag-conflict\",\"runtime-page-invalid\",\"patch-envelope-persistence-attempted\"],\"description\":\"Persists the renderable WidgetPageDefinition with pageIdentity and ETag delegated to praxis-config-starter.\"}}],\"validators\":[\"page-identity-complete\",\"etag-policy-valid\",\"runtime-page-valid\",\"no-envelope-runtime-persistence\"],\"affectedPaths\":[\"page\",\"pageIdentity\",\"etag\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"page-loaded\",\"page-identity-known\"]},{\"operationId\":\"childOperation.delegate\",\"title\":\"Delegate widget child operation\",\"scope\":\"global\",\"targetKind\":\"childOperation\",\"target\":{\"kind\":\"childOperation\",\"resolver\":\"widget-child-authoring-manifest-operation\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"widgetKey\",\"childComponentId\",\"childOperationId\",\"reason\"],\"properties\":{\"widgetKey\":{\"type\":\"string\"},\"childComponentId\":{\"type\":\"string\"},\"childOperationId\":{\"type\":\"string\"},\"reason\":{\"type\":\"string\"},\"childTarget\":{\"type\":\"object\"},\"childParams\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-child-operation-delegate\",\"handlerContract\":{\"reads\":[\"WidgetPageDefinition.widgets\",\"ComponentDocMeta.configEditor\",\"child ComponentAuthoringManifest\",\"PAGE_BUILDER_WIDGET_AI_CATALOGS\"],\"writes\":[\"page.widgets[].definition.inputs\"],\"identityKeys\":[\"widgetKey\",\"childComponentId\",\"childOperationId\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"widgetKey\",\"childComponentId\",\"childOperationId\",\"reason\"],\"properties\":{\"widgetKey\":{\"type\":\"string\"},\"childComponentId\":{\"type\":\"string\"},\"childOperationId\":{\"type\":\"string\"},\"reason\":{\"type\":\"string\"},\"childTarget\":{\"type\":\"object\"},\"childParams\":{\"type\":\"object\"}}},\"failureModes\":[\"widget-not-found\",\"child-manifest-missing\",\"child-operation-unknown\",\"local-child-input-write-attempted\"],\"description\":\"Delegates child widget input edits to the owning manifest or configEditor instead of redefining child semantics in page-builder.\"}}],\"validators\":[\"widget-exists\",\"child-manifest-available\",\"child-operation-known\",\"component-config-editor-respected\",\"no-local-child-input-write\"],\"affectedPaths\":[\"widgets[].definition.inputs\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"page-loaded\",\"target-widget-exists\",\"child-authoring-contract-available\"]}]}",
|
|
3965
4031
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3966
|
-
"contentHash": "
|
|
4032
|
+
"contentHash": "dfd7f811bca3134c51a4bd1f7a1329bdc271caaf7813735c4326660bf33c0156",
|
|
3967
4033
|
"sourceKind": "component_definition",
|
|
3968
4034
|
"sourceId": "praxis-page-builder",
|
|
3969
4035
|
"corpusVersion": "1.0.0"
|