@praxisui/rich-content 10.0.0-rc.32 → 10.0.0-rc.34

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-17T14:44:09.509Z",
3
+ "generatedAt": "2026-10-19T09:48:25.455Z",
4
4
  "packageName": "@praxisui/rich-content",
5
- "packageVersion": "10.0.0-rc.32",
5
+ "packageVersion": "10.0.0-rc.34",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 1,
@@ -7009,7 +7009,7 @@
7009
7009
  "validatorId": "expression-path-safe",
7010
7010
  "level": "warning",
7011
7011
  "code": "PRC010",
7012
- "description": "Expression paths must remain simple context paths or Json Logic expressions, not string DSL code."
7012
+ "description": "Expression paths must remain simple context/state paths (optionally chained with CSP-safe declarative value pipes such as default, round, number, percent, currency, uppercase, lowercase) or Json Logic expressions, not arbitrary JS string DSL code."
7013
7013
  },
7014
7014
  {
7015
7015
  "validatorId": "link-url-safe",
@@ -7156,7 +7156,8 @@
7156
7156
  "Block identity should prefer document.nodes[].id; array index is a resolver fallback only and cannot be the canonical identity for generated patches.",
7157
7157
  "Link authoring uses canonical link nodes with safe href/target/rel instead of markdown or raw HTML embedded in text nodes.",
7158
7158
  "MediaBlock, timeline node appearance, timeline item, metadata, visibleWhen and safe style authoring use the same structured paths exposed by the visual config editor.",
7159
- "Preset authoring persists only rich-block refs and inputs; host capability functions remain runtime-mediated and are not serialized."
7159
+ "Preset authoring persists only rich-block refs and inputs; host capability functions remain runtime-mediated and are not serialized.",
7160
+ "Expression fields (*Expr) and embedded ${...} / {{...}} tokens support bare context/state paths and CSP-safe declarative value pipes (default/coalesce, round, number, percent, currency, uppercase, lowercase) evaluated via @praxisui/core applyDeclarativeValuePipe."
7160
7161
  ],
7161
7162
  "examples": [
7162
7163
  {
@@ -7388,9 +7389,9 @@
7388
7389
  {
7389
7390
  "chunkIndex": 3,
7390
7391
  "chunkKind": "authoring_manifest",
7391
- "content": "{\"operationId\":\"block.update\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Update rich content block fields Effects: merge-by-key.\",\"scope\":\"templating\",\"target\":{\"kind\":\"block\",\"resolver\":\"rich-block-node-by-id-or-path\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"id\",\"testId\",\"className\",\"style\",\"visibleWhen\",\"disabledWhen\",\"loadWhen\",\"classWhen\",\"styleWhen\",\"requiresCapabilities\",\"capabilityMode\",\"text\",\"textExpr\",\"label\",\"labelExpr\",\"href\",\"target\",\"rel\",\"src\",\"alt\",\"title\",\"titleExpr\",\"subtitle\",\"subtitleExpr\",\"relationLabel\",\"message\",\"summary\",\"summaryExpr\",\"description\",\"ctaLabel\",\"caption\",\"emptyText\",\"errorText\",\"status\",\"statusExpr\",\"owner\",\"ownerExpr\",\"policySource\",\"policySourceExpr\",\"version\",\"versionExpr\",\"confidence\",\"confidenceExpr\",\"risk\",\"riskExpr\",\"lastReviewed\",\"lastReviewedExpr\",\"supersedes\",\"supersedesExpr\",\"evidence\",\"appearance\",\"variant\",\"tone\",\"size\",\"density\",\"orientation\",\"loading\",\"loadingExpr\",\"active\",\"activeExpr\",\"defaultTabId\",\"order\",\"position\",\"connectorVariant\",\"connectorColor\",\"markerVariant\",\"markerColor\",\"markerStyle\",\"emphasis\",\"textAppearance\",\"icon\",\"formId\",\"columns\",\"minColumnWidth\",\"alignItems\",\"layout\",\"ctaPlacement\",\"ctaVariant\",\"action\",\"actions\",\"primaryAction\",\"secondaryActions\",\"media\",\"headerAction\",\"headingLevel\",\"identity\",\"breadcrumbs\",\"overflowActions\",\"relatedLinks\",\"interaction\",\"accessibility\",\"fields\",\"items\",\"header\",\"body\",\"footer\",\"aside\"],\"semanticTerms\":[\"id\",\"testId\",\"className\",\"style\",\"visibleWhen\",\"disabledWhen\",\"loadWhen\",\"classWhen\",\"styleWhen\",\"requiresCapabilities\",\"capabilityMode\",\"text\",\"textExpr\",\"label\",\"labelExpr\",\"href\",\"target\",\"rel\",\"src\",\"alt\",\"title\",\"titleExpr\",\"subtitle\",\"subtitleExpr\",\"relationLabel\",\"message\",\"summary\",\"summaryExpr\",\"description\",\"ctaLabel\",\"caption\",\"emptyText\",\"errorText\",\"status\",\"statusExpr\",\"owner\",\"ownerExpr\",\"policySource\",\"policySourceExpr\",\"version\",\"versionExpr\",\"confidence\",\"confidenceExpr\",\"risk\",\"riskExpr\",\"lastReviewed\",\"lastReviewedExpr\",\"supersedes\",\"supersedesExpr\",\"evidence\",\"appearance\",\"variant\",\"tone\",\"size\",\"density\",\"orientation\",\"loading\",\"loadingExpr\",\"active\",\"activeExpr\",\"defaultTabId\",\"order\",\"position\",\"connectorVariant\",\"connectorColor\",\"markerVariant\",\"markerColor\",\"markerStyle\",\"emphasis\",\"textAppearance\",\"icon\",\"formId\",\"columns\",\"minColumnWidth\",\"alignItems\",\"layout\",\"ctaPlacement\",\"ctaVariant\",\"action\",\"actions\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"document.nodes[]\",\"document.nodes[].id\",\"document.nodes[].testId\",\"document.nodes[].className\",\"document.nodes[].style\",\"document.nodes[].visibleWhen\",\"document.nodes[].disabledWhen\",\"document.nodes[].loadWhen\",\"document.nodes[].classWhen\",\"document.nodes[].styleWhen\",\"document.nodes[].requiresCapabilities\",\"document.nodes[].capabilityMode\",\"document.nodes[].text\",\"document.nodes[].textExpr\",\"document.nodes[].label\",\"document.nodes[].labelExpr\",\"document.nodes[].href\",\"document.nodes[].target\",\"document.nodes[].rel\",\"document.nodes[].src\",\"document.nodes[].alt\",\"document.nodes[].title\",\"document.nodes[].titleExpr\",\"document.nodes[].subtitle\",\"document.nodes[].subtitleExpr\",\"document.nodes[].relationLabel\",\"document.nodes[].message\",\"document.nodes[].summary\",\"document.nodes[].summaryExpr\",\"document.nodes[].description\",\"document.nodes[].ctaLabel\",\"document.nodes[].caption\",\"document.nodes[].emptyText\",\"document.nodes[].errorText\",\"document.nodes[].status\",\"document.nodes[].statusExpr\",\"document.nodes[].owner\",\"document.nodes[].ownerExpr\",\"document.nodes[].policySource\",\"document.nodes[].policySourceExpr\",\"document.nodes[].version\",\"document.nodes[].versionExpr\",\"document.nodes[].confidence\",\"document.nodes[].confidenceExpr\",\"document.nodes[].risk\",\"document.nodes[].riskExpr\",\"document.nodes[].lastReviewed\",\"document.nodes[].lastReviewedExpr\",\"document.nodes[].supersedes\",\"document.nodes[].supersedesExpr\",\"document.nodes[].evidence\",\"document.nodes[].appearance\",\"document.nodes[].variant\",\"document.nodes[].tone\",\"document.nodes[].size\",\"document.nodes[].density\",\"document.nodes[].orientation\",\"document.nodes[].loading\",\"document.nodes[].loadingExpr\",\"document.nodes[].active\",\"document.nodes[].activeExpr\",\"document.nodes[].defaultTabId\",\"document.nodes[].position\",\"document.nodes[].connectorVariant\",\"document.nodes[].connectorColor\",\"document.nodes[].markerVariant\",\"document.nodes[].markerColor\",\"document.nodes[].markerStyle\",\"document.nodes[].icon\",\"document.nodes[].formId\",\"document.nodes[].columns\",\"document.nodes[].layout\",\"document.nodes[].action\",\"document.nodes[].actions\",\"document.nodes[].primaryAction\",\"document.nodes[].secondaryActions\",\"document.nodes[].media\",\"document.nodes[].headerAction\",\"document.nodes[].headingLevel\",\"document.nodes[].identity\",\"document.nodes[].breadcrumbs\",\"document.nodes[].overflowActions\",\"document.nodes[].relatedLinks\",\"document.nodes[].interaction\",\"document.nodes[].accessibility\",\"document.nodes[].fields\",\"document.nodes[].items[]\",\"document.nodes[].header\",\"document.nodes[].body\",\"document.nodes[].footer\",\"document.nodes[].aside\"],\"validators\":[{\"validatorId\":\"block-exists\",\"level\":\"error\",\"code\":\"PRC005\",\"description\":\"Target block must exist before patching, reordering or removing it.\"},{\"validatorId\":\"node-types-supported\",\"level\":\"error\",\"code\":\"PRC003\",\"description\":\"Nodes must use supported rich-content node types, including link as a structured node rather than arbitrary HTML.\"},{\"validatorId\":\"unsafe-url-rejected\",\"level\":\"error\",\"code\":\"PRC014\",\"description\":\"Image, avatar and link URL fields must reject unsafe protocols and null bytes.\"},{\"validatorId\":\"unsafe-style-rejected\",\"level\":\"error\",\"code\":\"PRC015\",\"description\":\"Inline style values must reject script, import, binding and data URL expressions.\"},{\"validatorId\":\"expression-path-safe\",\"level\":\"warning\",\"code\":\"PRC010\",\"description\":\"Expression paths must remain simple context paths or Json Logic expressions, not string DSL code.\"},{\"validatorId\":\"document-shape-canonical\",\"level\":\"error\",\"code\":\"PRC001\",\"description\":\"Documents must satisfy RichContentDocument with kind praxis.rich-content, version 1.0.0 and a nodes array.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PRC024\",\"description\":\"Config editor, Settings Panel payload and runtime renderer must preserve document structure, layout and rootClassName.\"}],\"preconditions\":[\"config-initialized\",\"target-block-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
7392
+ "content": "{\"operationId\":\"block.update\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Update rich content block fields Effects: merge-by-key.\",\"scope\":\"templating\",\"target\":{\"kind\":\"block\",\"resolver\":\"rich-block-node-by-id-or-path\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"id\",\"testId\",\"className\",\"style\",\"visibleWhen\",\"disabledWhen\",\"loadWhen\",\"classWhen\",\"styleWhen\",\"requiresCapabilities\",\"capabilityMode\",\"text\",\"textExpr\",\"label\",\"labelExpr\",\"href\",\"target\",\"rel\",\"src\",\"alt\",\"title\",\"titleExpr\",\"subtitle\",\"subtitleExpr\",\"relationLabel\",\"message\",\"summary\",\"summaryExpr\",\"description\",\"ctaLabel\",\"caption\",\"emptyText\",\"errorText\",\"status\",\"statusExpr\",\"owner\",\"ownerExpr\",\"policySource\",\"policySourceExpr\",\"version\",\"versionExpr\",\"confidence\",\"confidenceExpr\",\"risk\",\"riskExpr\",\"lastReviewed\",\"lastReviewedExpr\",\"supersedes\",\"supersedesExpr\",\"evidence\",\"appearance\",\"variant\",\"tone\",\"size\",\"density\",\"orientation\",\"loading\",\"loadingExpr\",\"active\",\"activeExpr\",\"defaultTabId\",\"order\",\"position\",\"connectorVariant\",\"connectorColor\",\"markerVariant\",\"markerColor\",\"markerStyle\",\"emphasis\",\"textAppearance\",\"icon\",\"formId\",\"columns\",\"minColumnWidth\",\"alignItems\",\"layout\",\"ctaPlacement\",\"ctaVariant\",\"action\",\"actions\",\"primaryAction\",\"secondaryActions\",\"media\",\"headerAction\",\"headingLevel\",\"identity\",\"breadcrumbs\",\"overflowActions\",\"relatedLinks\",\"interaction\",\"accessibility\",\"fields\",\"items\",\"header\",\"body\",\"footer\",\"aside\"],\"semanticTerms\":[\"id\",\"testId\",\"className\",\"style\",\"visibleWhen\",\"disabledWhen\",\"loadWhen\",\"classWhen\",\"styleWhen\",\"requiresCapabilities\",\"capabilityMode\",\"text\",\"textExpr\",\"label\",\"labelExpr\",\"href\",\"target\",\"rel\",\"src\",\"alt\",\"title\",\"titleExpr\",\"subtitle\",\"subtitleExpr\",\"relationLabel\",\"message\",\"summary\",\"summaryExpr\",\"description\",\"ctaLabel\",\"caption\",\"emptyText\",\"errorText\",\"status\",\"statusExpr\",\"owner\",\"ownerExpr\",\"policySource\",\"policySourceExpr\",\"version\",\"versionExpr\",\"confidence\",\"confidenceExpr\",\"risk\",\"riskExpr\",\"lastReviewed\",\"lastReviewedExpr\",\"supersedes\",\"supersedesExpr\",\"evidence\",\"appearance\",\"variant\",\"tone\",\"size\",\"density\",\"orientation\",\"loading\",\"loadingExpr\",\"active\",\"activeExpr\",\"defaultTabId\",\"order\",\"position\",\"connectorVariant\",\"connectorColor\",\"markerVariant\",\"markerColor\",\"markerStyle\",\"emphasis\",\"textAppearance\",\"icon\",\"formId\",\"columns\",\"minColumnWidth\",\"alignItems\",\"layout\",\"ctaPlacement\",\"ctaVariant\",\"action\",\"actions\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"document.nodes[]\",\"document.nodes[].id\",\"document.nodes[].testId\",\"document.nodes[].className\",\"document.nodes[].style\",\"document.nodes[].visibleWhen\",\"document.nodes[].disabledWhen\",\"document.nodes[].loadWhen\",\"document.nodes[].classWhen\",\"document.nodes[].styleWhen\",\"document.nodes[].requiresCapabilities\",\"document.nodes[].capabilityMode\",\"document.nodes[].text\",\"document.nodes[].textExpr\",\"document.nodes[].label\",\"document.nodes[].labelExpr\",\"document.nodes[].href\",\"document.nodes[].target\",\"document.nodes[].rel\",\"document.nodes[].src\",\"document.nodes[].alt\",\"document.nodes[].title\",\"document.nodes[].titleExpr\",\"document.nodes[].subtitle\",\"document.nodes[].subtitleExpr\",\"document.nodes[].relationLabel\",\"document.nodes[].message\",\"document.nodes[].summary\",\"document.nodes[].summaryExpr\",\"document.nodes[].description\",\"document.nodes[].ctaLabel\",\"document.nodes[].caption\",\"document.nodes[].emptyText\",\"document.nodes[].errorText\",\"document.nodes[].status\",\"document.nodes[].statusExpr\",\"document.nodes[].owner\",\"document.nodes[].ownerExpr\",\"document.nodes[].policySource\",\"document.nodes[].policySourceExpr\",\"document.nodes[].version\",\"document.nodes[].versionExpr\",\"document.nodes[].confidence\",\"document.nodes[].confidenceExpr\",\"document.nodes[].risk\",\"document.nodes[].riskExpr\",\"document.nodes[].lastReviewed\",\"document.nodes[].lastReviewedExpr\",\"document.nodes[].supersedes\",\"document.nodes[].supersedesExpr\",\"document.nodes[].evidence\",\"document.nodes[].appearance\",\"document.nodes[].variant\",\"document.nodes[].tone\",\"document.nodes[].size\",\"document.nodes[].density\",\"document.nodes[].orientation\",\"document.nodes[].loading\",\"document.nodes[].loadingExpr\",\"document.nodes[].active\",\"document.nodes[].activeExpr\",\"document.nodes[].defaultTabId\",\"document.nodes[].position\",\"document.nodes[].connectorVariant\",\"document.nodes[].connectorColor\",\"document.nodes[].markerVariant\",\"document.nodes[].markerColor\",\"document.nodes[].markerStyle\",\"document.nodes[].icon\",\"document.nodes[].formId\",\"document.nodes[].columns\",\"document.nodes[].layout\",\"document.nodes[].action\",\"document.nodes[].actions\",\"document.nodes[].primaryAction\",\"document.nodes[].secondaryActions\",\"document.nodes[].media\",\"document.nodes[].headerAction\",\"document.nodes[].headingLevel\",\"document.nodes[].identity\",\"document.nodes[].breadcrumbs\",\"document.nodes[].overflowActions\",\"document.nodes[].relatedLinks\",\"document.nodes[].interaction\",\"document.nodes[].accessibility\",\"document.nodes[].fields\",\"document.nodes[].items[]\",\"document.nodes[].header\",\"document.nodes[].body\",\"document.nodes[].footer\",\"document.nodes[].aside\"],\"validators\":[{\"validatorId\":\"block-exists\",\"level\":\"error\",\"code\":\"PRC005\",\"description\":\"Target block must exist before patching, reordering or removing it.\"},{\"validatorId\":\"node-types-supported\",\"level\":\"error\",\"code\":\"PRC003\",\"description\":\"Nodes must use supported rich-content node types, including link as a structured node rather than arbitrary HTML.\"},{\"validatorId\":\"unsafe-url-rejected\",\"level\":\"error\",\"code\":\"PRC014\",\"description\":\"Image, avatar and link URL fields must reject unsafe protocols and null bytes.\"},{\"validatorId\":\"unsafe-style-rejected\",\"level\":\"error\",\"code\":\"PRC015\",\"description\":\"Inline style values must reject script, import, binding and data URL expressions.\"},{\"validatorId\":\"expression-path-safe\",\"level\":\"warning\",\"code\":\"PRC010\",\"description\":\"Expression paths must remain simple context/state paths (optionally chained with CSP-safe declarative value pipes such as default, round, number, percent, currency, uppercase, lowercase) or Json Logic expressions, not arbitrary JS string DSL code.\"},{\"validatorId\":\"document-shape-canonical\",\"level\":\"error\",\"code\":\"PRC001\",\"description\":\"Documents must satisfy RichContentDocument with kind praxis.rich-content, version 1.0.0 and a nodes array.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PRC024\",\"description\":\"Config editor, Settings Panel payload and runtime renderer must preserve document structure, layout and rootClassName.\"}],\"preconditions\":[\"config-initialized\",\"target-block-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
7392
7393
  "sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
7393
- "contentHash": "fccf8dc3bfdf2ddbb7a6361b8117ecce0386fae35cfb6c2455f99867368c18a6",
7394
+ "contentHash": "477cfcc5701abf52ee954a9db872b1c480d8e666eb35f7e15db7889461602fcf",
7394
7395
  "sourceKind": "component_definition",
7395
7396
  "sourceId": "praxis-rich-content",
7396
7397
  "corpusVersion": "1.0.0"
@@ -7418,9 +7419,9 @@
7418
7419
  {
7419
7420
  "chunkIndex": 6,
7420
7421
  "chunkKind": "authoring_manifest",
7421
- "content": "{\"operationId\":\"text.update\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Update rich content text Effects: merge-by-key. Change the hero title to Customer overview.\",\"scope\":\"templating\",\"target\":{\"kind\":\"text\",\"resolver\":\"rich-text-node-by-id-or-path\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"text\",\"textExpr\",\"label\",\"labelExpr\",\"title\",\"subtitle\",\"relationLabel\",\"message\",\"summary\",\"description\",\"ctaLabel\",\"emptyText\",\"errorText\"],\"semanticTerms\":[\"text\",\"textExpr\",\"label\",\"labelExpr\",\"title\",\"subtitle\",\"relationLabel\",\"message\",\"summary\",\"description\",\"ctaLabel\",\"emptyText\",\"errorText\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"document.nodes[].text\",\"document.nodes[].textExpr\",\"document.nodes[].label\",\"document.nodes[].labelExpr\",\"document.nodes[].title\",\"document.nodes[].subtitle\",\"document.nodes[].relationLabel\",\"document.nodes[].message\",\"document.nodes[].summary\",\"document.nodes[].description\",\"document.nodes[].ctaLabel\",\"document.nodes[].emptyText\",\"document.nodes[].errorText\"],\"validators\":[{\"validatorId\":\"block-exists\",\"level\":\"error\",\"code\":\"PRC005\",\"description\":\"Target block must exist before patching, reordering or removing it.\"},{\"validatorId\":\"text-target-supports-field\",\"level\":\"error\",\"code\":\"PRC009\",\"description\":\"Text updates may only target fields supported by the selected node type.\"},{\"validatorId\":\"expression-path-safe\",\"level\":\"warning\",\"code\":\"PRC010\",\"description\":\"Expression paths must remain simple context paths or Json Logic expressions, not string DSL code.\"},{\"validatorId\":\"document-shape-canonical\",\"level\":\"error\",\"code\":\"PRC001\",\"description\":\"Documents must satisfy RichContentDocument with kind praxis.rich-content, version 1.0.0 and a nodes array.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PRC024\",\"description\":\"Config editor, Settings Panel payload and runtime renderer must preserve document structure, layout and rootClassName.\"}],\"preconditions\":[\"config-initialized\",\"target-block-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"update-title-text\",\"request\":\"Change the hero title to Customer overview.\",\"operationId\":\"text.update\",\"target\":\"hero-title\",\"params\":{\"text\":\"Customer overview\"},\"isPositive\":true}],\"negativeExamples\":[]}",
7422
+ "content": "{\"operationId\":\"text.update\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Update rich content text Effects: merge-by-key. Change the hero title to Customer overview.\",\"scope\":\"templating\",\"target\":{\"kind\":\"text\",\"resolver\":\"rich-text-node-by-id-or-path\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"text\",\"textExpr\",\"label\",\"labelExpr\",\"title\",\"subtitle\",\"relationLabel\",\"message\",\"summary\",\"description\",\"ctaLabel\",\"emptyText\",\"errorText\"],\"semanticTerms\":[\"text\",\"textExpr\",\"label\",\"labelExpr\",\"title\",\"subtitle\",\"relationLabel\",\"message\",\"summary\",\"description\",\"ctaLabel\",\"emptyText\",\"errorText\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"document.nodes[].text\",\"document.nodes[].textExpr\",\"document.nodes[].label\",\"document.nodes[].labelExpr\",\"document.nodes[].title\",\"document.nodes[].subtitle\",\"document.nodes[].relationLabel\",\"document.nodes[].message\",\"document.nodes[].summary\",\"document.nodes[].description\",\"document.nodes[].ctaLabel\",\"document.nodes[].emptyText\",\"document.nodes[].errorText\"],\"validators\":[{\"validatorId\":\"block-exists\",\"level\":\"error\",\"code\":\"PRC005\",\"description\":\"Target block must exist before patching, reordering or removing it.\"},{\"validatorId\":\"text-target-supports-field\",\"level\":\"error\",\"code\":\"PRC009\",\"description\":\"Text updates may only target fields supported by the selected node type.\"},{\"validatorId\":\"expression-path-safe\",\"level\":\"warning\",\"code\":\"PRC010\",\"description\":\"Expression paths must remain simple context/state paths (optionally chained with CSP-safe declarative value pipes such as default, round, number, percent, currency, uppercase, lowercase) or Json Logic expressions, not arbitrary JS string DSL code.\"},{\"validatorId\":\"document-shape-canonical\",\"level\":\"error\",\"code\":\"PRC001\",\"description\":\"Documents must satisfy RichContentDocument with kind praxis.rich-content, version 1.0.0 and a nodes array.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PRC024\",\"description\":\"Config editor, Settings Panel payload and runtime renderer must preserve document structure, layout and rootClassName.\"}],\"preconditions\":[\"config-initialized\",\"target-block-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"update-title-text\",\"request\":\"Change the hero title to Customer overview.\",\"operationId\":\"text.update\",\"target\":\"hero-title\",\"params\":{\"text\":\"Customer overview\"},\"isPositive\":true}],\"negativeExamples\":[]}",
7422
7423
  "sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
7423
- "contentHash": "d3cbfeea0ec49dfb9876931e1e3de36c305f69c408c8f65e96d869acc82143f8",
7424
+ "contentHash": "3da0c8f7cf334969411c0592a772068fd5b644f73f2930e30cb6a8298d4ce2e2",
7424
7425
  "sourceKind": "component_definition",
7425
7426
  "sourceId": "praxis-rich-content",
7426
7427
  "corpusVersion": "1.0.0"
@@ -7468,9 +7469,9 @@
7468
7469
  {
7469
7470
  "chunkIndex": 11,
7470
7471
  "chunkKind": "authoring_manifest",
7471
- "content": "{\"operationId\":\"mediaBlock.update\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Update media block fields Effects: compile-domain-patch. Update the profile media block title and avatar name.\",\"scope\":\"templating\",\"target\":{\"kind\":\"media\",\"resolver\":\"rich-media-node-by-id-or-path\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"blockId\",\"avatarName\",\"avatarImageSrc\",\"title\",\"titleExpr\",\"subtitle\",\"subtitleExpr\"],\"semanticTerms\":[\"blockId\",\"avatarName\",\"avatarImageSrc\",\"title\",\"titleExpr\",\"subtitle\",\"subtitleExpr\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"document.nodes[].avatar\",\"document.nodes[].title\",\"document.nodes[].subtitle\"],\"validators\":[{\"validatorId\":\"block-exists\",\"level\":\"error\",\"code\":\"PRC005\",\"description\":\"Target block must exist before patching, reordering or removing it.\"},{\"validatorId\":\"media-block-target-valid\",\"level\":\"error\",\"code\":\"PRC027\",\"description\":\"Media operations must target a mediaBlock node and preserve structured avatar/text child nodes.\"},{\"validatorId\":\"unsafe-url-rejected\",\"level\":\"error\",\"code\":\"PRC014\",\"description\":\"Image, avatar and link URL fields must reject unsafe protocols and null bytes.\"},{\"validatorId\":\"expression-path-safe\",\"level\":\"warning\",\"code\":\"PRC010\",\"description\":\"Expression paths must remain simple context paths or Json Logic expressions, not string DSL code.\"},{\"validatorId\":\"document-shape-canonical\",\"level\":\"error\",\"code\":\"PRC001\",\"description\":\"Documents must satisfy RichContentDocument with kind praxis.rich-content, version 1.0.0 and a nodes array.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PRC024\",\"description\":\"Config editor, Settings Panel payload and runtime renderer must preserve document structure, layout and rootClassName.\"}],\"preconditions\":[\"config-initialized\",\"target-block-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"update-media-title\",\"request\":\"Update the profile media block title and avatar name.\",\"operationId\":\"mediaBlock.update\",\"target\":\"profile-media\",\"params\":{\"blockId\":\"profile-media\",\"avatarName\":\"Ana Silva\",\"title\":\"Profile summary\"},\"isPositive\":true}],\"negativeExamples\":[]}",
7472
+ "content": "{\"operationId\":\"mediaBlock.update\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Update media block fields Effects: compile-domain-patch. Update the profile media block title and avatar name.\",\"scope\":\"templating\",\"target\":{\"kind\":\"media\",\"resolver\":\"rich-media-node-by-id-or-path\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"blockId\",\"avatarName\",\"avatarImageSrc\",\"title\",\"titleExpr\",\"subtitle\",\"subtitleExpr\"],\"semanticTerms\":[\"blockId\",\"avatarName\",\"avatarImageSrc\",\"title\",\"titleExpr\",\"subtitle\",\"subtitleExpr\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"document.nodes[].avatar\",\"document.nodes[].title\",\"document.nodes[].subtitle\"],\"validators\":[{\"validatorId\":\"block-exists\",\"level\":\"error\",\"code\":\"PRC005\",\"description\":\"Target block must exist before patching, reordering or removing it.\"},{\"validatorId\":\"media-block-target-valid\",\"level\":\"error\",\"code\":\"PRC027\",\"description\":\"Media operations must target a mediaBlock node and preserve structured avatar/text child nodes.\"},{\"validatorId\":\"unsafe-url-rejected\",\"level\":\"error\",\"code\":\"PRC014\",\"description\":\"Image, avatar and link URL fields must reject unsafe protocols and null bytes.\"},{\"validatorId\":\"expression-path-safe\",\"level\":\"warning\",\"code\":\"PRC010\",\"description\":\"Expression paths must remain simple context/state paths (optionally chained with CSP-safe declarative value pipes such as default, round, number, percent, currency, uppercase, lowercase) or Json Logic expressions, not arbitrary JS string DSL code.\"},{\"validatorId\":\"document-shape-canonical\",\"level\":\"error\",\"code\":\"PRC001\",\"description\":\"Documents must satisfy RichContentDocument with kind praxis.rich-content, version 1.0.0 and a nodes array.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PRC024\",\"description\":\"Config editor, Settings Panel payload and runtime renderer must preserve document structure, layout and rootClassName.\"}],\"preconditions\":[\"config-initialized\",\"target-block-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"update-media-title\",\"request\":\"Update the profile media block title and avatar name.\",\"operationId\":\"mediaBlock.update\",\"target\":\"profile-media\",\"params\":{\"blockId\":\"profile-media\",\"avatarName\":\"Ana Silva\",\"title\":\"Profile summary\"},\"isPositive\":true}],\"negativeExamples\":[]}",
7472
7473
  "sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
7473
- "contentHash": "81684fb5f13f87de0d3fb48e3831235d73567516080cfd122c90ec08fc2f19f3",
7474
+ "contentHash": "72d760a69ce50d9a87a038f2ffbe4277ca725c1e51484590f9b3e3767007e49f",
7474
7475
  "sourceKind": "component_definition",
7475
7476
  "sourceId": "praxis-rich-content",
7476
7477
  "corpusVersion": "1.0.0"
@@ -7638,9 +7639,9 @@
7638
7639
  {
7639
7640
  "chunkIndex": 28,
7640
7641
  "chunkKind": "authoring_manifest",
7641
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"document-shape-canonical\",\"level\":\"error\",\"code\":\"PRC001\",\"description\":\"Documents must satisfy RichContentDocument with kind praxis.rich-content, version 1.0.0 and a nodes array.\"},{\"validatorId\":\"document-version-supported\",\"level\":\"error\",\"code\":\"PRC002\",\"description\":\"Only document version 1.0.0 is supported.\"},{\"validatorId\":\"node-types-supported\",\"level\":\"error\",\"code\":\"PRC003\",\"description\":\"Nodes must use supported rich-content node types, including link as a structured node rather than arbitrary HTML.\"},{\"validatorId\":\"block-id-unique\",\"level\":\"warning\",\"code\":\"PRC004\",\"description\":\"Stable block ids should be unique when present; operations should prefer ids over array indexes.\"},{\"validatorId\":\"block-exists\",\"level\":\"error\",\"code\":\"PRC005\",\"description\":\"Target block must exist before patching, reordering or removing it.\"},{\"validatorId\":\"block-order-deterministic\",\"level\":\"error\",\"code\":\"PRC006\",\"description\":\"Block ordering must use stable ids or explicit before/after placement and not rely on transient generated indexes.\"},{\"validatorId\":\"destructive-removal-confirmed\",\"level\":\"error\",\"code\":\"PRC007\",\"description\":\"Block and link removal are destructive and require confirmation.\"},{\"validatorId\":\"document-not-empty-when-required\",\"level\":\"warning\",\"code\":\"PRC008\",\"description\":\"Removal should not leave an empty document unless the user explicitly requested an empty rich content document.\"},{\"validatorId\":\"text-target-supports-field\",\"level\":\"error\",\"code\":\"PRC009\",\"description\":\"Text updates may only target fields supported by the selected node type.\"},{\"validatorId\":\"expression-path-safe\",\"level\":\"warning\",\"code\":\"PRC010\",\"description\":\"Expression paths must remain simple context paths or Json Logic expressions, not string DSL code.\"},{\"validatorId\":\"link-url-safe\",\"level\":\"error\",\"code\":\"PRC011\",\"description\":\"Link href values must reject javascript:, vbscript:, file: and unsafe data URLs.\"},{\"validatorId\":\"link-policy-explicit\",\"level\":\"error\",\"code\":\"PRC012\",\"description\":\"Links must declare safe target/rel behavior; _blank links default to noopener noreferrer.\"},{\"validatorId\":\"link-target-exists\",\"level\":\"error\",\"code\":\"PRC013\",\"description\":\"Link removal must resolve an existing link node by stable id or path.\"},{\"validatorId\":\"unsafe-url-rejected\",\"level\":\"error\",\"code\":\"PRC014\",\"description\":\"Image, avatar and link URL fields must reject unsafe protocols and null bytes.\"},{\"validatorId\":\"unsafe-style-rejected\",\"level\":\"error\",\"code\":\"PRC015\",\"description\":\"Inline style values must reject script, import, binding and data URL expressions.\"},{\"validatorId\":\"unsafe-html-rejected\",\"level\":\"error\",\"code\":\"PRC016\",\"description\":\"Rich-content authoring must remain structured document JSON and must not accept arbitrary HTML/script patches.\"},{\"validatorId\":\"sanitization-policy-explicit\",\"level\":\"error\",\"code\":\"PRC017\",\"description\":\"Security policy requests must keep HTML disabled and URL/style guardrails explicit.\"},{\"validatorId\":\"security-change-confirmed\",\"level\":\"error\",\"code\":\"PRC018\",\"description\":\"Sanitization policy changes require explicit confirmation.\"},{\"validatorId\":\"preset-ref-valid\",\"level\":\"error\",\"code\":\"PRC019\",\"description\":\"Preset refs must use kind rich-block plus namespace, presetId and optional version.\"},{\"validatorId\":\"preset-exists-or-host-mediated\",\"level\":\"error\",\"code\":\"PRC020\",\"description\":\"Preset application must resolve through PRAXIS_RICH_BLOCK_PRESETS or a host-mediated resolver.\"},{\"validatorId\":\"host-capabilities-serializable\",\"level\":\"error\",\"code\":\"PRC021\",\"description\":\"Public contracts must not serialize host capability functions; only refs and inputs are persisted.\"},{\"validatorId\":\"layout-valid\",\"level\":\"error\",\"code\":\"PRC022\",\"description\":\"Layout must be block or inline.\"},{\"validatorId\":\"root-class-safe\",\"level\":\"error\",\"code\":\"PRC023\",\"description\":\"rootClassName must contain safe CSS class tokens; unsafe values block authoring and are ignored by the runtime.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PRC024\",\"description\":\"Config editor, Settings Panel payload and runtime renderer must preserve document structure, layout and rootClassName.\"},{\"validatorId\":\"class-name-safe\",\"level\":\"error\",\"code\":\"PRC025\",\"description\":\"Node className values must contain safe CSS class tokens.\"},{\"validatorId\":\"visible-when-json-logic\",\"level\":\"error\",\"code\":\"PRC026\",\"description\":\"visibleWhen must be a Json Logic expression object and not a string DSL.\"},{\"validatorId\":\"media-block-target-valid\",\"level\":\"error\",\"code\":\"PRC027\",\"description\":\"Media operations must target a mediaBlock node and preserve structured avatar/text child nodes.\"},{\"validatorId\":\"timeline-target-valid\",\"level\":\"error\",\"code\":\"PRC028\",\"description\":\"Timeline item operations must target a timeline node with an items array.\"},{\"validatorId\":\"timeline-item-valid\",\"level\":\"error\",\"code\":\"PRC029\",\"description\":\"Timeline items must be objects matching RichTimelineItem fields.\"},{\"validatorId\":\"timeline-item-id-unique\",\"level\":\"warning\",\"code\":\"PRC030\",\"description\":\"Timeline item ids should be unique inside a timeline node when present.\"},{\"validatorId\":\"timeline-item-exists\",\"level\":\"error\",\"code\":\"PRC031\",\"description\":\"Timeline item updates and removals must resolve an existing item by stable id or explicit fallback index.\"},{\"validatorId\":\"timeline-item-field-supported\",\"level\":\"error\",\"code\":\"PRC032\",\"description\":\"Timeline item updates may only target supported RichTimelineItem fields.\"},{\"validatorId\":\"timeline-setting-supported\",\"level\":\"error\",\"code\":\"PRC033\",\"description\":\"Timeline display settings must use supported position, connector, marker, emphasis, density and text appearance enum values.\"}]}",
7642
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"document-shape-canonical\",\"level\":\"error\",\"code\":\"PRC001\",\"description\":\"Documents must satisfy RichContentDocument with kind praxis.rich-content, version 1.0.0 and a nodes array.\"},{\"validatorId\":\"document-version-supported\",\"level\":\"error\",\"code\":\"PRC002\",\"description\":\"Only document version 1.0.0 is supported.\"},{\"validatorId\":\"node-types-supported\",\"level\":\"error\",\"code\":\"PRC003\",\"description\":\"Nodes must use supported rich-content node types, including link as a structured node rather than arbitrary HTML.\"},{\"validatorId\":\"block-id-unique\",\"level\":\"warning\",\"code\":\"PRC004\",\"description\":\"Stable block ids should be unique when present; operations should prefer ids over array indexes.\"},{\"validatorId\":\"block-exists\",\"level\":\"error\",\"code\":\"PRC005\",\"description\":\"Target block must exist before patching, reordering or removing it.\"},{\"validatorId\":\"block-order-deterministic\",\"level\":\"error\",\"code\":\"PRC006\",\"description\":\"Block ordering must use stable ids or explicit before/after placement and not rely on transient generated indexes.\"},{\"validatorId\":\"destructive-removal-confirmed\",\"level\":\"error\",\"code\":\"PRC007\",\"description\":\"Block and link removal are destructive and require confirmation.\"},{\"validatorId\":\"document-not-empty-when-required\",\"level\":\"warning\",\"code\":\"PRC008\",\"description\":\"Removal should not leave an empty document unless the user explicitly requested an empty rich content document.\"},{\"validatorId\":\"text-target-supports-field\",\"level\":\"error\",\"code\":\"PRC009\",\"description\":\"Text updates may only target fields supported by the selected node type.\"},{\"validatorId\":\"expression-path-safe\",\"level\":\"warning\",\"code\":\"PRC010\",\"description\":\"Expression paths must remain simple context/state paths (optionally chained with CSP-safe declarative value pipes such as default, round, number, percent, currency, uppercase, lowercase) or Json Logic expressions, not arbitrary JS string DSL code.\"},{\"validatorId\":\"link-url-safe\",\"level\":\"error\",\"code\":\"PRC011\",\"description\":\"Link href values must reject javascript:, vbscript:, file: and unsafe data URLs.\"},{\"validatorId\":\"link-policy-explicit\",\"level\":\"error\",\"code\":\"PRC012\",\"description\":\"Links must declare safe target/rel behavior; _blank links default to noopener noreferrer.\"},{\"validatorId\":\"link-target-exists\",\"level\":\"error\",\"code\":\"PRC013\",\"description\":\"Link removal must resolve an existing link node by stable id or path.\"},{\"validatorId\":\"unsafe-url-rejected\",\"level\":\"error\",\"code\":\"PRC014\",\"description\":\"Image, avatar and link URL fields must reject unsafe protocols and null bytes.\"},{\"validatorId\":\"unsafe-style-rejected\",\"level\":\"error\",\"code\":\"PRC015\",\"description\":\"Inline style values must reject script, import, binding and data URL expressions.\"},{\"validatorId\":\"unsafe-html-rejected\",\"level\":\"error\",\"code\":\"PRC016\",\"description\":\"Rich-content authoring must remain structured document JSON and must not accept arbitrary HTML/script patches.\"},{\"validatorId\":\"sanitization-policy-explicit\",\"level\":\"error\",\"code\":\"PRC017\",\"description\":\"Security policy requests must keep HTML disabled and URL/style guardrails explicit.\"},{\"validatorId\":\"security-change-confirmed\",\"level\":\"error\",\"code\":\"PRC018\",\"description\":\"Sanitization policy changes require explicit confirmation.\"},{\"validatorId\":\"preset-ref-valid\",\"level\":\"error\",\"code\":\"PRC019\",\"description\":\"Preset refs must use kind rich-block plus namespace, presetId and optional version.\"},{\"validatorId\":\"preset-exists-or-host-mediated\",\"level\":\"error\",\"code\":\"PRC020\",\"description\":\"Preset application must resolve through PRAXIS_RICH_BLOCK_PRESETS or a host-mediated resolver.\"},{\"validatorId\":\"host-capabilities-serializable\",\"level\":\"error\",\"code\":\"PRC021\",\"description\":\"Public contracts must not serialize host capability functions; only refs and inputs are persisted.\"},{\"validatorId\":\"layout-valid\",\"level\":\"error\",\"code\":\"PRC022\",\"description\":\"Layout must be block or inline.\"},{\"validatorId\":\"root-class-safe\",\"level\":\"error\",\"code\":\"PRC023\",\"description\":\"rootClassName must contain safe CSS class tokens; unsafe values block authoring and are ignored by the runtime.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PRC024\",\"description\":\"Config editor, Settings Panel payload and runtime renderer must preserve document structure, layout and rootClassName.\"},{\"validatorId\":\"class-name-safe\",\"level\":\"error\",\"code\":\"PRC025\",\"description\":\"Node className values must contain safe CSS class tokens.\"},{\"validatorId\":\"visible-when-json-logic\",\"level\":\"error\",\"code\":\"PRC026\",\"description\":\"visibleWhen must be a Json Logic expression object and not a string DSL.\"},{\"validatorId\":\"media-block-target-valid\",\"level\":\"error\",\"code\":\"PRC027\",\"description\":\"Media operations must target a mediaBlock node and preserve structured avatar/text child nodes.\"},{\"validatorId\":\"timeline-target-valid\",\"level\":\"error\",\"code\":\"PRC028\",\"description\":\"Timeline item operations must target a timeline node with an items array.\"},{\"validatorId\":\"timeline-item-valid\",\"level\":\"error\",\"code\":\"PRC029\",\"description\":\"Timeline items must be objects matching RichTimelineItem fields.\"},{\"validatorId\":\"timeline-item-id-unique\",\"level\":\"warning\",\"code\":\"PRC030\",\"description\":\"Timeline item ids should be unique inside a timeline node when present.\"},{\"validatorId\":\"timeline-item-exists\",\"level\":\"error\",\"code\":\"PRC031\",\"description\":\"Timeline item updates and removals must resolve an existing item by stable id or explicit fallback index.\"},{\"validatorId\":\"timeline-item-field-supported\",\"level\":\"error\",\"code\":\"PRC032\",\"description\":\"Timeline item updates may only target supported RichTimelineItem fields.\"},{\"validatorId\":\"timeline-setting-supported\",\"level\":\"error\",\"code\":\"PRC033\",\"description\":\"Timeline display settings must use supported position, connector, marker, emphasis, density and text appearance enum values.\"}]}",
7642
7643
  "sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
7643
- "contentHash": "cb7f001ab9dc2d5be5a3ab99c8161c19833bb848d920c96aa44ab2ee36b80a89",
7644
+ "contentHash": "d536a98ad9b4ff87a078d1842bfd31b83395c80a874e506e2c4059aaba243f2e",
7644
7645
  "sourceKind": "component_definition",
7645
7646
  "sourceId": "praxis-rich-content",
7646
7647
  "corpusVersion": "1.0.0"
@@ -7648,9 +7649,9 @@
7648
7649
  {
7649
7650
  "chunkIndex": 29,
7650
7651
  "chunkKind": "authoring_manifest",
7651
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"The editor must produce the same widget input envelope consumed by page-builder: inputs.document, inputs.layout and inputs.rootClassName.\",\"Rich content must remain structured RichContentDocument JSON; arbitrary HTML and script URL patches are rejected before persistence.\",\"Block identity should prefer document.nodes[].id; array index is a resolver fallback only and cannot be the canonical identity for generated patches.\",\"Link authoring uses canonical link nodes with safe href/target/rel instead of markdown or raw HTML embedded in text nodes.\",\"MediaBlock, timeline node appearance, timeline item, metadata, visibleWhen and safe style authoring use the same structured paths exposed by the visual config editor.\",\"Preset authoring persists only rich-block refs and inputs; host capability functions remain runtime-mediated and are not serialized.\"]}",
7652
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"The editor must produce the same widget input envelope consumed by page-builder: inputs.document, inputs.layout and inputs.rootClassName.\",\"Rich content must remain structured RichContentDocument JSON; arbitrary HTML and script URL patches are rejected before persistence.\",\"Block identity should prefer document.nodes[].id; array index is a resolver fallback only and cannot be the canonical identity for generated patches.\",\"Link authoring uses canonical link nodes with safe href/target/rel instead of markdown or raw HTML embedded in text nodes.\",\"MediaBlock, timeline node appearance, timeline item, metadata, visibleWhen and safe style authoring use the same structured paths exposed by the visual config editor.\",\"Preset authoring persists only rich-block refs and inputs; host capability functions remain runtime-mediated and are not serialized.\",\"Expression fields (*Expr) and embedded ${...} / {{...}} tokens support bare context/state paths and CSP-safe declarative value pipes (default/coalesce, round, number, percent, currency, uppercase, lowercase) evaluated via @praxisui/core applyDeclarativeValuePipe.\"]}",
7652
7653
  "sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
7653
- "contentHash": "11ad0440a4142b2ff043dfc31987a1841414a0dc75769b89980233fe5f66f46b",
7654
+ "contentHash": "2dc32dcd31bbb9564fb16278809ee5d42af791dbd04dc3f763cfe1826dead74f",
7654
7655
  "sourceKind": "component_definition",
7655
7656
  "sourceId": "praxis-rich-content",
7656
7657
  "corpusVersion": "1.0.0"