@praxisui/page-builder 10.0.0-rc.14 → 10.0.0-rc.16
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.
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-10-
|
|
3
|
+
"generatedAt": "2026-10-14T20:20:10.826Z",
|
|
4
4
|
"packageName": "@praxisui/page-builder",
|
|
5
|
-
"packageVersion": "10.0.0-rc.
|
|
5
|
+
"packageVersion": "10.0.0-rc.16",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -1534,7 +1534,7 @@
|
|
|
1534
1534
|
"componentId": "praxis-page-builder",
|
|
1535
1535
|
"ownerPackage": "@praxisui/page-builder",
|
|
1536
1536
|
"configSchemaId": "WidgetPageDefinition",
|
|
1537
|
-
"manifestVersion": "1.5.
|
|
1537
|
+
"manifestVersion": "1.5.2",
|
|
1538
1538
|
"runtimeInputs": [
|
|
1539
1539
|
{
|
|
1540
1540
|
"name": "autoPersist",
|
|
@@ -1596,7 +1596,7 @@
|
|
|
1596
1596
|
{
|
|
1597
1597
|
"kind": "page",
|
|
1598
1598
|
"resolver": "widget-page-definition-root",
|
|
1599
|
-
"description": "Root WidgetPageDefinition document: title, metadata, context and renderable page envelope."
|
|
1599
|
+
"description": "Root WidgetPageDefinition document: title, metadata, context, declarative dataSources and renderable page envelope."
|
|
1600
1600
|
},
|
|
1601
1601
|
{
|
|
1602
1602
|
"kind": "canvas",
|
|
@@ -1668,6 +1668,16 @@
|
|
|
1668
1668
|
},
|
|
1669
1669
|
"metadata": {
|
|
1670
1670
|
"type": "object"
|
|
1671
|
+
},
|
|
1672
|
+
"dataSources": {
|
|
1673
|
+
"oneOf": [
|
|
1674
|
+
{
|
|
1675
|
+
"type": "array"
|
|
1676
|
+
},
|
|
1677
|
+
{
|
|
1678
|
+
"type": "object"
|
|
1679
|
+
}
|
|
1680
|
+
]
|
|
1671
1681
|
}
|
|
1672
1682
|
}
|
|
1673
1683
|
},
|
|
@@ -1686,7 +1696,8 @@
|
|
|
1686
1696
|
"page.layoutPreset",
|
|
1687
1697
|
"page.themePreset",
|
|
1688
1698
|
"page.context",
|
|
1689
|
-
"page.metadata"
|
|
1699
|
+
"page.metadata",
|
|
1700
|
+
"page.dataSources"
|
|
1690
1701
|
],
|
|
1691
1702
|
"identityKeys": [
|
|
1692
1703
|
"pageIdentity.componentId",
|
|
@@ -1709,6 +1720,16 @@
|
|
|
1709
1720
|
},
|
|
1710
1721
|
"metadata": {
|
|
1711
1722
|
"type": "object"
|
|
1723
|
+
},
|
|
1724
|
+
"dataSources": {
|
|
1725
|
+
"oneOf": [
|
|
1726
|
+
{
|
|
1727
|
+
"type": "array"
|
|
1728
|
+
},
|
|
1729
|
+
{
|
|
1730
|
+
"type": "object"
|
|
1731
|
+
}
|
|
1732
|
+
]
|
|
1712
1733
|
}
|
|
1713
1734
|
}
|
|
1714
1735
|
},
|
|
@@ -1717,7 +1738,7 @@
|
|
|
1717
1738
|
"context-not-json",
|
|
1718
1739
|
"settings-panel-bridge-missing"
|
|
1719
1740
|
],
|
|
1720
|
-
"description": "Updates root page metadata while preserving the renderable WidgetPageDefinition shape."
|
|
1741
|
+
"description": "Updates root page metadata and declarative dataSources while preserving the renderable WidgetPageDefinition shape."
|
|
1721
1742
|
}
|
|
1722
1743
|
}
|
|
1723
1744
|
],
|
|
@@ -1732,7 +1753,8 @@
|
|
|
1732
1753
|
"layoutPreset",
|
|
1733
1754
|
"themePreset",
|
|
1734
1755
|
"context",
|
|
1735
|
-
"metadata"
|
|
1756
|
+
"metadata",
|
|
1757
|
+
"dataSources"
|
|
1736
1758
|
],
|
|
1737
1759
|
"submissionImpact": "config-only",
|
|
1738
1760
|
"preconditions": [
|
|
@@ -3855,9 +3877,9 @@
|
|
|
3855
3877
|
{
|
|
3856
3878
|
"chunkIndex": 5,
|
|
3857
3879
|
"chunkKind": "authoring_manifest",
|
|
3858
|
-
"content": "{\"operationId\":\"page.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
3880
|
+
"content": "{\"operationId\":\"page.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure page metadata Effects: compile-domain-patch. Set this page title to Payroll Overview and store payrollPeriod in the page context.\",\"scope\":\"global\",\"target\":{\"kind\":\"page\",\"resolver\":\"widget-page-definition-root\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"title\",\"layoutPreset\",\"themePreset\",\"context\",\"metadata\",\"dataSources\"],\"semanticTerms\":[\"title\",\"layoutPreset\",\"themePreset\",\"context\",\"metadata\",\"dataSources\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"title\",\"layoutPreset\",\"themePreset\",\"context\",\"metadata\",\"dataSources\"],\"validators\":[{\"validatorId\":\"widget-page-definition-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_PAGE_VALID\",\"description\":\"The document must remain a renderable WidgetPageDefinition.\"},{\"validatorId\":\"no-legacy-grid-page-definition\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_NO_GRID_PAGE\",\"description\":\"Legacy GridPageDefinition semantics cannot be reintroduced.\"},{\"validatorId\":\"page-context-json-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CONTEXT_JSON\",\"description\":\"Page context must stay JSON-serializable.\"},{\"validatorId\":\"settings-panel-round-trip-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_SETTINGS_ROUND_TRIP\",\"description\":\"Settings panel apply/save/reset/reopen must preserve the same page shape.\"}],\"preconditions\":[\"page-loaded\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-dashboard-page\",\"request\":\"Set this page title to Payroll Overview and store payrollPeriod in the page context.\",\"operationId\":\"page.configure\",\"params\":{\"title\":\"Payroll Overview\",\"context\":{\"payrollPeriod\":\"current\"}},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
3859
3881
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3860
|
-
"contentHash": "
|
|
3882
|
+
"contentHash": "72a7f823d406f99e530f1073245598157f260d62b752982f90ab16a8717ad5b0",
|
|
3861
3883
|
"sourceKind": "component_definition",
|
|
3862
3884
|
"sourceId": "praxis-page-builder",
|
|
3863
3885
|
"corpusVersion": "1.0.0"
|
|
@@ -3865,9 +3887,9 @@
|
|
|
3865
3887
|
{
|
|
3866
3888
|
"chunkIndex": 6,
|
|
3867
3889
|
"chunkKind": "authoring_manifest",
|
|
3868
|
-
"content": "{\"operationId\":\"canvas.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
3890
|
+
"content": "{\"operationId\":\"canvas.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configure page canvas Effects: compile-domain-patch. Use a 12 column dashboard grid with compact gaps.\",\"scope\":\"layout\",\"target\":{\"kind\":\"canvas\",\"resolver\":\"widget-page-canvas\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"columns\",\"rowUnit\",\"gap\",\"items\"],\"semanticTerms\":[\"columns\",\"rowUnit\",\"gap\",\"items\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"canvas.columns\",\"canvas.rowUnit\",\"canvas.gap\",\"canvas.items\"],\"validators\":[{\"validatorId\":\"canvas-columns-integer\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_COLUMNS\",\"description\":\"Canvas columns must be an integer grid count.\"},{\"validatorId\":\"canvas-row-unit-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_ROW_UNIT\",\"description\":\"Canvas row unit must be a positive layout unit.\"},{\"validatorId\":\"canvas-gap-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_GAP\",\"description\":\"Canvas gap must be a valid non-negative spacing value.\"},{\"validatorId\":\"canvas-items-reference-existing-widgets\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_WIDGET_REFS\",\"description\":\"Every canvas item must reference an existing widgetKey.\"}],\"preconditions\":[\"page-loaded\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"configure-canvas-grid\",\"request\":\"Use a 12 column dashboard grid with compact gaps.\",\"operationId\":\"canvas.configure\",\"target\":\"canvas\",\"params\":{\"columns\":12,\"rowUnit\":8,\"gap\":8},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
3869
3891
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3870
|
-
"contentHash": "
|
|
3892
|
+
"contentHash": "5e578d0b56cd4e7f2613ceaf69a253fae9d51de28e8c7d41995b2bfe35e5da5a",
|
|
3871
3893
|
"sourceKind": "component_definition",
|
|
3872
3894
|
"sourceId": "praxis-page-builder",
|
|
3873
3895
|
"corpusVersion": "1.0.0"
|
|
@@ -3875,9 +3897,9 @@
|
|
|
3875
3897
|
{
|
|
3876
3898
|
"chunkIndex": 7,
|
|
3877
3899
|
"chunkKind": "authoring_manifest",
|
|
3878
|
-
"content": "{\"operationId\":\"widget.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
3900
|
+
"content": "{\"operationId\":\"widget.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Add widget to page Effects: compile-domain-patch. Add an employees table widget to the left half of the first row.\",\"scope\":\"layout\",\"target\":{\"kind\":\"widget\",\"resolver\":\"widget-by-stable-key\",\"required\":true},\"inputContract\":{\"required\":[\"widgetKey\",\"componentId\"],\"properties\":[\"widgetKey\",\"componentId\",\"title\",\"inputs\",\"canvasItem\"],\"semanticTerms\":[\"widgetKey\",\"componentId\",\"title\",\"inputs\",\"canvasItem\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"widgets[]\",\"canvas.items[]\"],\"validators\":[{\"validatorId\":\"widget-key-unique\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_WIDGET_KEY_UNIQUE\",\"description\":\"Widget keys must be unique.\"},{\"validatorId\":\"component-registered\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_COMPONENT_REGISTERED\",\"description\":\"Widget component id must exist in the component registry/catalog.\"},{\"validatorId\":\"canvas-item-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_ITEM\",\"description\":\"Canvas item geometry must be valid.\"},{\"validatorId\":\"child-inputs-delegated\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CHILD_INPUTS_DELEGATED\",\"description\":\"Child component input edits must delegate to the child owner.\"},{\"validatorId\":\"widget-key-not-array-index\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_WIDGET_KEY_INDEX\",\"description\":\"Array index is not a stable widget identity.\"}],\"preconditions\":[\"page-loaded\",\"component-catalog-loaded\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-employees-table-widget\",\"request\":\"Add an employees table widget to the left half of the first row.\",\"operationId\":\"widget.add\",\"target\":\"employees-table\",\"params\":{\"widgetKey\":\"employees-table\",\"componentId\":\"praxis-table\",\"canvasItem\":{\"x\":0,\"y\":0,\"w\":6,\"h\":8}},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
3879
3901
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3880
|
-
"contentHash": "
|
|
3902
|
+
"contentHash": "a8c77f46c44903ea186fa36d9339afabd62b721122ac48a930c65df848d986ec",
|
|
3881
3903
|
"sourceKind": "component_definition",
|
|
3882
3904
|
"sourceId": "praxis-page-builder",
|
|
3883
3905
|
"corpusVersion": "1.0.0"
|
|
@@ -3885,9 +3907,9 @@
|
|
|
3885
3907
|
{
|
|
3886
3908
|
"chunkIndex": 8,
|
|
3887
3909
|
"chunkKind": "authoring_manifest",
|
|
3888
|
-
"content": "{\"operationId\":\"widget.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
3910
|
+
"content": "{\"operationId\":\"widget.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remove widget from page Effects: compile-domain-patch. Remove the summary-card widget and its links.\",\"scope\":\"layout\",\"target\":{\"kind\":\"widget\",\"resolver\":\"widget-by-stable-key\",\"required\":true},\"inputContract\":{\"required\":[\"widgetKey\"],\"properties\":[\"widgetKey\",\"confirmed\"],\"semanticTerms\":[\"widgetKey\",\"confirmed\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"widgets[]\",\"canvas.items[]\",\"composition.links[]\"],\"validators\":[{\"validatorId\":\"widget-exists\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_WIDGET_EXISTS\",\"description\":\"Target widget must exist.\"},{\"validatorId\":\"destructive-removal-confirmed\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_DESTRUCTIVE_CONFIRMED\",\"description\":\"Destructive removals require explicit confirmation.\"},{\"validatorId\":\"composition-links-cleaned\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_LINKS_CLEANED\",\"description\":\"Removing a widget must remove dangling composition links.\"},{\"validatorId\":\"canvas-items-reference-existing-widgets\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_WIDGET_REFS\",\"description\":\"Every canvas item must reference an existing widgetKey.\"}],\"preconditions\":[\"page-loaded\",\"target-widget-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"remove-summary-card\",\"request\":\"Remove the summary-card widget and its links.\",\"operationId\":\"widget.remove\",\"target\":\"summary-card\",\"params\":{\"widgetKey\":\"summary-card\",\"confirmed\":true},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
3889
3911
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3890
|
-
"contentHash": "
|
|
3912
|
+
"contentHash": "70db16cce21062bcc9f06ca40dee39731ba7324f44f8c266ef20935ef763205a",
|
|
3891
3913
|
"sourceKind": "component_definition",
|
|
3892
3914
|
"sourceId": "praxis-page-builder",
|
|
3893
3915
|
"corpusVersion": "1.0.0"
|
|
@@ -3895,9 +3917,9 @@
|
|
|
3895
3917
|
{
|
|
3896
3918
|
"chunkIndex": 9,
|
|
3897
3919
|
"chunkKind": "authoring_manifest",
|
|
3898
|
-
"content": "{\"operationId\":\"widget.moveResize\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
3920
|
+
"content": "{\"operationId\":\"widget.moveResize\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Move or resize widget Effects: compile-domain-patch. Move payroll-chart to the right column and make it taller.\",\"scope\":\"layout\",\"target\":{\"kind\":\"widget\",\"resolver\":\"widget-by-stable-key\",\"required\":true},\"inputContract\":{\"required\":[\"widgetKey\",\"canvasItem\"],\"properties\":[\"widgetKey\",\"canvasItem\"],\"semanticTerms\":[\"widgetKey\",\"canvasItem\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"canvas.items[]\"],\"validators\":[{\"validatorId\":\"widget-exists\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_WIDGET_EXISTS\",\"description\":\"Target widget must exist.\"},{\"validatorId\":\"canvas-item-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_ITEM\",\"description\":\"Canvas item geometry must be valid.\"},{\"validatorId\":\"canvas-item-targets-existing-widget\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_ITEM_TARGET\",\"description\":\"Moved canvas item must target an existing widget.\"},{\"validatorId\":\"canvas-overlap-policy-valid\",\"level\":\"warning\",\"code\":\"PAGE_BUILDER_CANVAS_OVERLAP\",\"description\":\"Canvas overlap policy must be respected.\"}],\"preconditions\":[\"page-loaded\",\"target-widget-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"move-payroll-chart\",\"request\":\"Move payroll-chart to the right column and make it taller.\",\"operationId\":\"widget.moveResize\",\"target\":\"payroll-chart\",\"params\":{\"widgetKey\":\"payroll-chart\",\"canvasItem\":{\"x\":6,\"y\":0,\"w\":6,\"h\":10}},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
3899
3921
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3900
|
-
"contentHash": "
|
|
3922
|
+
"contentHash": "79b5c7c65d029bb35c069b5c3ef61d942397f04645b0606b8cd2ca533924d64a",
|
|
3901
3923
|
"sourceKind": "component_definition",
|
|
3902
3924
|
"sourceId": "praxis-page-builder",
|
|
3903
3925
|
"corpusVersion": "1.0.0"
|
|
@@ -3905,9 +3927,9 @@
|
|
|
3905
3927
|
{
|
|
3906
3928
|
"chunkIndex": 10,
|
|
3907
3929
|
"chunkKind": "authoring_manifest",
|
|
3908
|
-
"content": "{\"operationId\":\"widget.shell.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
3930
|
+
"content": "{\"operationId\":\"widget.shell.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"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\":[]}",
|
|
3909
3931
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3910
|
-
"contentHash": "
|
|
3932
|
+
"contentHash": "c160a825b90e04e842010a9ca9a4249a41f1bca027461453f2c8827ff9f346d8",
|
|
3911
3933
|
"sourceKind": "component_definition",
|
|
3912
3934
|
"sourceId": "praxis-page-builder",
|
|
3913
3935
|
"corpusVersion": "1.0.0"
|
|
@@ -3915,9 +3937,9 @@
|
|
|
3915
3937
|
{
|
|
3916
3938
|
"chunkIndex": 11,
|
|
3917
3939
|
"chunkKind": "authoring_manifest",
|
|
3918
|
-
"content": "{\"operationId\":\"composition.link.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
3940
|
+
"content": "{\"operationId\":\"composition.link.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Add page composition link Effects: compile-domain-patch. When department-list selection changes, filter employees-table by department id. Create the widget link under the old connections collection.\",\"scope\":\"dataBinding\",\"target\":{\"kind\":\"compositionLink\",\"resolver\":\"composition-link-by-id\",\"required\":true},\"inputContract\":{\"required\":[\"id\",\"from\",\"to\",\"intent\"],\"properties\":[\"id\",\"from\",\"to\",\"intent\",\"condition\",\"transform\",\"policy\",\"metadata\"],\"semanticTerms\":[\"id\",\"from\",\"to\",\"intent\",\"condition\",\"transform\",\"policy\",\"metadata\",\"event-propagation\",\"state-write\",\"state-read\",\"command-dispatch\",\"selection-sync\",\"data-projection\",\"status-propagation\",\"from.kind\",\"from.ref\",\"to.kind\",\"to.ref\",\"component-port\",\"from.ref.widget\",\"from.ref.port\",\"from.ref.direction\",\"from.ref.bindingPath\",\"from.ref.nestedPath\",\"state\",\"from.ref.path\",\"from.ref.layer\",\"global-action\",\"from.ref.actionId\",\"to.ref.widget\",\"to.ref.port\",\"to.ref.direction\",\"to.ref.bindingPath\",\"to.ref.nestedPath\",\"to.ref.path\",\"to.ref.layer\",\"to.ref.actionId\",\"to.ref.payload\",\"to.ref.payloadExpr\",\"to.ref.meta\",\"input\",\"output\",\"values\",\"derived\",\"transient\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"composition.links[]\"],\"validators\":[{\"validatorId\":\"composition-link-id-unique\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_LINK_ID_UNIQUE\",\"description\":\"Composition link ids must be unique.\"},{\"validatorId\":\"composition-endpoints-resolve\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_LINK_ENDPOINTS\",\"description\":\"Composition endpoints must resolve to known widgets, ports and nested paths.\"},{\"validatorId\":\"nested-path-terminal-widget-key-required\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_NESTED_PATH_WIDGET_KEY\",\"description\":\"Nested component-port paths must terminate at a stable widget key.\"},{\"validatorId\":\"json-logic-condition-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_JSON_LOGIC\",\"description\":\"Composition link condition must be valid Json Logic.\"},{\"validatorId\":\"no-legacy-connections-write\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_NO_LEGACY_CONNECTIONS\",\"description\":\"Operations must write page.composition.links, not legacy connections.\"}],\"preconditions\":[\"page-loaded\",\"widgets-resolvable\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"link-department-selection-to-table\",\"request\":\"When department-list selection changes, filter employees-table by department id.\",\"operationId\":\"composition.link.add\",\"target\":\"department-selection-to-employees\",\"params\":{\"id\":\"department-selection-to-employees\",\"from\":{\"widget\":\"department-list\",\"port\":\"selection\"},\"to\":{\"widget\":\"employees-table\",\"port\":\"filter\"},\"intent\":\"selection-sync\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-legacy-connections\",\"request\":\"Create the widget link under the old connections collection.\",\"operationId\":\"composition.link.add\",\"target\":\"legacy-connection\",\"params\":{\"id\":\"legacy-connection\",\"collection\":\"connections\"},\"isPositive\":false}]}",
|
|
3919
3941
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3920
|
-
"contentHash": "
|
|
3942
|
+
"contentHash": "b14b16b4f14b04250e475f82596087529b8c2bd1ee6c97718a6e2b50e4b3114b",
|
|
3921
3943
|
"sourceKind": "component_definition",
|
|
3922
3944
|
"sourceId": "praxis-page-builder",
|
|
3923
3945
|
"corpusVersion": "1.0.0"
|
|
@@ -3925,9 +3947,9 @@
|
|
|
3925
3947
|
{
|
|
3926
3948
|
"chunkIndex": 12,
|
|
3927
3949
|
"chunkKind": "authoring_manifest",
|
|
3928
|
-
"content": "{\"operationId\":\"composition.link.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
3950
|
+
"content": "{\"operationId\":\"composition.link.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remove page composition link Effects: compile-domain-patch. Remove the old payroll-filter-link composition link.\",\"scope\":\"dataBinding\",\"target\":{\"kind\":\"compositionLink\",\"resolver\":\"composition-link-by-id\",\"required\":true},\"inputContract\":{\"required\":[\"id\"],\"properties\":[\"id\",\"confirmed\"],\"semanticTerms\":[\"id\",\"confirmed\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"composition.links[]\"],\"validators\":[{\"validatorId\":\"composition-link-exists\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_LINK_EXISTS\",\"description\":\"Target composition link must exist.\"},{\"validatorId\":\"destructive-removal-confirmed\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_DESTRUCTIVE_CONFIRMED\",\"description\":\"Destructive removals require explicit confirmation.\"},{\"validatorId\":\"composition-links-still-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_LINKS_STILL_VALID\",\"description\":\"Remaining composition links must still validate after the operation.\"}],\"preconditions\":[\"page-loaded\",\"target-link-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"remove-obsolete-link\",\"request\":\"Remove the old payroll-filter-link composition link.\",\"operationId\":\"composition.link.remove\",\"target\":\"payroll-filter-link\",\"params\":{\"id\":\"payroll-filter-link\",\"confirmed\":true},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
3929
3951
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3930
|
-
"contentHash": "
|
|
3952
|
+
"contentHash": "30edf7855ef543106e001a108bc52961a797249f294965d752e306ed782b162f",
|
|
3931
3953
|
"sourceKind": "component_definition",
|
|
3932
3954
|
"sourceId": "praxis-page-builder",
|
|
3933
3955
|
"corpusVersion": "1.0.0"
|
|
@@ -3935,9 +3957,9 @@
|
|
|
3935
3957
|
{
|
|
3936
3958
|
"chunkIndex": 13,
|
|
3937
3959
|
"chunkKind": "authoring_manifest",
|
|
3938
|
-
"content": "{\"operationId\":\"composition.plan.compile\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
3960
|
+
"content": "{\"operationId\":\"composition.plan.compile\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Compile UI composition plan Effects: compile-domain-patch. Compile the resource-dashboard plan returned by the assistant into a renderable page preview.\",\"scope\":\"rules\",\"target\":{\"kind\":\"agenticPreview\",\"resolver\":\"agentic-preview-result\",\"required\":true},\"inputContract\":{\"required\":[\"uiCompositionPlan\"],\"properties\":[\"uiCompositionPlan\"],\"semanticTerms\":[\"uiCompositionPlan\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"uiCompositionPlan\",\"compiledFormPatch.patch.page\"],\"validators\":[{\"validatorId\":\"ui-composition-plan-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_UI_PLAN_VALID\",\"description\":\"UiCompositionPlan must match the intermediate agentic plan contract.\"},{\"validatorId\":\"compiled-page-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_COMPILED_PAGE_VALID\",\"description\":\"Compiled output must be a valid WidgetPageDefinition.\"},{\"validatorId\":\"widget-keys-unique\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_WIDGET_KEYS_UNIQUE\",\"description\":\"Compiled plan must produce unique widget keys.\"},{\"validatorId\":\"composition-endpoints-resolve\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_LINK_ENDPOINTS\",\"description\":\"Composition endpoints must resolve to known widgets, ports and nested paths.\"},{\"validatorId\":\"canvas-items-reference-existing-widgets\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_WIDGET_REFS\",\"description\":\"Every canvas item must reference an existing widgetKey.\"}],\"preconditions\":[\"agentic-preview-loaded\",\"component-catalog-loaded\"],\"submissionImpact\":\"none\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"compile-resource-dashboard-plan\",\"request\":\"Compile the resource-dashboard plan returned by the assistant into a renderable page preview.\",\"operationId\":\"composition.plan.compile\",\"target\":\"preview-payroll-dashboard\",\"params\":{\"uiCompositionPlan\":{\"layoutPreset\":\"resource-dashboard\"}},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
3939
3961
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3940
|
-
"contentHash": "
|
|
3962
|
+
"contentHash": "4120abe97ae80f206c17a12390b8ca4c6bfcf2fb16eaacc86f67d03f28a95513",
|
|
3941
3963
|
"sourceKind": "component_definition",
|
|
3942
3964
|
"sourceId": "praxis-page-builder",
|
|
3943
3965
|
"corpusVersion": "1.0.0"
|
|
@@ -3945,9 +3967,9 @@
|
|
|
3945
3967
|
{
|
|
3946
3968
|
"chunkIndex": 14,
|
|
3947
3969
|
"chunkKind": "authoring_manifest",
|
|
3948
|
-
"content": "{\"operationId\":\"state.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
3970
|
+
"content": "{\"operationId\":\"state.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set page state value Effects: compile-domain-patch. Store selectedDepartmentId in page state for downstream links.\",\"scope\":\"dataBinding\",\"target\":{\"kind\":\"state\",\"resolver\":\"page-state-path\",\"required\":true},\"inputContract\":{\"required\":[\"path\",\"value\"],\"properties\":[\"path\",\"value\",\"layer\"],\"semanticTerms\":[\"path\",\"value\",\"layer\",\"page\",\"session\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"state\"],\"validators\":[{\"validatorId\":\"state-path-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_STATE_PATH\",\"description\":\"State paths must be valid page state paths.\"},{\"validatorId\":\"state-layer-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_STATE_LAYER\",\"description\":\"State layer must be page or session.\"},{\"validatorId\":\"state-json-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_STATE_JSON\",\"description\":\"State values must be JSON-serializable.\"},{\"validatorId\":\"composition-state-links-still-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_STATE_LINKS\",\"description\":\"State edits must not break composition links.\"}],\"preconditions\":[\"page-loaded\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"set-selected-department-state\",\"request\":\"Store selectedDepartmentId in page state for downstream links.\",\"operationId\":\"state.set\",\"target\":\"state.selectedDepartmentId\",\"params\":{\"path\":\"selectedDepartmentId\",\"value\":\"sales\",\"layer\":\"page\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
3949
3971
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3950
|
-
"contentHash": "
|
|
3972
|
+
"contentHash": "4585027932cdefb1796dea6f38ddb8547a5ec8cedc46d42589e88df0e87eaa70",
|
|
3951
3973
|
"sourceKind": "component_definition",
|
|
3952
3974
|
"sourceId": "praxis-page-builder",
|
|
3953
3975
|
"corpusVersion": "1.0.0"
|
|
@@ -3955,9 +3977,9 @@
|
|
|
3955
3977
|
{
|
|
3956
3978
|
"chunkIndex": 15,
|
|
3957
3979
|
"chunkKind": "authoring_manifest",
|
|
3958
|
-
"content": "{\"operationId\":\"page.preview.apply\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
3980
|
+
"content": "{\"operationId\":\"page.preview.apply\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Apply agentic preview locally Effects: compile-domain-patch. Apply the current assistant preview to the local page.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"agenticPreview\",\"resolver\":\"agentic-preview-result\",\"required\":true},\"inputContract\":{\"required\":[\"previewId\"],\"properties\":[\"previewId\",\"compiledFormPatch\"],\"semanticTerms\":[\"previewId\",\"compiledFormPatch\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"uiCompositionPlan\",\"compiledFormPatch.patch.page\",\"page\"],\"validators\":[{\"validatorId\":\"preview-result-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_PREVIEW_VALID\",\"description\":\"Agentic preview result must be structurally valid.\"},{\"validatorId\":\"ui-composition-target-registry-available\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_UI_PLAN_TARGET_REGISTRY\",\"description\":\"UiCompositionPlan apply requires the ComponentMetadataRegistry of the target host.\"},{\"validatorId\":\"ui-composition-components-materializable\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_UI_PLAN_COMPONENTS_MATERIALIZABLE\",\"description\":\"Every planned component must resolve materializable metadata in the target registry.\"},{\"validatorId\":\"composition-endpoints-resolve\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_LINK_ENDPOINTS\",\"description\":\"Composition endpoints must resolve to known widgets, ports and nested paths.\"},{\"validatorId\":\"compiled-page-patch-present\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_PATCH_PAGE_PRESENT\",\"description\":\"Preview envelope must include compiledFormPatch.patch.page.\"},{\"validatorId\":\"no-envelope-runtime-persistence\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_NO_ENVELOPE_PERSISTENCE\",\"description\":\"Runtime persistence cannot save the full preview envelope.\"},{\"validatorId\":\"runtime-page-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_RUNTIME_PAGE_VALID\",\"description\":\"Runtime page must remain renderable by praxis-dynamic-page.\"}],\"preconditions\":[\"agentic-preview-loaded\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"apply-agentic-preview\",\"request\":\"Apply the current assistant preview to the local page.\",\"operationId\":\"page.preview.apply\",\"target\":\"preview-current\",\"params\":{\"previewId\":\"preview-current\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
3959
3981
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3960
|
-
"contentHash": "
|
|
3982
|
+
"contentHash": "d611f11464e767d58127500f313a2e3712ce81475ec0de6e678c6a5a1141d7d8",
|
|
3961
3983
|
"sourceKind": "component_definition",
|
|
3962
3984
|
"sourceId": "praxis-page-builder",
|
|
3963
3985
|
"corpusVersion": "1.0.0"
|
|
@@ -3965,9 +3987,9 @@
|
|
|
3965
3987
|
{
|
|
3966
3988
|
"chunkIndex": 16,
|
|
3967
3989
|
"chunkKind": "authoring_manifest",
|
|
3968
|
-
"content": "{\"operationId\":\"page.persist.save\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
3990
|
+
"content": "{\"operationId\":\"page.persist.save\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Persist page through config API Effects: compile-domain-patch. Save this page configuration using the current ETag.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"pageIdentity\",\"resolver\":\"page-builder-persistence-identity\",\"required\":true},\"inputContract\":{\"required\":[\"pageIdentity\"],\"properties\":[\"pageIdentity\",\"page\",\"etag\"],\"semanticTerms\":[\"pageIdentity\",\"page\",\"etag\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"page\",\"pageIdentity\",\"etag\"],\"validators\":[{\"validatorId\":\"page-identity-complete\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_PAGE_IDENTITY\",\"description\":\"Save requires component type, component id and scope identity.\"},{\"validatorId\":\"etag-policy-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_ETAG_POLICY\",\"description\":\"Save must respect backend ETag/If-Match policy.\"},{\"validatorId\":\"runtime-page-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_RUNTIME_PAGE_VALID\",\"description\":\"Runtime page must remain renderable by praxis-dynamic-page.\"},{\"validatorId\":\"no-envelope-runtime-persistence\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_NO_ENVELOPE_PERSISTENCE\",\"description\":\"Runtime persistence cannot save the full preview envelope.\"}],\"preconditions\":[\"page-loaded\",\"page-identity-known\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"persist-page\",\"request\":\"Save this page configuration using the current ETag.\",\"operationId\":\"page.persist.save\",\"target\":\"tenant-dashboard-page\",\"params\":{\"pageIdentity\":{\"componentType\":\"page-builder\",\"componentId\":\"tenant-dashboard\",\"scope\":\"tenant\"},\"etag\":\"\\\"v7\\\"\"},\"isPositive\":true}],\"negativeExamples\":[]}",
|
|
3969
3991
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3970
|
-
"contentHash": "
|
|
3992
|
+
"contentHash": "45dc99a41d33049a5aaff51ef07b996b26a493c98a27896335c1bd011bbba7da",
|
|
3971
3993
|
"sourceKind": "component_definition",
|
|
3972
3994
|
"sourceId": "praxis-page-builder",
|
|
3973
3995
|
"corpusVersion": "1.0.0"
|
|
@@ -3975,9 +3997,9 @@
|
|
|
3975
3997
|
{
|
|
3976
3998
|
"chunkIndex": 17,
|
|
3977
3999
|
"chunkKind": "authoring_manifest",
|
|
3978
|
-
"content": "{\"operationId\":\"childOperation.delegate\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
4000
|
+
"content": "{\"operationId\":\"childOperation.delegate\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Delegate widget child operation Effects: compile-domain-patch. Add a salary column to the employees table widget. Directly write a new dynamic-form field into the widget inputs from page-builder.\",\"scope\":\"global\",\"target\":{\"kind\":\"childOperation\",\"resolver\":\"widget-child-authoring-manifest-operation\",\"required\":false},\"inputContract\":{\"required\":[\"widgetKey\",\"childComponentId\",\"childOperationId\",\"reason\"],\"properties\":[\"widgetKey\",\"childComponentId\",\"childOperationId\",\"reason\",\"childTarget\",\"childParams\"],\"semanticTerms\":[\"widgetKey\",\"childComponentId\",\"childOperationId\",\"reason\",\"childTarget\",\"childParams\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"widgets[].definition.inputs\"],\"validators\":[{\"validatorId\":\"widget-exists\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_WIDGET_EXISTS\",\"description\":\"Target widget must exist.\"},{\"validatorId\":\"child-manifest-available\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CHILD_MANIFEST_AVAILABLE\",\"description\":\"Delegated child component must expose an authoring manifest or configEditor.\"},{\"validatorId\":\"child-operation-known\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CHILD_OPERATION_KNOWN\",\"description\":\"Delegated child operation id must be known.\"},{\"validatorId\":\"component-config-editor-respected\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CONFIG_EDITOR_RESPECTED\",\"description\":\"ComponentDocMeta.configEditor must remain the source for child input editing.\"},{\"validatorId\":\"no-local-child-input-write\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_NO_LOCAL_CHILD_INPUT_WRITE\",\"description\":\"Page-builder must not define child component input semantics locally.\"}],\"preconditions\":[\"page-loaded\",\"target-widget-exists\",\"child-authoring-contract-available\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"delegate-table-column-edit\",\"request\":\"Add a salary column to the employees table widget.\",\"operationId\":\"childOperation.delegate\",\"target\":\"employees-table\",\"params\":{\"widgetKey\":\"employees-table\",\"childComponentId\":\"praxis-table\",\"childOperationId\":\"column.add\",\"reason\":\"TableConfig is owned by praxis-table.\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-direct-dynamic-form-field-write\",\"request\":\"Directly write a new dynamic-form field into the widget inputs from page-builder.\",\"operationId\":\"childOperation.delegate\",\"target\":\"employee-form\",\"params\":{\"widgetKey\":\"employee-form\",\"childComponentId\":\"praxis-dynamic-form\",\"childOperationId\":\"field.add\",\"reason\":\"Dynamic form fields are delegated.\"},\"isPositive\":false}]}",
|
|
3979
4001
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3980
|
-
"contentHash": "
|
|
4002
|
+
"contentHash": "feff01e143416953c7ba3281a4d274215d816f1ff0f739516d78c43ab4fa74f5",
|
|
3981
4003
|
"sourceKind": "component_definition",
|
|
3982
4004
|
"sourceId": "praxis-page-builder",
|
|
3983
4005
|
"corpusVersion": "1.0.0"
|
|
@@ -3985,9 +4007,9 @@
|
|
|
3985
4007
|
{
|
|
3986
4008
|
"chunkIndex": 18,
|
|
3987
4009
|
"chunkKind": "authoring_manifest",
|
|
3988
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
4010
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"identity\"}",
|
|
3989
4011
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
3990
|
-
"contentHash": "
|
|
4012
|
+
"contentHash": "0f8b21129f6321ab4c02633f7c8a554115d12af2b1b1e8c077088c674ca3dfce",
|
|
3991
4013
|
"sourceKind": "component_definition",
|
|
3992
4014
|
"sourceId": "praxis-page-builder",
|
|
3993
4015
|
"corpusVersion": "1.0.0"
|
|
@@ -3995,9 +4017,9 @@
|
|
|
3995
4017
|
{
|
|
3996
4018
|
"chunkIndex": 19,
|
|
3997
4019
|
"chunkKind": "authoring_manifest",
|
|
3998
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
4020
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"autoPersist\",\"type\":\"boolean\",\"description\":\"Host-only opt-in Core persistence for manual pages. Disabled for agentic authoring and authoringDocument; never use to persist an AI preview.\"},{\"name\":\"page\",\"type\":\"WidgetPageDefinition\",\"description\":\"Canonical renderable page document consumed by praxis-dynamic-page.\"},{\"name\":\"pageIdentity\",\"type\":\"PageIdentity | null\",\"description\":\"Persistence identity for ui_user_config save/apply flows; not persisted inside page.\"},{\"name\":\"enableCustomization\",\"type\":\"boolean\",\"description\":\"Enables page-builder authoring chrome around the runtime page.\"},{\"name\":\"authoringCapabilities\",\"type\":\"PageBuilderAuthoringCapabilities | null\",\"description\":\"Host-only grant that limits visible authoring operations without changing WidgetPageDefinition and without granting AI edit authority; omitted capabilities preserve full authoring.\"},{\"name\":\"context\",\"type\":\"Record<string, unknown>\",\"description\":\"Opaque host context passed to catalog resolution and agentic authoring.\"},{\"name\":\"pageChange\",\"type\":\"WidgetPageDefinition\",\"description\":\"Emitted after local apply/preview produces a renderable page.\"},{\"name\":\"pageAuthoringChange\",\"type\":\"WidgetPageDefinition\",\"description\":\"Emitted only after explicit visual authoring operations so hosts can keep authored source separate from runtime state.\"},{\"name\":\"agenticAuthoringEnableStreaming\",\"type\":\"boolean\",\"description\":\"Opt-in flag for the canonical streaming turn endpoints.\"},{\"name\":\"agenticAuthoringIncludeLlmDiagnostics\",\"type\":\"boolean\",\"description\":\"Opt-in flag that exposes governed diagnostics as cockpit evidence for validation and debugging.\"},{\"name\":\"agenticAuthoringContextHints\",\"type\":\"Record<string, unknown>\",\"description\":\"Host-provided semantic hints, including governed domain-catalog references and optional RAG-authored openingMessage used to ground AI-authored decisions.\"}]}",
|
|
3999
4021
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
4000
|
-
"contentHash": "
|
|
4022
|
+
"contentHash": "0ba8d906647c149eca96829013642a9fd1a3484f1a6d1f16fc0403790f6154f4",
|
|
4001
4023
|
"sourceKind": "component_definition",
|
|
4002
4024
|
"sourceId": "praxis-page-builder",
|
|
4003
4025
|
"corpusVersion": "1.0.0"
|
|
@@ -4005,9 +4027,9 @@
|
|
|
4005
4027
|
{
|
|
4006
4028
|
"chunkIndex": 20,
|
|
4007
4029
|
"chunkKind": "authoring_manifest",
|
|
4008
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
4030
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"page\",\"resolver\":\"widget-page-definition-root\",\"description\":\"Root WidgetPageDefinition document: title, metadata, context, declarative dataSources and renderable page envelope.\"},{\"kind\":\"canvas\",\"resolver\":\"widget-page-canvas\",\"description\":\"Canvas geometry and item placement for top-level widgets.\"},{\"kind\":\"widget\",\"resolver\":\"widget-by-stable-key\",\"description\":\"Widget definitions addressed by stable widgetKey, never by array index.\"},{\"kind\":\"widgetShell\",\"resolver\":\"widget-shell-by-widget-key\",\"description\":\"Dashboard-card shell metadata such as title, action chrome and visual preset.\"},{\"kind\":\"compositionLink\",\"resolver\":\"composition-link-by-id\",\"description\":\"Declarative wiring in page.composition.links, including component-port nestedPath endpoints.\"},{\"kind\":\"state\",\"resolver\":\"page-state-path\",\"description\":\"Page-level state entries referenced by composition links.\"},{\"kind\":\"pageIdentity\",\"resolver\":\"page-builder-persistence-identity\",\"description\":\"ui_user_config identity, scope and ETag used by applyPage/save.\"},{\"kind\":\"agenticPreview\",\"resolver\":\"agentic-preview-result\",\"description\":\"Compiled backend preview envelope whose patch.page is applied locally.\"},{\"kind\":\"childOperation\",\"resolver\":\"widget-child-authoring-manifest-operation\",\"description\":\"Delegated operation owned by the child widget component manifest or configEditor.\"}]}",
|
|
4009
4031
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
4010
|
-
"contentHash": "
|
|
4032
|
+
"contentHash": "a6db7365b1b176ad69ca829858292dd4906596a23105acaf42c8cdc532e3bb57",
|
|
4011
4033
|
"sourceKind": "component_definition",
|
|
4012
4034
|
"sourceId": "praxis-page-builder",
|
|
4013
4035
|
"corpusVersion": "1.0.0"
|
|
@@ -4015,9 +4037,9 @@
|
|
|
4015
4037
|
{
|
|
4016
4038
|
"chunkIndex": 21,
|
|
4017
4039
|
"chunkKind": "authoring_manifest",
|
|
4018
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
4040
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"page.configure\",\"title\":\"Configure page metadata\",\"scope\":\"global\",\"targetKind\":\"page\",\"target\":{\"kind\":\"page\",\"resolver\":\"widget-page-definition-root\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"title\":{\"type\":\"string\"},\"layoutPreset\":{\"type\":\"string\"},\"themePreset\":{\"type\":\"string\"},\"context\":{\"type\":\"object\"},\"metadata\":{\"type\":\"object\"},\"dataSources\":{\"oneOf\":[{\"type\":\"array\"},{\"type\":\"object\"}]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-page-configure\",\"handlerContract\":{\"reads\":[\"WidgetPageDefinition\",\"DynamicPageConfigEditorComponent\",\"SettingsPanelBridge\"],\"writes\":[\"page.title\",\"page.layoutPreset\",\"page.themePreset\",\"page.context\",\"page.metadata\",\"page.dataSources\"],\"identityKeys\":[\"pageIdentity.componentId\",\"pageIdentity.scope\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"title\":{\"type\":\"string\"},\"layoutPreset\":{\"type\":\"string\"},\"themePreset\":{\"type\":\"string\"},\"context\":{\"type\":\"object\"},\"metadata\":{\"type\":\"object\"},\"dataSources\":{\"oneOf\":[{\"type\":\"array\"},{\"type\":\"object\"}]}}},\"failureModes\":[\"page-not-loaded\",\"context-not-json\",\"settings-panel-bridge-missing\"],\"description\":\"Updates root page metadata and declarative dataSources while preserving the renderable WidgetPageDefinition shape.\"}}],\"validators\":[\"widget-page-definition-valid\",\"no-legacy-grid-page-definition\",\"page-context-json-valid\",\"settings-panel-round-trip-valid\"],\"affectedPaths\":[\"title\",\"layoutPreset\",\"themePreset\",\"context\",\"metadata\",\"dataSources\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"page-loaded\"]},{\"operationId\":\"canvas.configure\",\"title\":\"Configure page canvas\",\"scope\":\"layout\",\"targetKind\":\"canvas\",\"target\":{\"kind\":\"canvas\",\"resolver\":\"widget-page-canvas\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"columns\":{\"type\":\"number\"},\"rowUnit\":{\"type\":\"number\"},\"gap\":{\"type\":\"number\"},\"items\":{\"type\":\"array\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-canvas-configure\",\"handlerContract\":{\"reads\":[\"WidgetPageDefinition.canvas\",\"DynamicPageBuilderComponent\"],\"writes\":[\"page.canvas.columns\",\"page.canvas.rowUnit\",\"page.canvas.gap\",\"page.canvas.items\"],\"identityKeys\":[\"canvas\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"columns\":{\"type\":\"number\"},\"rowUnit\":{\"type\":\"number\"},\"gap\":{\"type\":\"number\"},\"items\":{\"type\":\"array\"}}},\"failureModes\":[\"canvas-missing\",\"canvas-item-references-missing-widget\",\"invalid-grid-geometry\"],\"description\":\"Configures the top-level canvas without introducing legacy GridPageDefinition semantics.\"}}],\"validators\":[\"canvas-columns-integer\",\"canvas-row-unit-valid\",\"canvas-gap-valid\",\"canvas-items-reference-existing-widgets\"],\"affectedPaths\":[\"canvas.columns\",\"canvas.rowUnit\",\"canvas.gap\",\"canvas.items\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"page-loaded\"]},{\"operationId\":\"widget.add\",\"title\":\"Add widget to page\",\"scope\":\"layout\",\"targetKind\":\"widget\",\"target\":{\"kind\":\"widget\",\"resolver\":\"widget-by-stable-key\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"widgetKey\",\"componentId\"],\"properties\":{\"widgetKey\":{\"type\":\"string\"},\"componentId\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"inputs\":{\"type\":\"object\"},\"canvasItem\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-widget-add\",\"handlerContract\":{\"reads\":[\"WidgetPageDefinition.widgets\",\"WidgetPageDefinition.canvas\",\"ComponentDocRegistry\",\"PAGE_BUILDER_WIDGET_AI_CATALOGS\"],\"writes\":[\"page.widgets[]\",\"page.canvas.items[]\"],\"identityKeys\":[\"widgetKey\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"widgetKey\",\"componentId\"],\"properties\":{\"widgetKey\":{\"type\":\"string\"},\"componentId\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"inputs\":{\"type\":\"object\"},\"canvasItem\":{\"type\":\"object\"}}},\"failureModes\":[\"widget-key-duplicate\",\"component-not-registered\",\"canvas-item-invalid\",\"child-input-contract-unknown\"],\"description\":\"Adds a registered component as a widget and places it on the canvas using a stable widgetKey.\"}}],\"validators\":[\"widget-key-unique\",\"component-registered\",\"canvas-item-valid\",\"child-inputs-delegated\",\"widget-key-not-array-index\"],\"affectedPaths\":[\"widgets[]\",\"canvas.items[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"page-loaded\",\"component-catalog-loaded\"]},{\"operationId\":\"widget.remove\",\"title\":\"Remove widget from page\",\"scope\":\"layout\",\"targetKind\":\"widget\",\"target\":{\"kind\":\"widget\",\"resolver\":\"widget-by-stable-key\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"widgetKey\"],\"properties\":{\"widgetKey\":{\"type\":\"string\"},\"confirmed\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-widget-remove\",\"handlerContract\":{\"reads\":[\"WidgetPageDefinition.widgets\",\"WidgetPageDefinition.canvas.items\",\"WidgetPageDefinition.composition.links\"],\"writes\":[\"page.widgets[]\",\"page.canvas.items[]\",\"page.composition.links[]\"],\"identityKeys\":[\"widgetKey\"],\"failureModes\":[\"widget-not-found\",\"destructive-removal-not-confirmed\",\"dangling-composition-link\"],\"description\":\"Removes a widget and cleans canvas items and composition links that reference it.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"widget-exists\",\"destructive-removal-confirmed\",\"composition-links-cleaned\",\"canvas-items-reference-existing-widgets\"],\"affectedPaths\":[\"widgets[]\",\"canvas.items[]\",\"composition.links[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"page-loaded\",\"target-widget-exists\"]},{\"operationId\":\"widget.moveResize\",\"title\":\"Move or resize widget\",\"scope\":\"layout\",\"targetKind\":\"widget\",\"target\":{\"kind\":\"widget\",\"resolver\":\"widget-by-stable-key\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"widgetKey\",\"canvasItem\"],\"properties\":{\"widgetKey\":{\"type\":\"string\"},\"canvasItem\":{\"type\":\"object\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"page-builder-widget-move-resize\",\"handlerContract\":{\"reads\":[\"WidgetPageDefinition.canvas.items\",\"WidgetPageDefinition.widgets\"],\"writes\":[\"page.canvas.items[]\"],\"identityKeys\":[\"widgetKey\"],\"failureModes\":[\"widget-not-found\",\"canvas-item-invalid\",\"canvas-overlap-invalid\"],\"description\":\"Updates canvas placement for an existing widget using widgetKey as the stable identity.\"}}],\"validators\":[\"widget-exists\",\"canvas-item-valid\",\"canvas-item-targets-existing-widget\",\"canvas-overlap-policy-valid\"],\"affectedPaths\":[\"canvas.items[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"page-loaded\",\"target-widget-exists\"]}]}",
|
|
4019
4041
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
4020
|
-
"contentHash": "
|
|
4042
|
+
"contentHash": "57d7fff5f22a1f67f81799a50187639d02ce3aa6e8adaef3430155725b690ab0",
|
|
4021
4043
|
"sourceKind": "component_definition",
|
|
4022
4044
|
"sourceId": "praxis-page-builder",
|
|
4023
4045
|
"corpusVersion": "1.0.0"
|
|
@@ -4025,9 +4047,9 @@
|
|
|
4025
4047
|
{
|
|
4026
4048
|
"chunkIndex": 22,
|
|
4027
4049
|
"chunkKind": "authoring_manifest",
|
|
4028
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
4050
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"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\"]}]}",
|
|
4029
4051
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
4030
|
-
"contentHash": "
|
|
4052
|
+
"contentHash": "d1344e0691b8d7554e89281657b007367b84c26532b30b968bbe8d1b2b6183c9",
|
|
4031
4053
|
"sourceKind": "component_definition",
|
|
4032
4054
|
"sourceId": "praxis-page-builder",
|
|
4033
4055
|
"corpusVersion": "1.0.0"
|
|
@@ -4035,9 +4057,9 @@
|
|
|
4035
4057
|
{
|
|
4036
4058
|
"chunkIndex": 23,
|
|
4037
4059
|
"chunkKind": "authoring_manifest",
|
|
4038
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
4060
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"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\"]}]}",
|
|
4039
4061
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
4040
|
-
"contentHash": "
|
|
4062
|
+
"contentHash": "f2a072640ae50e1276f62abc2188e7bf119d888e76613146439115ed1e0ba38a",
|
|
4041
4063
|
"sourceKind": "component_definition",
|
|
4042
4064
|
"sourceId": "praxis-page-builder",
|
|
4043
4065
|
"corpusVersion": "1.0.0"
|
|
@@ -4045,9 +4067,9 @@
|
|
|
4045
4067
|
{
|
|
4046
4068
|
"chunkIndex": 24,
|
|
4047
4069
|
"chunkKind": "authoring_manifest",
|
|
4048
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
4070
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"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\"]}]}",
|
|
4049
4071
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
4050
|
-
"contentHash": "
|
|
4072
|
+
"contentHash": "10a5749a76e63d4bc10bf61adcf0db3c8368dd8ae5c66d5944facf5d27e81470",
|
|
4051
4073
|
"sourceKind": "component_definition",
|
|
4052
4074
|
"sourceId": "praxis-page-builder",
|
|
4053
4075
|
"corpusVersion": "1.0.0"
|
|
@@ -4055,9 +4077,9 @@
|
|
|
4055
4077
|
{
|
|
4056
4078
|
"chunkIndex": 25,
|
|
4057
4079
|
"chunkKind": "authoring_manifest",
|
|
4058
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
4080
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"widget-page-definition-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_PAGE_VALID\",\"description\":\"The document must remain a renderable WidgetPageDefinition.\"},{\"validatorId\":\"no-legacy-grid-page-definition\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_NO_GRID_PAGE\",\"description\":\"Legacy GridPageDefinition semantics cannot be reintroduced.\"},{\"validatorId\":\"page-context-json-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CONTEXT_JSON\",\"description\":\"Page context must stay JSON-serializable.\"},{\"validatorId\":\"settings-panel-round-trip-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_SETTINGS_ROUND_TRIP\",\"description\":\"Settings panel apply/save/reset/reopen must preserve the same page shape.\"},{\"validatorId\":\"canvas-columns-integer\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_COLUMNS\",\"description\":\"Canvas columns must be an integer grid count.\"},{\"validatorId\":\"canvas-row-unit-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_ROW_UNIT\",\"description\":\"Canvas row unit must be a positive layout unit.\"},{\"validatorId\":\"canvas-gap-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_GAP\",\"description\":\"Canvas gap must be a valid non-negative spacing value.\"},{\"validatorId\":\"canvas-items-reference-existing-widgets\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_WIDGET_REFS\",\"description\":\"Every canvas item must reference an existing widgetKey.\"},{\"validatorId\":\"widget-key-unique\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_WIDGET_KEY_UNIQUE\",\"description\":\"Widget keys must be unique.\"},{\"validatorId\":\"component-registered\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_COMPONENT_REGISTERED\",\"description\":\"Widget component id must exist in the component registry/catalog.\"},{\"validatorId\":\"canvas-item-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_ITEM\",\"description\":\"Canvas item geometry must be valid.\"},{\"validatorId\":\"child-inputs-delegated\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CHILD_INPUTS_DELEGATED\",\"description\":\"Child component input edits must delegate to the child owner.\"},{\"validatorId\":\"widget-key-not-array-index\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_WIDGET_KEY_INDEX\",\"description\":\"Array index is not a stable widget identity.\"},{\"validatorId\":\"widget-exists\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_WIDGET_EXISTS\",\"description\":\"Target widget must exist.\"},{\"validatorId\":\"destructive-removal-confirmed\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_DESTRUCTIVE_CONFIRMED\",\"description\":\"Destructive removals require explicit confirmation.\"},{\"validatorId\":\"composition-links-cleaned\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_LINKS_CLEANED\",\"description\":\"Removing a widget must remove dangling composition links.\"},{\"validatorId\":\"canvas-item-targets-existing-widget\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CANVAS_ITEM_TARGET\",\"description\":\"Moved canvas item must target an existing widget.\"},{\"validatorId\":\"canvas-overlap-policy-valid\",\"level\":\"warning\",\"code\":\"PAGE_BUILDER_CANVAS_OVERLAP\",\"description\":\"Canvas overlap policy must be respected.\"},{\"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.\"},{\"validatorId\":\"composition-link-id-unique\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_LINK_ID_UNIQUE\",\"description\":\"Composition link ids must be unique.\"},{\"validatorId\":\"composition-endpoints-resolve\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_LINK_ENDPOINTS\",\"description\":\"Composition endpoints must resolve to known widgets, ports and nested paths.\"},{\"validatorId\":\"nested-path-terminal-widget-key-required\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_NESTED_PATH_WIDGET_KEY\",\"description\":\"Nested component-port paths must terminate at a stable widget key.\"},{\"validatorId\":\"json-logic-condition-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_JSON_LOGIC\",\"description\":\"Composition link condition must be valid Json Logic.\"},{\"validatorId\":\"no-legacy-connections-write\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_NO_LEGACY_CONNECTIONS\",\"description\":\"Operations must write page.composition.links, not legacy connections.\"},{\"validatorId\":\"composition-link-exists\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_LINK_EXISTS\",\"description\":\"Target composition link must exist.\"},{\"validatorId\":\"composition-links-still-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_LINKS_STILL_VALID\",\"description\":\"Remaining composition links must still validate after the operation.\"},{\"validatorId\":\"ui-composition-plan-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_UI_PLAN_VALID\",\"description\":\"UiCompositionPlan must match the intermediate agentic plan contract.\"},{\"validatorId\":\"compiled-page-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_COMPILED_PAGE_VALID\",\"description\":\"Compiled output must be a valid WidgetPageDefinition.\"},{\"validatorId\":\"widget-keys-unique\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_WIDGET_KEYS_UNIQUE\",\"description\":\"Compiled plan must produce unique widget keys.\"},{\"validatorId\":\"state-path-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_STATE_PATH\",\"description\":\"State paths must be valid page state paths.\"},{\"validatorId\":\"state-layer-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_STATE_LAYER\",\"description\":\"State layer must be page or session.\"},{\"validatorId\":\"state-json-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_STATE_JSON\",\"description\":\"State values must be JSON-serializable.\"},{\"validatorId\":\"composition-state-links-still-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_STATE_LINKS\",\"description\":\"State edits must not break composition links.\"},{\"validatorId\":\"preview-result-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_PREVIEW_VALID\",\"description\":\"Agentic preview result must be structurally valid.\"},{\"validatorId\":\"ui-composition-target-registry-available\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_UI_PLAN_TARGET_REGISTRY\",\"description\":\"UiCompositionPlan apply requires the ComponentMetadataRegistry of the target host.\"},{\"validatorId\":\"ui-composition-components-materializable\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_UI_PLAN_COMPONENTS_MATERIALIZABLE\",\"description\":\"Every planned component must resolve materializable metadata in the target registry.\"},{\"validatorId\":\"compiled-page-patch-present\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_PATCH_PAGE_PRESENT\",\"description\":\"Preview envelope must include compiledFormPatch.patch.page.\"},{\"validatorId\":\"no-envelope-runtime-persistence\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_NO_ENVELOPE_PERSISTENCE\",\"description\":\"Runtime persistence cannot save the full preview envelope.\"},{\"validatorId\":\"runtime-page-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_RUNTIME_PAGE_VALID\",\"description\":\"Runtime page must remain renderable by praxis-dynamic-page.\"},{\"validatorId\":\"page-identity-complete\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_PAGE_IDENTITY\",\"description\":\"Save requires component type, component id and scope identity.\"},{\"validatorId\":\"etag-policy-valid\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_ETAG_POLICY\",\"description\":\"Save must respect backend ETag/If-Match policy.\"},{\"validatorId\":\"child-manifest-available\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CHILD_MANIFEST_AVAILABLE\",\"description\":\"Delegated child component must expose an authoring manifest or configEditor.\"},{\"validatorId\":\"child-operation-known\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CHILD_OPERATION_KNOWN\",\"description\":\"Delegated child operation id must be known.\"}]}",
|
|
4059
4081
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
4060
|
-
"contentHash": "
|
|
4082
|
+
"contentHash": "a13fac7022335ef74d7417acb55d0573d34b1182ccc3bbbbd11c4db141defd39",
|
|
4061
4083
|
"sourceKind": "component_definition",
|
|
4062
4084
|
"sourceId": "praxis-page-builder",
|
|
4063
4085
|
"corpusVersion": "1.0.0"
|
|
@@ -4065,9 +4087,9 @@
|
|
|
4065
4087
|
{
|
|
4066
4088
|
"chunkIndex": 26,
|
|
4067
4089
|
"chunkKind": "authoring_manifest",
|
|
4068
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
4090
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"component-config-editor-respected\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_CONFIG_EDITOR_RESPECTED\",\"description\":\"ComponentDocMeta.configEditor must remain the source for child input editing.\"},{\"validatorId\":\"no-local-child-input-write\",\"level\":\"error\",\"code\":\"PAGE_BUILDER_NO_LOCAL_CHILD_INPUT_WRITE\",\"description\":\"Page-builder must not define child component input semantics locally.\"}]}",
|
|
4069
4091
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
4070
|
-
"contentHash": "
|
|
4092
|
+
"contentHash": "69816595a309faa8c4e0f4a1d38e25869c8843ebae2eb504cff7fc45bbaac589",
|
|
4071
4093
|
"sourceKind": "component_definition",
|
|
4072
4094
|
"sourceId": "praxis-page-builder",
|
|
4073
4095
|
"corpusVersion": "1.0.0"
|
|
@@ -4075,9 +4097,9 @@
|
|
|
4075
4097
|
{
|
|
4076
4098
|
"chunkIndex": 27,
|
|
4077
4099
|
"chunkKind": "authoring_manifest",
|
|
4078
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
4100
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"WidgetPageDefinition is the canonical persisted runtime page shape for page-builder.\",\"UiCompositionPlan is an intermediate agentic plan and must compile before local preview/apply.\",\"Page side inset is authored through UiCompositionPlan.layout.paddingInline and materialized as page.layout.paddingInline. It accepts a CSS length or var(); 0px removes it and omission inherits the host --pdx-page-padding-inline token. Device-specific overrides live under deviceLayouts.*.layout.paddingInline. The inset belongs to the page, not to widget shell body padding or table cells.\",\"UiCompositionPlan.i18n, context and layout compile into the corresponding WidgetPageDefinition fields so a complete page never depends on host-only enrichment. A key-only PraxisTextValue receives text from the fallbackLocale dictionary when available.\",\"UiCompositionPlan.selectionSyncs is an authoring shorthand that compiles into explicit canonical page.composition.links and is never persisted in WidgetPageDefinition.\",\"UiCompositionPlan.contextScopes compiles constants and state.initial into explicit widget inputs, and state context into explicit page.composition.links; runtime inheritance is never ambient.\",\"UiCompositionPlan transforms devem ser totais: use fallbackValue para invalidacao de selecao e select-case com defaultValue para materializar conteudo ou empty/reset sem bindings clear paralelos.\",\"UiCompositionPlan global-action sources declare only actionId; dynamicPage.composition.dispatch supplies the runtime payload, and target-only payload fields fail closed on sources.\",\"Widget keys and composition link ids are stable identities; array indexes are never canonical identities.\",\"Persisted wiring uses page.composition.links and must not write legacy connections.\",\"The connection editor supports format-value in WidgetPageDefinition links with explicit config.format. This does not extend the UiCompositionPlanTransform shorthand. Invalid date/mask values prevent delivery and retain the previous target; plan identity, empty state and failures together.\",\"Nested component ports use component-port refs with nestedPath ending in a stable widget key.\",\"Child widget definition.inputs edits delegate to the child manifest or ComponentDocMeta.configEditor.\",\"Agentic preview preflights UiCompositionPlan against the target registry and applies the attested WidgetPageDefinition; persistence rebuilds patch.page from that page while the surrounding envelope remains diagnostics/audit data.\",\"Save uses pageIdentity and ETag policy from praxis-config-starter; pageIdentity is not persisted inside WidgetPageDefinition.\",\"Settings panel apply/save/reset/reopen must preserve page settings and widget shell config without hidden normalization drift.\"]}",
|
|
4079
4101
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
4080
|
-
"contentHash": "
|
|
4102
|
+
"contentHash": "5ab06dfaa630831e6da0d0b34d2f236274b39ba312a22e75389697baf18dd73a",
|
|
4081
4103
|
"sourceKind": "component_definition",
|
|
4082
4104
|
"sourceId": "praxis-page-builder",
|
|
4083
4105
|
"corpusVersion": "1.0.0"
|
|
@@ -4085,9 +4107,9 @@
|
|
|
4085
4107
|
{
|
|
4086
4108
|
"chunkIndex": 28,
|
|
4087
4109
|
"chunkKind": "authoring_manifest",
|
|
4088
|
-
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.
|
|
4110
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.2\",\"componentId\":\"praxis-page-builder\",\"ownerPackage\":\"@praxisui/page-builder\",\"configSchemaId\":\"WidgetPageDefinition\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"configure-dashboard-page\",\"request\":\"Set this page title to Payroll Overview and store payrollPeriod in the page context.\",\"operationId\":\"page.configure\",\"params\":{\"title\":\"Payroll Overview\",\"context\":{\"payrollPeriod\":\"current\"}},\"isPositive\":true},{\"id\":\"configure-canvas-grid\",\"request\":\"Use a 12 column dashboard grid with compact gaps.\",\"operationId\":\"canvas.configure\",\"target\":\"canvas\",\"params\":{\"columns\":12,\"rowUnit\":8,\"gap\":8},\"isPositive\":true},{\"id\":\"add-employees-table-widget\",\"request\":\"Add an employees table widget to the left half of the first row.\",\"operationId\":\"widget.add\",\"target\":\"employees-table\",\"params\":{\"widgetKey\":\"employees-table\",\"componentId\":\"praxis-table\",\"canvasItem\":{\"x\":0,\"y\":0,\"w\":6,\"h\":8}},\"isPositive\":true},{\"id\":\"remove-summary-card\",\"request\":\"Remove the summary-card widget and its links.\",\"operationId\":\"widget.remove\",\"target\":\"summary-card\",\"params\":{\"widgetKey\":\"summary-card\",\"confirmed\":true},\"isPositive\":true},{\"id\":\"move-payroll-chart\",\"request\":\"Move payroll-chart to the right column and make it taller.\",\"operationId\":\"widget.moveResize\",\"target\":\"payroll-chart\",\"params\":{\"widgetKey\":\"payroll-chart\",\"canvasItem\":{\"x\":6,\"y\":0,\"w\":6,\"h\":10}},\"isPositive\":true},{\"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},{\"id\":\"link-department-selection-to-table\",\"request\":\"When department-list selection changes, filter employees-table by department id.\",\"operationId\":\"composition.link.add\",\"target\":\"department-selection-to-employees\",\"params\":{\"id\":\"department-selection-to-employees\",\"from\":{\"widget\":\"department-list\",\"port\":\"selection\"},\"to\":{\"widget\":\"employees-table\",\"port\":\"filter\"},\"intent\":\"selection-sync\"},\"isPositive\":true},{\"id\":\"remove-obsolete-link\",\"request\":\"Remove the old payroll-filter-link composition link.\",\"operationId\":\"composition.link.remove\",\"target\":\"payroll-filter-link\",\"params\":{\"id\":\"payroll-filter-link\",\"confirmed\":true},\"isPositive\":true},{\"id\":\"compile-resource-dashboard-plan\",\"request\":\"Compile the resource-dashboard plan returned by the assistant into a renderable page preview.\",\"operationId\":\"composition.plan.compile\",\"target\":\"preview-payroll-dashboard\",\"params\":{\"uiCompositionPlan\":{\"layoutPreset\":\"resource-dashboard\"}},\"isPositive\":true},{\"id\":\"set-selected-department-state\",\"request\":\"Store selectedDepartmentId in page state for downstream links.\",\"operationId\":\"state.set\",\"target\":\"state.selectedDepartmentId\",\"params\":{\"path\":\"selectedDepartmentId\",\"value\":\"sales\",\"layer\":\"page\"},\"isPositive\":true},{\"id\":\"apply-agentic-preview\",\"request\":\"Apply the current assistant preview to the local page.\",\"operationId\":\"page.preview.apply\",\"target\":\"preview-current\",\"params\":{\"previewId\":\"preview-current\"},\"isPositive\":true},{\"id\":\"persist-page\",\"request\":\"Save this page configuration using the current ETag.\",\"operationId\":\"page.persist.save\",\"target\":\"tenant-dashboard-page\",\"params\":{\"pageIdentity\":{\"componentType\":\"page-builder\",\"componentId\":\"tenant-dashboard\",\"scope\":\"tenant\"},\"etag\":\"\\\"v7\\\"\"},\"isPositive\":true},{\"id\":\"delegate-table-column-edit\",\"request\":\"Add a salary column to the employees table widget.\",\"operationId\":\"childOperation.delegate\",\"target\":\"employees-table\",\"params\":{\"widgetKey\":\"employees-table\",\"childComponentId\":\"praxis-table\",\"childOperationId\":\"column.add\",\"reason\":\"TableConfig is owned by praxis-table.\"},\"isPositive\":true},{\"id\":\"reject-direct-dynamic-form-field-write\",\"request\":\"Directly write a new dynamic-form field into the widget inputs from page-builder.\",\"operationId\":\"childOperation.delegate\",\"target\":\"employee-form\",\"params\":{\"widgetKey\":\"employee-form\",\"childComponentId\":\"praxis-dynamic-form\",\"childOperationId\":\"field.add\",\"reason\":\"Dynamic form fields are delegated.\"},\"isPositive\":false},{\"id\":\"reject-legacy-connections\",\"request\":\"Create the widget link under the old connections collection.\",\"operationId\":\"composition.link.add\",\"target\":\"legacy-connection\",\"params\":{\"id\":\"legacy-connection\",\"collection\":\"connections\"},\"isPositive\":false}]}",
|
|
4089
4111
|
"sourcePointer": "projects/praxis-page-builder/src/lib/ai/praxis-page-builder-authoring-manifest.ts",
|
|
4090
|
-
"contentHash": "
|
|
4112
|
+
"contentHash": "bc59327f6f2da015074c8b0c6912246427713e1d9d8b294280517a9d5c909020",
|
|
4091
4113
|
"sourceKind": "component_definition",
|
|
4092
4114
|
"sourceId": "praxis-page-builder",
|
|
4093
4115
|
"corpusVersion": "1.0.0"
|