@praxisui/rich-content 9.0.0-beta.77 → 9.0.0-beta.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai/component-registry.json +106 -6
- package/package.json +2 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-07-
|
|
3
|
+
"generatedAt": "2026-07-19T03:55:15.480Z",
|
|
4
4
|
"packageName": "@praxisui/rich-content",
|
|
5
|
-
"packageVersion": "9.0.0-beta.
|
|
5
|
+
"packageVersion": "9.0.0-beta.78",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -6566,19 +6566,119 @@
|
|
|
6566
6566
|
{
|
|
6567
6567
|
"chunkIndex": 1,
|
|
6568
6568
|
"chunkKind": "authoring_manifest",
|
|
6569
|
-
"content": "{\n \"schemaVersion\": \"1.0.0\",\n \"componentId\": \"praxis-rich-content\",\n \"ownerPackage\": \"@praxisui/rich-content\",\n \"configSchemaId\": \"RichContentDocument\",\n \"manifestVersion\": \"1.0.0\",\n \"runtimeInputs\": [\n {\n \"name\": \"document\",\n \"type\": \"RichContentDocument | null\",\n \"description\": \"Canonical praxis.rich-content document rendered by the component.\"\n },\n {\n \"name\": \"nodes\",\n \"type\": \"RichBlockNode[] | null\",\n \"description\": \"Direct node list used only when the host controls the document envelope.\"\n },\n {\n \"name\": \"context\",\n \"type\": \"JsonLogicDataRecord | null\",\n \"description\": \"External context used by expression paths and Json Logic rules.\"\n },\n {\n \"name\": \"hostCapabilities\",\n \"type\": \"RichBlockHostCapabilities | null\",\n \"description\": \"Host-mediated preset, action, action confirmation, data and embed capabilities; functions are not serialized in public contracts.\"\n },\n {\n \"name\": \"layout\",\n \"type\": \"'block' | 'inline'\",\n \"allowedValues\": [\n \"block\",\n \"inline\"\n ],\n \"description\": \"Renderer layout mode.\"\n },\n {\n \"name\": \"rootClassName\",\n \"type\": \"string\",\n \"description\": \"CSS class applied to the renderer root.\"\n }\n ],\n \"editableTargets\": [\n {\n \"kind\": \"document\",\n \"resolver\": \"rich-content-document-root\",\n \"description\": \"The canonical RichContentDocument input envelope.\"\n },\n {\n \"kind\": \"block\",\n \"resolver\": \"rich-block-by-id-or-index\",\n \"description\": \"A top-level document.nodes[] block with stable id preferred over index.\"\n },\n {\n \"kind\": \"text\",\n \"resolver\": \"rich-text-node-by-id-or-path\",\n \"description\": \"Text-bearing nodes, including text, badge, metric, progress, card and timeline labels.\"\n },\n {\n \"kind\": \"link\",\n \"resolver\": \"rich-link-node-by-id-or-path\",\n \"description\": \"Canonical link node with label, href, target and rel.\"\n },\n {\n \"kind\": \"media\",\n \"resolver\": \"rich-media-node-by-id-or-path\",\n \"description\": \"Image, avatar image and mediaBlock child nodes.\"\n },\n {\n \"kind\": \"timeline\",\n \"resolver\": \"rich-timeline-node-by-id-or-path\",\n \"description\": \"Timeline nodes with visual placement, connector, marker and semantic appearance settings.\"\n },\n {\n \"kind\": \"timelineItem\",\n \"resolver\": \"rich-timeline-item-by-block-id-and-item-id\",\n \"description\": \"Timeline items nested inside timeline nodes; stable item id is preferred over index.\"\n },\n {\n \"kind\": \"metadata\",\n \"resolver\": \"rich-block-common-metadata\",\n \"description\": \"Common node metadata such as testId, className, visibleWhen and safe style.\"\n },\n {\n \"kind\": \"preset\",\n \"resolver\": \"rich-block-preset-ref\",\n \"description\": \"Preset nodes resolved through PRAXIS_RICH_BLOCK_PRESETS or hostCapabilities.resolvePreset.\"\n },\n {\n \"kind\": \"sanitizationPolicy\",\n \"resolver\": \"rich-content-validation-policy\",\n \"description\": \"Document validation policy enforced by validateRichContentDocument.\"\n },\n {\n \"kind\": \"display\",\n \"resolver\": \"rich-content-layout-and-root-class\",\n \"description\": \"Layout and rootClassName runtime inputs.\"\n }\n ],\n \"operations\": [\n {\n \"operationId\": \"document.set\",\n \"title\": \"Set rich content document\",\n \"scope\": \"global\",\n \"targetKind\": \"document\",\n \"target\": {\n \"kind\": \"document\",\n \"resolver\": \"rich-content-document-root\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"kind\",\n \"version\",\n \"nodes\"\n ],\n \"properties\": {\n \"kind\": {\n \"const\": \"praxis.rich-content\"\n },\n \"version\": {\n \"const\": \"1.0.0\"\n },\n \"context\": {\n \"type\": \"object\"\n },\n \"nodes\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"document\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"document-shape-canonical\",\n \"document-version-supported\",\n \"node-types-supported\",\n \"unsafe-url-rejected\",\n \"unsafe-style-rejected\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"block.add\",\n \"title\": \"Add rich content block\",\n \"scope\": \"templating\",\n \"targetKind\": \"block\",\n \"target\": {\n \"kind\": \"block\",\n \"resolver\": \"document-nodes-array\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {\n \"enum\": [\n \"text\",\n \"icon\",\n \"image\",\n \"link\",\n \"badge\",\n \"avatar\",\n \"metric\",\n \"progress\",\n \"actionButton\",\n \"compose\",\n \"card\",\n \"callout\",\n \"ctaGroup\",\n \"keyValueList\",\n \"emptyState\",\n \"propertySheet\",\n \"statGroup\",\n \"tabs\",\n \"recordSummary\",\n \"lookupResult\",\n \"lookupCard\",\n \"relatedRecord\",\n \"actionCard\",\n \"decisionPackage\",\n \"collapsibleCard\",\n \"disclosure\",\n \"accordion\",\n \"formLauncher\",\n \"mediaBlock\",\n \"timeline\",\n \"preset\"\n ]\n },\n \"node\": {\n \"type\": \"object\"\n },\n \"afterBlockId\": {\n \"type\": \"string\"\n },\n \"beforeBlockId\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"rich-content-block-add\",\n \"handlerContract\": {\n \"reads\": [\n \"document.nodes[]\"\n ],\n \"writes\": [\n \"document.nodes[]\"\n ],\n \"identityKeys\": [\n \"document.nodes[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {\n \"enum\": [\n \"text\",\n \"icon\",\n \"image\",\n \"link\",\n \"badge\",\n \"avatar\",\n \"metric\",\n \"progress\",\n \"actionButton\",\n \"compose\",\n \"card\",\n \"callout\",\n \"ctaGroup\",\n \"keyValueList\",\n \"emptyState\",\n \"propertySheet\",\n \"statGroup\",\n \"tabs\",\n \"recordSummary\",\n \"lookupResult\",\n \"lookupCard\",\n \"relatedRecord\",\n \"actionCard\",\n \"decisionPackage\",\n \"collapsibleCard\",\n \"disclosure\",\n \"accordion\",\n \"formLauncher\",\n \"mediaBlock\",\n \"timeline\",\n \"preset\"\n ]\n },\n \"node\": {\n \"type\": \"object\"\n },\n \"afterBlockId\": {\n \"type\": \"string\"\n },\n \"beforeBlockId\": {\n \"type\": \"string\"\n }\n }\n },\n \"failureModes\": [\n \"unsupported-node-type\",\n \"duplicate-node-id\",\n \"invalid-node-shape\",\n \"unsafe-url\",\n \"unsafe-style\"\n ],\n \"description\": \"Creates a supported RichBlockNode, validates it with validateRichContentDocument semantics and inserts it by stable neighbor id when provided.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"node-types-supported\",\n \"block-id-unique\",\n \"document-shape-canonical\",\n \"unsafe-url-rejected\",\n \"unsafe-style-rejected\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[]\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"block.update\",\n \"title\": \"Update rich content block fields\",\n \"scope\": \"templating\",\n \"targetKind\": \"block\",\n \"target\": {\n \"kind\": \"block\",\n \"resolver\": \"rich-block-node-by-id-or-path\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"testId\": {\n \"type\": \"string\"\n },\n \"className\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"object\"\n },\n \"visibleWhen\": {\n \"type\": \"object\"\n },\n \"disabledWhen\": {\n \"type\": \"object\"\n },\n \"loadWhen\": {\n \"type\": \"object\"\n },\n \"classWhen\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"styleWhen\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"requiresCapabilities\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"capabilityMode\": {\n \"enum\": [\n \"all\",\n \"any\"\n ]\n },\n \"text\": {\n \"type\": \"string\"\n },\n \"textExpr\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"labelExpr\": {\n \"type\": \"string\"\n },\n \"href\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"enum\": [\n \"_self\",\n \"_blank\"\n ]\n },\n \"rel\": {\n \"type\": \"string\"\n },\n \"src\": {\n \"type\": \"string\"\n },\n \"alt\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"titleExpr\": {\n \"type\": \"string\"\n },\n \"subtitle\": {\n \"type\": \"string\"\n },\n \"subtitleExpr\": {\n \"type\": \"string\"\n },\n \"relationLabel\": {\n \"type\": \"string\"\n },\n \"message\": {\n \"type\": \"string\"\n },\n \"summary\": {\n \"type\": \"string\"\n },\n \"summaryExpr\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"ctaLabel\": {\n \"type\": \"string\"\n },\n \"caption\": {\n \"type\": \"string\"\n },\n \"emptyText\": {\n \"type\": \"string\"\n },\n \"errorText\": {\n \"type\": \"string\"\n },\n \"status\": {\n \"enum\": [\n \"idle\",\n \"resolved\",\n \"empty\",\n \"error\",\n \"draft\",\n \"simulated\",\n \"approved\",\n \"published\",\n \"superseded\",\n \"reverted\"\n ]\n },\n \"statusExpr\": {\n \"type\": \"string\"\n },\n \"owner\": {\n \"type\": \"string\"\n },\n \"ownerExpr\": {\n \"type\": \"string\"\n },\n \"policySource\": {\n \"type\": \"string\"\n },\n \"policySourceExpr\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\"\n },\n \"versionExpr\": {\n \"type\": \"string\"\n },\n \"confidence\": {\n \"type\": \"number\"\n },\n \"confidenceExpr\": {\n \"type\": \"string\"\n },\n \"risk\": {\n \"enum\": [\n \"low\",\n \"medium\",\n \"high\",\n \"critical\"\n ]\n },\n \"riskExpr\": {\n \"type\": \"string\"\n },\n \"lastReviewed\": {\n \"type\": \"string\"\n },\n \"lastReviewedExpr\": {\n \"type\": \"string\"\n },\n \"supersedes\": {\n \"type\": \"string\"\n },\n \"supersedesExpr\": {\n \"type\": \"string\"\n },\n \"evidence\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"appearance\": {\n \"enum\": [\n \"plain\",\n \"card\",\n \"underline\",\n \"pills\"\n ]\n },\n \"variant\": {\n \"enum\": [\n \"basic\",\n \"raised\",\n \"stroked\",\n \"flat\",\n \"plain\",\n \"outlined\",\n \"elevated\",\n \"filled\",\n \"transparent\"\n ]\n },\n \"tone\": {\n \"enum\": [\n \"neutral\",\n \"info\",\n \"success\",\n \"warning\",\n \"danger\"\n ]\n },\n \"size\": {\n \"enum\": [\n \"sm\",\n \"md\",\n \"lg\"\n ]\n },\n \"density\": {},\n \"orientation\": {},\n \"loading\": {\n \"type\": \"boolean\"\n },\n \"loadingExpr\": {\n \"type\": \"string\"\n },\n \"active\": {\n \"type\": \"boolean\"\n },\n \"activeExpr\": {\n \"type\": \"string\"\n },\n \"defaultTabId\": {\n \"type\": \"string\"\n },\n \"order\": {\n \"enum\": [\n \"normal\",\n \"reverse\"\n ]\n },\n \"position\": {\n \"enum\": [\n \"left\",\n \"right\",\n \"alternate\",\n \"alternate-reverse\"\n ]\n },\n \"connectorVariant\": {\n \"enum\": [\n \"solid\",\n \"dashed\",\n \"none\"\n ]\n },\n \"connectorColor\": {\n \"enum\": [\n \"primary\",\n \"secondary\",\n \"tertiary\",\n \"success\",\n \"warning\",\n \"error\",\n \"info\",\n \"neutral\"\n ]\n },\n \"markerVariant\": {\n \"enum\": [\n \"dot\",\n \"icon\",\n \"number\"\n ]\n },\n \"markerColor\": {},\n \"markerStyle\": {\n \"enum\": [\n \"filled\",\n \"outlined\"\n ]\n },\n \"emphasis\": {\n \"enum\": [\n \"subtle\",\n \"standard\",\n \"strong\",\n \"hero\"\n ]\n },\n \"textAppearance\": {\n \"enum\": [\n \"default\",\n \"prominent\",\n \"eyebrow\",\n \"label\"\n ]\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"formId\": {\n \"type\": \"string\"\n },\n \"columns\": {\n \"enum\": [\n 1,\n 2\n ]\n },\n \"layout\": {\n \"enum\": [\n \"stacked\",\n \"inline\",\n \"split\",\n \"grid\"\n ]\n },\n \"action\": {\n \"type\": \"object\"\n },\n \"actions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"primaryAction\": {\n \"type\": \"object\"\n },\n \"secondaryActions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"media\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"enum\": [\n \"image\",\n \"video\",\n \"icon\",\n \"avatar\"\n ]\n },\n \"src\": {\n \"type\": \"string\"\n },\n \"srcExpr\": {\n \"type\": \"string\"\n },\n \"alt\": {\n \"type\": \"string\"\n },\n \"altExpr\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"labelExpr\": {\n \"type\": \"string\"\n },\n \"placement\": {\n \"enum\": [\n \"top\",\n \"leading\",\n \"trailing\",\n \"background\"\n ]\n },\n \"aspectRatio\": {\n \"type\": \"string\"\n }\n }\n },\n \"headerAction\": {\n \"type\": \"object\"\n },\n \"interaction\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"none\",\n \"action\",\n \"selectable\"\n ]\n },\n \"action\": {\n \"type\": \"object\"\n },\n \"selected\": {\n \"type\": \"boolean\"\n },\n \"selectedExpr\": {\n \"type\": \"string\"\n }\n }\n },\n \"accessibility\": {\n \"type\": \"object\",\n \"properties\": {\n \"role\": {\n \"enum\": [\n \"article\",\n \"group\",\n \"button\"\n ]\n },\n \"ariaLabel\": {\n \"type\": \"string\"\n },\n \"ariaLabelExpr\": {\n \"type\": \"string\"\n },\n \"ariaLabelledBy\": {\n \"type\": \"string\"\n },\n \"ariaDescribedBy\": {\n \"type\": \"string\"\n }\n }\n },\n \"fields\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"items\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"header\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"body\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"footer\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"aside\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"document.nodes[]\",\n \"key\": \"id\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"block-exists\",\n \"node-types-supported\",\n \"unsafe-url-rejected\",\n \"unsafe-style-rejected\",\n \"expression-path-safe\",\n \"document-shape-canonical\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[]\",\n \"document.nodes[].id\",\n \"document.nodes[].testId\",\n \"document.nodes[].className\",\n \"document.nodes[].style\",\n \"document.nodes[].visibleWhen\",\n \"document.nodes[].disabledWhen\",\n \"document.nodes[].loadWhen\",\n \"document.nodes[].classWhen\",\n \"document.nodes[].styleWhen\",\n \"document.nodes[].requiresCapabilities\",\n \"document.nodes[].capabilityMode\",\n \"document.nodes[].text\",\n \"document.nodes[].textExpr\",\n \"document.nodes[].label\",\n \"document.nodes[].labelExpr\",\n \"document.nodes[].href\",\n \"document.nodes[].target\",\n \"document.nodes[].rel\",\n \"document.nodes[].src\",\n \"document.nodes[].alt\",\n \"document.nodes[].title\",\n \"document.nodes[].titleExpr\",\n \"document.nodes[].subtitle\",\n \"document.nodes[].subtitleExpr\",\n \"document.nodes[].relationLabel\",\n \"document.nodes[].message\",\n \"document.nodes[].summary\",\n \"document.nodes[].summaryExpr\",\n \"document.nodes[].description\",\n \"document.nodes[].ctaLabel\",\n \"document.nodes[].caption\",\n \"document.nodes[].emptyText\",\n \"document.nodes[].errorText\",\n \"document.nodes[].status\",\n \"document.nodes[].statusExpr\",\n \"document.nodes[].owner\",\n \"document.nodes[].ownerExpr\",\n \"document.nodes[].policySource\",\n \"document.nodes[].policySourceExpr\",\n \"document.nodes[].version\",\n \"document.nodes[].versionExpr\",\n \"document.nodes[].confidence\",\n \"document.nodes[].confidenceExpr\",\n \"document.nodes[].risk\",\n \"document.nodes[].riskExpr\",\n \"document.nodes[].lastReviewed\",\n \"document.nodes[].lastReviewedExpr\",\n \"document.nodes[].supersedes\",\n \"document.nodes[].supersedesExpr\",\n \"document.nodes[].evidence\",\n \"document.nodes[].appearance\",\n \"document.nodes[].variant\",\n \"document.nodes[].tone\",\n \"document.nodes[].size\",\n \"document.nodes[].density\",\n \"document.nodes[].orientation\",\n \"document.nodes[].loading\",\n \"document.nodes[].loadingExpr\",\n \"document.nodes[].active\",\n \"document.nodes[].activeExpr\",\n \"document.nodes[].defaultTabId\",\n \"document.nodes[].position\",\n \"document.nodes[].connectorVariant\",\n \"document.nodes[].connectorColor\",\n \"document.nodes[].markerVariant\",\n \"document.nodes[].markerColor\",\n \"document.nodes[].markerStyle\",\n \"document.nodes[].icon\",\n \"document.nodes[].formId\",\n \"document.nodes[].columns\",\n \"document.nodes[].layout\",\n \"document.nodes[].action\",\n \"document.nodes[].actions\",\n \"document.nodes[].primaryAction\",\n \"document.nodes[].secondaryActions\",\n \"document.nodes[].media\",\n \"document.nodes[].headerAction\",\n \"document.nodes[].interaction\",\n \"document.nodes[].accessibility\",\n \"document.nodes[].fields\",\n \"document.nodes[].items[]\",\n \"document.nodes[].header\",\n \"document.nodes[].body\",\n \"document.nodes[].footer\",\n \"document.nodes[].aside\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-block-exists\"\n ]\n },\n {\n \"operationId\": \"block.remove\",\n \"title\": \"Remove rich content block\",\n \"scope\": \"templating\",\n \"targetKind\": \"block\",\n \"target\": {\n \"kind\": \"block\",\n \"resolver\": \"rich-block-by-id-or-index\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"blockId\": {\n \"type\": \"string\"\n },\n \"replacementBlockId\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"remove-by-key\",\n \"path\": \"document.nodes[]\",\n \"key\": \"id\"\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"block-exists\",\n \"destructive-removal-confirmed\",\n \"document-not-empty-when-required\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[]\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-block-exists\",\n \"confirmation-collected\"\n ]\n },\n {\n \"operationId\": \"block.order.set\",\n \"title\": \"Reorder rich content blocks\",\n \"scope\": \"templating\",\n \"targetKind\": \"block\",\n \"target\": {\n \"kind\": \"block\",\n \"resolver\": \"rich-block-by-id-or-index\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"blockId\"\n ],\n \"properties\": {\n \"blockId\": {\n \"type\": \"string\"\n },\n \"beforeBlockId\": {\n \"type\": \"string\"\n },\n \"afterBlockId\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"reorder-by-key\",\n \"path\": \"document.nodes[]\",\n \"key\": \"id\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"block-exists\",\n \"block-order-deterministic\",\n \"document-shape-canonical\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[]\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-block-exists\"\n ]\n },\n {\n \"operationId\": \"text.update\",\n \"title\": \"Update rich content text\",\n \"scope\": \"templating\",\n \"targetKind\": \"text\",\n \"target\": {\n \"kind\": \"text\",\n \"resolver\": \"rich-text-node-by-id-or-path\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n },\n \"textExpr\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"labelExpr\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"subtitle\": {\n \"type\": \"string\"\n },\n \"relationLabel\": {\n \"type\": \"string\"\n },\n \"message\": {\n \"type\": \"string\"\n },\n \"summary\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"ctaLabel\": {\n \"type\": \"string\"\n },\n \"emptyText\": {\n \"type\": \"string\"\n },\n \"errorText\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"document.nodes[]\",\n \"key\": \"id\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"block-exists\",\n \"text-target-supports-field\",\n \"expression-path-safe\",\n \"document-shape-canonical\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[].text\",\n \"document.nodes[].textExpr\",\n \"document.nodes[].label\",\n \"document.nodes[].labelExpr\",\n \"document.nodes[].title\",\n \"document.nodes[].subtitle\",\n \"document.nodes[].relationLabel\",\n \"document.nodes[].message\",\n \"document.nodes[].summary\",\n \"document.nodes[].description\",\n \"document.nodes[].ctaLabel\",\n \"document.nodes[].emptyText\",\n \"document.nodes[].errorText\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-block-exists\"\n ]\n },\n {\n \"operationId\": \"link.add\",\n \"title\": \"Add link block\",\n \"scope\": \"templating\",\n \"targetKind\": \"link\",\n \"target\": {\n \"kind\": \"link\",\n \"resolver\": \"document-nodes-array\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"label\",\n \"href\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"labelExpr\": {\n \"type\": \"string\"\n },\n \"href\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"enum\": [\n \"_self\",\n \"_blank\"\n ]\n },\n \"rel\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"document.nodes[]\",\n \"key\": \"id\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"link-url-safe\",\n \"link-policy-explicit\",\n \"node-types-supported\",\n \"block-id-unique\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[]\",\n \"document.nodes[].href\",\n \"document.nodes[].target\",\n \"document.nodes[].rel\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"link.remove\",\n \"title\": \"Remove link from rich content\",\n \"scope\": \"templating\",\n \"targetKind\": \"link\",\n \"target\": {\n \"kind\": \"link\",\n \"resolver\": \"rich-link-node-by-id-or-path\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"linkId\": {\n \"type\": \"string\"\n },\n \"preserveLabelAsText\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"rich-content-link-remove\",\n \"handlerContract\": {\n \"reads\": [\n \"document.nodes[]\",\n \"document.nodes[].id\",\n \"document.nodes[].type\",\n \"document.nodes[].label\"\n ],\n \"writes\": [\n \"document.nodes[]\"\n ],\n \"identityKeys\": [\n \"document.nodes[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"linkId\": {\n \"type\": \"string\"\n },\n \"preserveLabelAsText\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"failureModes\": [\n \"link-not-found\",\n \"ambiguous-link-target\",\n \"replacement-text-invalid\"\n ],\n \"description\": \"Removes a link node by stable id or path and optionally replaces it with a text node containing the prior link label.\"\n }\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"link-target-exists\",\n \"destructive-removal-confirmed\",\n \"document-shape-canonical\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[]\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-link-exists\",\n \"confirmation-collected\"\n ]\n },\n {\n \"operationId\": \"preset.apply\",\n \"title\": \"Apply rich block preset\",\n \"scope\": \"templating\",\n \"targetKind\": \"preset\",\n \"target\": {\n \"kind\": \"preset\",\n \"resolver\": \"rich-block-preset-ref\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"ref\"\n ],\n \"properties\": {\n \"ref\": {\n \"type\": \"object\"\n },\n \"inputs\": {\n \"type\": \"object\"\n },\n \"replaceBlockId\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"rich-content-preset-apply\",\n \"handlerContract\": {\n \"reads\": [\n \"PRAXIS_RICH_BLOCK_PRESETS\",\n \"hostCapabilities.resolvePreset\",\n \"document.nodes[]\"\n ],\n \"writes\": [\n \"document.nodes[]\"\n ],\n \"identityKeys\": [\n \"ref.kind\",\n \"ref.namespace\",\n \"ref.presetId\",\n \"ref.version\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"ref\"\n ],\n \"properties\": {\n \"ref\": {\n \"type\": \"object\"\n },\n \"inputs\": {\n \"type\": \"object\"\n },\n \"replaceBlockId\": {\n \"type\": \"string\"\n }\n }\n },\n \"failureModes\": [\n \"preset-not-found\",\n \"preset-kind-invalid\",\n \"preset-document-invalid\",\n \"preset-cycle-detected\"\n ],\n \"description\": \"Resolves a rich-block preset through the governed registry/host mediation and inserts or replaces a preset reference without serializing functions.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"preset-ref-valid\",\n \"preset-exists-or-host-mediated\",\n \"host-capabilities-serializable\",\n \"document-shape-canonical\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[]\",\n \"document.nodes[].ref\",\n \"document.nodes[].inputs\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"metadata.update\",\n \"title\": \"Update rich block metadata\",\n \"scope\": \"templating\",\n \"targetKind\": \"metadata\",\n \"target\": {\n \"kind\": \"metadata\",\n \"resolver\": \"rich-block-by-id-or-index\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"blockId\": {\n \"type\": \"string\"\n },\n \"testId\": {\n \"type\": \"string\"\n },\n \"className\": {\n \"type\": \"string\"\n },\n \"visibleWhen\": {\n \"type\": \"object\"\n },\n \"disabledWhen\": {\n \"type\": \"object\"\n },\n \"loadWhen\": {\n \"type\": \"object\"\n },\n \"classWhen\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"styleWhen\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n },\n \"style\": {\n \"type\": \"object\"\n },\n \"requiresCapabilities\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"capabilityMode\": {\n \"enum\": [\n \"all\",\n \"any\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"document.nodes[]\",\n \"key\": \"id\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"block-exists\",\n \"class-name-safe\",\n \"visible-when-json-logic\",\n \"unsafe-style-rejected\",\n \"document-shape-canonical\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[].testId\",\n \"document.nodes[].className\",\n \"document.nodes[].visibleWhen\",\n \"document.nodes[].disabledWhen\",\n \"document.nodes[].loadWhen\",\n \"document.nodes[].classWhen\",\n \"document.nodes[].styleWhen\",\n \"document.nodes[].style\",\n \"document.nodes[].requiresCapabilities\",\n \"document.nodes[].capabilityMode\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-block-exists\"\n ]\n },\n {\n \"operationId\": \"mediaBlock.update\",\n \"title\": \"Update media block fields\",\n \"scope\": \"templating\",\n \"targetKind\": \"media\",\n \"target\": {\n \"kind\": \"media\",\n \"resolver\": \"rich-media-node-by-id-or-path\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"blockId\": {\n \"type\": \"string\"\n },\n \"avatarName\": {\n \"type\": \"string\"\n },\n \"avatarImageSrc\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"titleExpr\": {\n \"type\": \"string\"\n },\n \"subtitle\": {\n \"type\": \"string\"\n },\n \"subtitleExpr\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"rich-content-media-block-update\",\n \"handlerContract\": {\n \"reads\": [\n \"document.nodes[]\",\n \"document.nodes[].id\",\n \"document.nodes[].type\"\n ],\n \"writes\": [\n \"document.nodes[].avatar\",\n \"document.nodes[].title\",\n \"document.nodes[].subtitle\"\n ],\n \"identityKeys\": [\n \"document.nodes[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"blockId\": {\n \"type\": \"string\"\n },\n \"avatarName\": {\n \"type\": \"string\"\n },\n \"avatarImageSrc\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"titleExpr\": {\n \"type\": \"string\"\n },\n \"subtitle\": {\n \"type\": \"string\"\n },\n \"subtitleExpr\": {\n \"type\": \"string\"\n }\n }\n },\n \"failureModes\": [\n \"media-block-not-found\",\n \"target-not-media-block\",\n \"unsafe-url\",\n \"invalid-text-node\"\n ],\n \"description\": \"Updates the structured mediaBlock avatar/title/subtitle fields while preserving meta and trailing content for advanced JSON authoring.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"block-exists\",\n \"media-block-target-valid\",\n \"unsafe-url-rejected\",\n \"expression-path-safe\",\n \"document-shape-canonical\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[].avatar\",\n \"document.nodes[].title\",\n \"document.nodes[].subtitle\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-block-exists\"\n ]\n },\n {\n \"operationId\": \"timeline.node.update\",\n \"title\": \"Update timeline display settings\",\n \"scope\": \"templating\",\n \"targetKind\": \"timeline\",\n \"target\": {\n \"kind\": \"timeline\",\n \"resolver\": \"rich-timeline-node-by-id-or-path\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"timelineBlockId\"\n ],\n \"minProperties\": 2,\n \"properties\": {\n \"timelineBlockId\": {\n \"type\": \"string\"\n },\n \"orientation\": {\n \"enum\": [\n \"vertical\",\n \"horizontal\"\n ]\n },\n \"order\": {},\n \"position\": {},\n \"connectorVariant\": {},\n \"connectorColor\": {},\n \"markerVariant\": {},\n \"markerColor\": {},\n \"markerStyle\": {},\n \"emphasis\": {},\n \"density\": {\n \"enum\": [\n \"compact\",\n \"comfortable\",\n \"spacious\"\n ]\n },\n \"textAppearance\": {},\n \"title\": {\n \"type\": \"string\"\n },\n \"titleExpr\": {\n \"type\": \"string\"\n },\n \"emptyText\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"rich-content-timeline-node-update\",\n \"handlerContract\": {\n \"reads\": [\n \"document.nodes[]\",\n \"document.nodes[].id\",\n \"document.nodes[].type\"\n ],\n \"writes\": [\n \"document.nodes[].orientation\",\n \"document.nodes[].order\",\n \"document.nodes[].position\",\n \"document.nodes[].connectorVariant\",\n \"document.nodes[].connectorColor\",\n \"document.nodes[].markerVariant\",\n \"document.nodes[].markerColor\",\n \"document.nodes[].markerStyle\",\n \"document.nodes[].emphasis\",\n \"document.nodes[].density\",\n \"document.nodes[].textAppearance\",\n \"document.nodes[].title\",\n \"document.nodes[].titleExpr\",\n \"document.nodes[].emptyText\"\n ],\n \"identityKeys\": [\n \"document.nodes[].id\"\n ],\n \"failureModes\": [\n \"timeline-not-found\",\n \"unsupported-timeline-setting\",\n \"invalid-timeline-setting\"\n ],\n \"description\": \"Updates timeline node display and semantic appearance settings while preserving timeline items and the canonical RichTimelineNode shape.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"block-exists\",\n \"timeline-target-valid\",\n \"timeline-setting-supported\",\n \"document-shape-canonical\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[].orientation\",\n \"document.nodes[].order\",\n \"document.nodes[].position\",\n \"document.nodes[].connectorVariant\",\n \"document.nodes[].connectorColor\",\n \"document.nodes[].markerVariant\",\n \"document.nodes[].markerColor\",\n \"document.nodes[].markerStyle\",\n \"document.nodes[].emphasis\",\n \"document.nodes[].density\",\n \"document.nodes[].textAppearance\",\n \"document.nodes[].title\",\n \"document.nodes[].titleExpr\",\n \"document.nodes[].emptyText\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-block-exists\"\n ]\n },\n {\n \"operationId\": \"timeline.item.add\",\n \"title\": \"Add timeline item\",\n \"scope\": \"templating\",\n \"targetKind\": \"timelineItem\",\n \"target\": {\n \"kind\": \"timelineItem\",\n \"resolver\": \"rich-timeline-node-by-id-or-path\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"timelineBlockId\",\n \"item\"\n ],\n \"properties\": {\n \"timelineBlockId\": {\n \"type\": \"string\"\n },\n \"item\": {},\n \"afterItemId\": {\n \"type\": \"string\"\n },\n \"beforeItemId\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"rich-content-timeline-item-add\",\n \"handlerContract\": {\n \"reads\": [\n \"document.nodes[]\",\n \"document.nodes[].items[]\"\n ],\n \"writes\": [\n \"document.nodes[].items[]\"\n ],\n \"identityKeys\": [\n \"document.nodes[].id\",\n \"document.nodes[].items[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"timelineBlockId\",\n \"item\"\n ],\n \"properties\": {\n \"timelineBlockId\": {\n \"type\": \"string\"\n },\n \"afterItemId\": {\n \"type\": \"string\"\n },\n \"beforeItemId\": {\n \"type\": \"string\"\n }\n }\n },\n \"failureModes\": [\n \"timeline-not-found\",\n \"duplicate-timeline-item-id\",\n \"invalid-timeline-item\"\n ],\n \"description\": \"Adds a timeline item to a timeline node using stable timeline and item ids when present; array index is a resolver fallback only.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"block-exists\",\n \"timeline-target-valid\",\n \"timeline-item-valid\",\n \"timeline-item-id-unique\",\n \"document-shape-canonical\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[].items[]\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-block-exists\"\n ]\n },\n {\n \"operationId\": \"timeline.item.update\",\n \"title\": \"Update timeline item\",\n \"scope\": \"templating\",\n \"targetKind\": \"timelineItem\",\n \"target\": {\n \"kind\": \"timelineItem\",\n \"resolver\": \"rich-timeline-item-by-block-id-and-item-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"timelineBlockId\"\n ],\n \"minProperties\": 2,\n \"properties\": {\n \"timelineBlockId\": {\n \"type\": \"string\"\n },\n \"itemId\": {\n \"type\": \"string\"\n },\n \"itemIndex\": {\n \"type\": \"number\"\n },\n \"field\": {\n \"enum\": [\n \"title\",\n \"titleExpr\",\n \"subtitle\",\n \"subtitleExpr\",\n \"meta\",\n \"metaExpr\",\n \"opposite\",\n \"oppositeExpr\",\n \"icon\",\n \"iconExpr\",\n \"badge\",\n \"badgeExpr\",\n \"markerColor\",\n \"markerStyle\",\n \"connectorColor\",\n \"connectorVariant\"\n ]\n },\n \"value\": {\n \"type\": \"string\"\n },\n \"patch\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"titleExpr\": {\n \"type\": \"string\"\n },\n \"subtitle\": {\n \"type\": \"string\"\n },\n \"subtitleExpr\": {\n \"type\": \"string\"\n },\n \"meta\": {\n \"type\": \"string\"\n },\n \"metaExpr\": {\n \"type\": \"string\"\n },\n \"opposite\": {\n \"type\": \"string\"\n },\n \"oppositeExpr\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"iconExpr\": {\n \"type\": \"string\"\n },\n \"badge\": {\n \"type\": \"string\"\n },\n \"badgeExpr\": {\n \"type\": \"string\"\n },\n \"markerColor\": {},\n \"markerStyle\": {},\n \"connectorColor\": {},\n \"connectorVariant\": {}\n }\n }\n },\n \"anyOf\": [\n {\n \"required\": [\n \"field\",\n \"value\"\n ]\n },\n {\n \"required\": [\n \"patch\"\n ]\n }\n ],\n \"allOf\": [\n {\n \"if\": {\n \"properties\": {\n \"field\": {\n \"enum\": [\n \"markerColor\",\n \"connectorColor\"\n ]\n }\n },\n \"required\": [\n \"field\"\n ]\n },\n \"then\": {\n \"properties\": {\n \"value\": {}\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"field\": {\n \"const\": \"markerStyle\"\n }\n },\n \"required\": [\n \"field\"\n ]\n },\n \"then\": {\n \"properties\": {\n \"value\": {}\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"field\": {\n \"const\": \"connectorVariant\"\n }\n },\n \"required\": [\n \"field\"\n ]\n },\n \"then\": {\n \"properties\": {\n \"value\": {}\n }\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"field\": {}\n },\n \"required\": [\n \"field\"\n ]\n },\n \"then\": {\n \"properties\": {\n \"value\": {\n \"type\": \"string\"\n }\n }\n }\n }\n ]\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"rich-content-timeline-item-update\",\n \"handlerContract\": {\n \"reads\": [\n \"document.nodes[]\",\n \"document.nodes[].items[]\"\n ],\n \"writes\": [\n \"document.nodes[].items[]\"\n ],\n \"identityKeys\": [\n \"document.nodes[].id\",\n \"document.nodes[].items[].id\"\n ],\n \"failureModes\": [\n \"timeline-not-found\",\n \"timeline-item-not-found\",\n \"unsupported-timeline-field\",\n \"invalid-timeline-item\"\n ],\n \"description\": \"Updates a timeline item by stable item id when available, preserving the item object shape accepted by RichTimelineItem.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"block-exists\",\n \"timeline-target-valid\",\n \"timeline-item-exists\",\n \"timeline-item-field-supported\",\n \"document-shape-canonical\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[].items[].title\",\n \"document.nodes[].items[].titleExpr\",\n \"document.nodes[].items[].subtitle\",\n \"document.nodes[].items[].subtitleExpr\",\n \"document.nodes[].items[].meta\",\n \"document.nodes[].items[].metaExpr\",\n \"document.nodes[].items[].opposite\",\n \"document.nodes[].items[].oppositeExpr\",\n \"document.nodes[].items[].icon\",\n \"document.nodes[].items[].iconExpr\",\n \"document.nodes[].items[].badge\",\n \"document.nodes[].items[].badgeExpr\",\n \"document.nodes[].items[].markerColor\",\n \"document.nodes[].items[].markerStyle\",\n \"document.nodes[].items[].connectorColor\",\n \"document.nodes[].items[].connectorVariant\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-block-exists\",\n \"target-timeline-item-exists\"\n ]\n },\n {\n \"operationId\": \"timeline.item.remove\",\n \"title\": \"Remove timeline item\",\n \"scope\": \"templating\",\n \"targetKind\": \"timelineItem\",\n \"target\": {\n \"kind\": \"timelineItem\",\n \"resolver\": \"rich-timeline-item-by-block-id-and-item-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"timelineBlockId\"\n ],\n \"properties\": {\n \"timelineBlockId\": {\n \"type\": \"string\"\n },\n \"itemId\": {\n \"type\": \"string\"\n },\n \"itemIndex\": {\n \"type\": \"number\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"rich-content-timeline-item-remove\",\n \"handlerContract\": {\n \"reads\": [\n \"document.nodes[]\",\n \"document.nodes[].items[]\"\n ],\n \"writes\": [\n \"document.nodes[].items[]\"\n ],\n \"identityKeys\": [\n \"document.nodes[].id\",\n \"document.nodes[].items[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"timelineBlockId\"\n ],\n \"properties\": {\n \"timelineBlockId\": {\n \"type\": \"string\"\n },\n \"itemId\": {\n \"type\": \"string\"\n },\n \"itemIndex\": {\n \"type\": \"number\"\n }\n }\n },\n \"failureModes\": [\n \"timeline-not-found\",\n \"timeline-item-not-found\",\n \"ambiguous-timeline-item\"\n ],\n \"description\": \"Removes a timeline item from a timeline node after explicit confirmation; stable item id is preferred over index.\"\n }\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"timeline-target-valid\",\n \"timeline-item-exists\",\n \"destructive-removal-confirmed\",\n \"document-shape-canonical\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document.nodes[].items[]\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-timeline-item-exists\",\n \"confirmation-collected\"\n ]\n },\n {\n \"operationId\": \"sanitizationPolicy.set\",\n \"title\": \"Set rich content sanitization policy\",\n \"scope\": \"global\",\n \"targetKind\": \"sanitizationPolicy\",\n \"target\": {\n \"kind\": \"sanitizationPolicy\",\n \"resolver\": \"rich-content-validation-policy\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"allowHtml\": {\n \"const\": false\n },\n \"allowedUrlProtocols\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"allowImageDataUrls\": {\n \"type\": \"boolean\"\n },\n \"maxNodeDepth\": {\n \"type\": \"number\"\n },\n \"maxNodeCount\": {\n \"type\": \"number\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"rich-content-sanitization-policy\",\n \"handlerContract\": {\n \"reads\": [\n \"document\",\n \"validateRichContentDocument\"\n ],\n \"writes\": [\n \"document\"\n ],\n \"identityKeys\": [\n \"document.kind\",\n \"document.version\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"allowHtml\": {\n \"const\": false\n },\n \"allowedUrlProtocols\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"allowImageDataUrls\": {\n \"type\": \"boolean\"\n },\n \"maxNodeDepth\": {\n \"type\": \"number\"\n },\n \"maxNodeCount\": {\n \"type\": \"number\"\n }\n }\n },\n \"failureModes\": [\n \"html-not-supported\",\n \"unsafe-protocol\",\n \"max-depth-too-high\",\n \"max-node-count-too-high\"\n ],\n \"description\": \"Validates requested policy against the fixed validator guardrails; rich-content authoring remains structured JSON and does not allow arbitrary HTML.\"\n }\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"sanitization-policy-explicit\",\n \"unsafe-html-rejected\",\n \"unsafe-url-rejected\",\n \"security-change-confirmed\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"document\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"confirmation-collected\"\n ]\n },\n {\n \"operationId\": \"display.mode.set\",\n \"title\": \"Set rich content display mode\",\n \"scope\": \"global\",\n \"targetKind\": \"display\",\n \"target\": {\n \"kind\": \"display\",\n \"resolver\": \"rich-content-layout-and-root-class\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"layout\": {\n \"enum\": [\n \"block\",\n \"inline\"\n ]\n },\n \"rootClassName\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"layout\"\n },\n {\n \"kind\": \"set-value\",\n \"path\": \"rootClassName\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"layout-valid\",\n \"root-class-safe\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"layout\",\n \"rootClassName\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n }\n ],\n \"validators\": [\n {\n \"validatorId\": \"document-shape-canonical\",\n \"level\": \"error\",\n \"code\": \"PRC001\",\n \"description\": \"Documents must satisfy RichContentDocument with kind praxis.rich-content, version 1.0.0 and a nodes array.\"\n },\n {\n \"validatorId\": \"document-version-supported\",\n \"level\": \"error\",\n \"code\": \"PRC002\",\n \"description\": \"Only document version 1.0.0 is supported.\"\n },\n {\n \"validatorId\": \"node-types-supported\",\n \"level\": \"error\",\n \"code\": \"PRC003\",\n \"description\": \"Nodes must use supported rich-content node types, including link as a structured node rather than arbitrary HTML.\"\n },\n {\n \"validatorId\": \"block-id-unique\",\n \"level\": \"warning\",\n \"code\": \"PRC004\",\n \"description\": \"Stable block ids should be unique when present; operations should prefer ids over array indexes.\"\n },\n {\n \"validatorId\": \"block-exists\",\n \"level\": \"error\",\n \"code\": \"PRC005\",\n \"description\": \"Target block must exist before patching, reordering or removing it.\"\n },\n {\n \"validatorId\": \"block-order-deterministic\",\n \"level\": \"error\",\n \"code\": \"PRC006\",\n \"description\": \"Block ordering must use stable ids or explicit before/after placement and not rely on transient generated indexes.\"\n },\n {\n \"validatorId\": \"destructive-removal-confirmed\",\n \"level\": \"error\",\n \"code\": \"PRC007\",\n \"description\": \"Block and link removal are destructive and require confirmation.\"\n },\n {\n \"validatorId\": \"document-not-empty-when-required\",\n \"level\": \"warning\",\n \"code\": \"PRC008\",\n \"description\": \"Removal should not leave an empty document unless the user explicitly requested an empty rich content document.\"\n },\n {\n \"validatorId\": \"text-target-supports-field\",\n \"level\": \"error\",\n \"code\": \"PRC009\",\n \"description\": \"Text updates may only target fields supported by the selected node type.\"\n },\n {\n \"validatorId\": \"expression-path-safe\",\n \"level\": \"warning\",\n \"code\": \"PRC010\",\n \"description\": \"Expression paths must remain simple context paths or Json Logic expressions, not string DSL code.\"\n },\n {\n \"validatorId\": \"link-url-safe\",\n \"level\": \"error\",\n \"code\": \"PRC011\",\n \"description\": \"Link href values must reject javascript:, vbscript:, file: and unsafe data URLs.\"\n },\n {\n \"validatorId\": \"link-policy-explicit\",\n \"level\": \"error\",\n \"code\": \"PRC012\",\n \"description\": \"Links must declare safe target/rel behavior; _blank links default to noopener noreferrer.\"\n },\n {\n \"validatorId\": \"link-target-exists\",\n \"level\": \"error\",\n \"code\": \"PRC013\",\n \"description\": \"Link removal must resolve an existing link node by stable id or path.\"\n },\n {\n \"validatorId\": \"unsafe-url-rejected\",\n \"level\": \"error\",\n \"code\": \"PRC014\",\n \"description\": \"Image, avatar and link URL fields must reject unsafe protocols and null bytes.\"\n },\n {\n \"validatorId\": \"unsafe-style-rejected\",\n \"level\": \"error\",\n \"code\": \"PRC015\",\n \"description\": \"Inline style values must reject script, import, binding and data URL expressions.\"\n },\n {\n \"validatorId\": \"unsafe-html-rejected\",\n \"level\": \"error\",\n \"code\": \"PRC016\",\n \"description\": \"Rich-content authoring must remain structured document JSON and must not accept arbitrary HTML/script patches.\"\n },\n {\n \"validatorId\": \"sanitization-policy-explicit\",\n \"level\": \"error\",\n \"code\": \"PRC017\",\n \"description\": \"Security policy requests must keep HTML disabled and URL/style guardrails explicit.\"\n },\n {\n \"validatorId\": \"security-change-confirmed\",\n \"level\": \"error\",\n \"code\": \"PRC018\",\n \"description\": \"Sanitization policy changes require explicit confirmation.\"\n },\n {\n \"validatorId\": \"preset-ref-valid\",\n \"level\": \"error\",\n \"code\": \"PRC019\",\n \"description\": \"Preset refs must use kind rich-block plus namespace, presetId and optional version.\"\n },\n {\n \"validatorId\": \"preset-exists-or-host-mediated\",\n \"level\": \"error\",\n \"code\": \"PRC020\",\n \"description\": \"Preset application must resolve through PRAXIS_RICH_BLOCK_PRESETS or a host-mediated resolver.\"\n },\n {\n \"validatorId\": \"host-capabilities-serializable\",\n \"level\": \"error\",\n \"code\": \"PRC021\",\n \"description\": \"Public contracts must not serialize host capability functions; only refs and inputs are persisted.\"\n },\n {\n \"validatorId\": \"layout-valid\",\n \"level\": \"error\",\n \"code\": \"PRC022\",\n \"description\": \"Layout must be block or inline.\"\n },\n {\n \"validatorId\": \"root-class-safe\",\n \"level\": \"warning\",\n \"code\": \"PRC023\",\n \"description\": \"rootClassName must contain safe CSS class tokens.\"\n },\n {\n \"validatorId\": \"editor-runtime-round-trip\",\n \"level\": \"error\",\n \"code\": \"PRC024\",\n \"description\": \"Config editor, Settings Panel payload and runtime renderer must preserve document structure, layout and rootClassName.\"\n },\n {\n \"validatorId\": \"class-name-safe\",\n \"level\": \"error\",\n \"code\": \"PRC025\",\n \"description\": \"Node className values must contain safe CSS class tokens.\"\n },\n {\n \"validatorId\": \"visible-when-json-logic\",\n \"level\": \"error\",\n \"code\": \"PRC026\",\n \"description\": \"visibleWhen must be a Json Logic expression object and not a string DSL.\"\n },\n {\n \"validatorId\": \"media-block-target-valid\",\n \"level\": \"error\",\n \"code\": \"PRC027\",\n \"description\": \"Media operations must target a mediaBlock node and preserve structured avatar/text child nodes.\"\n },\n {\n \"validatorId\": \"timeline-target-valid\",\n \"level\": \"error\",\n \"code\": \"PRC028\",\n \"description\": \"Timeline item operations must target a timeline node with an items array.\"\n },\n {\n \"validatorId\": \"timeline-item-valid\",\n \"level\": \"error\",\n \"code\": \"PRC029\",\n \"description\": \"Timeline items must be objects matching RichTimelineItem fields.\"\n },\n {\n \"validatorId\": \"timeline-item-id-unique\",\n \"level\": \"warning\",\n \"code\": \"PRC030\",\n \"description\": \"Timeline item ids should be unique inside a timeline node when present.\"\n },\n {\n \"validatorId\": \"timeline-item-exists\",\n \"level\": \"error\",\n \"code\": \"PRC031\",\n \"description\": \"Timeline item updates and removals must resolve an existing item by stable id or explicit fallback index.\"\n },\n {\n \"validatorId\": \"timeline-item-field-supported\",\n \"level\": \"error\",\n \"code\": \"PRC032\",\n \"description\": \"Timeline item updates may only target supported RichTimelineItem fields.\"\n },\n {\n \"validatorId\": \"timeline-setting-supported\",\n \"level\": \"error\",\n \"code\": \"PRC033\",\n \"description\": \"Timeline display settings must use supported position, connector, marker, emphasis, density and text appearance enum values.\"\n }\n ],\n \"roundTripRequirements\": [\n \"The editor must produce the same widget input envelope consumed by page-builder: inputs.document, inputs.layout and inputs.rootClassName.\",\n \"Rich content must remain structured RichContentDocument JSON; arbitrary HTML and script URL patches are rejected before persistence.\",\n \"Block identity should prefer document.nodes[].id; array index is a resolver fallback only and cannot be the canonical identity for generated patches.\",\n \"Link authoring uses canonical link nodes with safe href/target/rel instead of markdown or raw HTML embedded in text nodes.\",\n \"MediaBlock, timeline node appearance, timeline item, metadata, visibleWhen and safe style authoring use the same structured paths exposed by the visual config editor.\",\n \"Preset authoring persists only rich-block refs and inputs; host capability functions remain runtime-mediated and are not serialized.\"\n ],\n \"examples\": [\n {\n \"id\": \"set-empty-document\",\n \"request\": \"Start with an empty rich content document.\",\n \"operationId\": \"document.set\",\n \"params\": {\n \"kind\": \"praxis.rich-content\",\n \"version\": \"1.0.0\",\n \"nodes\": []\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-text-block\",\n \"request\": \"Add a text block saying Welcome.\",\n \"operationId\": \"block.add\",\n \"params\": {\n \"type\": \"text\",\n \"node\": {\n \"id\": \"welcome\",\n \"type\": \"text\",\n \"text\": \"Welcome\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"remove-obsolete-block\",\n \"request\": \"Remove the obsolete block.\",\n \"operationId\": \"block.remove\",\n \"target\": \"obsolete\",\n \"params\": {\n \"blockId\": \"obsolete\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"move-summary-before-details\",\n \"request\": \"Move summary before details.\",\n \"operationId\": \"block.order.set\",\n \"target\": \"summary\",\n \"params\": {\n \"blockId\": \"summary\",\n \"beforeBlockId\": \"details\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"update-title-text\",\n \"request\": \"Change the hero title to Customer overview.\",\n \"operationId\": \"text.update\",\n \"target\": \"hero-title\",\n \"params\": {\n \"text\": \"Customer overview\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-docs-link\",\n \"request\": \"Add a link to the documentation.\",\n \"operationId\": \"link.add\",\n \"params\": {\n \"id\": \"docs-link\",\n \"label\": \"Documentation\",\n \"href\": \"/docs\",\n \"target\": \"_self\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"reject-script-link\",\n \"request\": \"Add a link to javascript:alert(1).\",\n \"operationId\": \"link.add\",\n \"params\": {\n \"label\": \"Bad link\",\n \"href\": \"javascript:alert(1)\"\n },\n \"isPositive\": false\n },\n {\n \"id\": \"remove-docs-link\",\n \"request\": \"Remove the documentation link but keep its label as text.\",\n \"operationId\": \"link.remove\",\n \"target\": \"docs-link\",\n \"params\": {\n \"linkId\": \"docs-link\",\n \"preserveLabelAsText\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"apply-profile-preset\",\n \"request\": \"Apply the profile summary rich-block preset.\",\n \"operationId\": \"preset.apply\",\n \"params\": {\n \"ref\": {\n \"kind\": \"rich-block\",\n \"namespace\": \"praxis.rich-content\",\n \"presetId\": \"profile-summary\",\n \"version\": \"1.0.0\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"show-only-active-row\",\n \"request\": \"Show the status block only when row.active is true.\",\n \"operationId\": \"metadata.update\",\n \"target\": \"status\",\n \"params\": {\n \"blockId\": \"status\",\n \"visibleWhen\": {\n \"===\": [\n {\n \"var\": \"row.active\"\n },\n true\n ]\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"update-media-title\",\n \"request\": \"Update the profile media block title and avatar name.\",\n \"operationId\": \"mediaBlock.update\",\n \"target\": \"profile-media\",\n \"params\": {\n \"blockId\": \"profile-media\",\n \"avatarName\": \"Ana Silva\",\n \"title\": \"Profile summary\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"make-timeline-prominent\",\n \"request\": \"Make the activity timeline read as a prominent hero process.\",\n \"operationId\": \"timeline.node.update\",\n \"target\": \"activity\",\n \"params\": {\n \"timelineBlockId\": \"activity\",\n \"emphasis\": \"hero\",\n \"density\": \"comfortable\",\n \"textAppearance\": \"prominent\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-created-timeline-item\",\n \"request\": \"Add a Created item to the activity timeline.\",\n \"operationId\": \"timeline.item.add\",\n \"target\": \"activity\",\n \"params\": {\n \"timelineBlockId\": \"activity\",\n \"item\": {\n \"id\": \"created\",\n \"title\": \"Created\",\n \"badge\": \"Done\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"reject-unknown-timeline-field\",\n \"request\": \"Set a custom script field on a timeline item.\",\n \"operationId\": \"timeline.item.update\",\n \"target\": \"activity.created\",\n \"params\": {\n \"timelineBlockId\": \"activity\",\n \"itemId\": \"created\",\n \"field\": \"script\",\n \"value\": \"alert(1)\"\n },\n \"isPositive\": false\n },\n {\n \"id\": \"reject-html-policy\",\n \"request\": \"Allow arbitrary HTML in this rich content document.\",\n \"operationId\": \"sanitizationPolicy.set\",\n \"params\": {\n \"allowHtml\": true\n },\n \"isPositive\": false\n },\n {\n \"id\": \"compact-inline-layout\",\n \"request\": \"Render this rich content inline with root class status-line.\",\n \"operationId\": \"display.mode.set\",\n \"params\": {\n \"layout\": \"inline\",\n \"rootClassName\": \"status-line\"\n },\n \"isPositive\": true\n }\n ]\n}",
|
|
6569
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"identity\"}",
|
|
6570
6570
|
"sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
|
|
6571
|
-
"contentHash": "
|
|
6571
|
+
"contentHash": "1a9d0b8a44eb732c0bd9a954e84d8068220e6661f22cf6d83f72a237c5a2f906",
|
|
6572
6572
|
"sourceKind": "component_definition",
|
|
6573
6573
|
"sourceId": "praxis-rich-content",
|
|
6574
6574
|
"corpusVersion": "1.0.0"
|
|
6575
6575
|
},
|
|
6576
6576
|
{
|
|
6577
6577
|
"chunkIndex": 2,
|
|
6578
|
+
"chunkKind": "authoring_manifest",
|
|
6579
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"document\",\"type\":\"RichContentDocument | null\",\"description\":\"Canonical praxis.rich-content document rendered by the component.\"},{\"name\":\"nodes\",\"type\":\"RichBlockNode[] | null\",\"description\":\"Direct node list used only when the host controls the document envelope.\"},{\"name\":\"context\",\"type\":\"JsonLogicDataRecord | null\",\"description\":\"External context used by expression paths and Json Logic rules.\"},{\"name\":\"hostCapabilities\",\"type\":\"RichBlockHostCapabilities | null\",\"description\":\"Host-mediated preset, action, action confirmation, data and embed capabilities; functions are not serialized in public contracts.\"},{\"name\":\"layout\",\"type\":\"'block' | 'inline'\",\"allowedValues\":[\"block\",\"inline\"],\"description\":\"Renderer layout mode.\"},{\"name\":\"rootClassName\",\"type\":\"string\",\"description\":\"CSS class applied to the renderer root.\"}]}",
|
|
6580
|
+
"sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
|
|
6581
|
+
"contentHash": "45d96fd455a919bbde2da0164edf87695ae43db035360636839d2372729de52c",
|
|
6582
|
+
"sourceKind": "component_definition",
|
|
6583
|
+
"sourceId": "praxis-rich-content",
|
|
6584
|
+
"corpusVersion": "1.0.0"
|
|
6585
|
+
},
|
|
6586
|
+
{
|
|
6587
|
+
"chunkIndex": 3,
|
|
6588
|
+
"chunkKind": "authoring_manifest",
|
|
6589
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"document\",\"resolver\":\"rich-content-document-root\",\"description\":\"The canonical RichContentDocument input envelope.\"},{\"kind\":\"block\",\"resolver\":\"rich-block-by-id-or-index\",\"description\":\"A top-level document.nodes[] block with stable id preferred over index.\"},{\"kind\":\"text\",\"resolver\":\"rich-text-node-by-id-or-path\",\"description\":\"Text-bearing nodes, including text, badge, metric, progress, card and timeline labels.\"},{\"kind\":\"link\",\"resolver\":\"rich-link-node-by-id-or-path\",\"description\":\"Canonical link node with label, href, target and rel.\"},{\"kind\":\"media\",\"resolver\":\"rich-media-node-by-id-or-path\",\"description\":\"Image, avatar image and mediaBlock child nodes.\"},{\"kind\":\"timeline\",\"resolver\":\"rich-timeline-node-by-id-or-path\",\"description\":\"Timeline nodes with visual placement, connector, marker and semantic appearance settings.\"},{\"kind\":\"timelineItem\",\"resolver\":\"rich-timeline-item-by-block-id-and-item-id\",\"description\":\"Timeline items nested inside timeline nodes; stable item id is preferred over index.\"},{\"kind\":\"metadata\",\"resolver\":\"rich-block-common-metadata\",\"description\":\"Common node metadata such as testId, className, visibleWhen and safe style.\"},{\"kind\":\"preset\",\"resolver\":\"rich-block-preset-ref\",\"description\":\"Preset nodes resolved through PRAXIS_RICH_BLOCK_PRESETS or hostCapabilities.resolvePreset.\"},{\"kind\":\"sanitizationPolicy\",\"resolver\":\"rich-content-validation-policy\",\"description\":\"Document validation policy enforced by validateRichContentDocument.\"},{\"kind\":\"display\",\"resolver\":\"rich-content-layout-and-root-class\",\"description\":\"Layout and rootClassName runtime inputs.\"}]}",
|
|
6590
|
+
"sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
|
|
6591
|
+
"contentHash": "5c8309a331696ec1055addad23abb37c472318af5e1dbd4390531ff8bf0c6eac",
|
|
6592
|
+
"sourceKind": "component_definition",
|
|
6593
|
+
"sourceId": "praxis-rich-content",
|
|
6594
|
+
"corpusVersion": "1.0.0"
|
|
6595
|
+
},
|
|
6596
|
+
{
|
|
6597
|
+
"chunkIndex": 4,
|
|
6598
|
+
"chunkKind": "authoring_manifest",
|
|
6599
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"document.set\",\"title\":\"Set rich content document\",\"scope\":\"global\",\"targetKind\":\"document\",\"target\":{\"kind\":\"document\",\"resolver\":\"rich-content-document-root\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"kind\",\"version\",\"nodes\"],\"properties\":{\"kind\":{\"const\":\"praxis.rich-content\"},\"version\":{\"const\":\"1.0.0\"},\"context\":{\"type\":\"object\"},\"nodes\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}}}},\"effects\":[{\"kind\":\"set-value\",\"path\":\"document\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"document-shape-canonical\",\"document-version-supported\",\"node-types-supported\",\"unsafe-url-rejected\",\"unsafe-style-rejected\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"block.add\",\"title\":\"Add rich content block\",\"scope\":\"templating\",\"targetKind\":\"block\",\"target\":{\"kind\":\"block\",\"resolver\":\"document-nodes-array\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"type\"],\"properties\":{\"type\":{\"enum\":[\"text\",\"icon\",\"image\",\"link\",\"badge\",\"avatar\",\"metric\",\"progress\",\"actionButton\",\"compose\",\"card\",\"callout\",\"ctaGroup\",\"keyValueList\",\"emptyState\",\"propertySheet\",\"statGroup\",\"tabs\",\"recordSummary\",\"lookupResult\",\"lookupCard\",\"relatedRecord\",\"actionCard\",\"decisionPackage\",\"collapsibleCard\",\"disclosure\",\"accordion\",\"formLauncher\",\"mediaBlock\",\"timeline\",\"preset\"]},\"node\":{\"type\":\"object\"},\"afterBlockId\":{\"type\":\"string\"},\"beforeBlockId\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"rich-content-block-add\",\"handlerContract\":{\"reads\":[\"document.nodes[]\"],\"writes\":[\"document.nodes[]\"],\"identityKeys\":[\"document.nodes[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"type\"],\"properties\":{\"type\":{\"enum\":[\"text\",\"icon\",\"image\",\"link\",\"badge\",\"avatar\",\"metric\",\"progress\",\"actionButton\",\"compose\",\"card\",\"callout\",\"ctaGroup\",\"keyValueList\",\"emptyState\",\"propertySheet\",\"statGroup\",\"tabs\",\"recordSummary\",\"lookupResult\",\"lookupCard\",\"relatedRecord\",\"actionCard\",\"decisionPackage\",\"collapsibleCard\",\"disclosure\",\"accordion\",\"formLauncher\",\"mediaBlock\",\"timeline\",\"preset\"]},\"node\":{\"type\":\"object\"},\"afterBlockId\":{\"type\":\"string\"},\"beforeBlockId\":{\"type\":\"string\"}}},\"failureModes\":[\"unsupported-node-type\",\"duplicate-node-id\",\"invalid-node-shape\",\"unsafe-url\",\"unsafe-style\"],\"description\":\"Creates a supported RichBlockNode, validates it with validateRichContentDocument semantics and inserts it by stable neighbor id when provided.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"node-types-supported\",\"block-id-unique\",\"document-shape-canonical\",\"unsafe-url-rejected\",\"unsafe-style-rejected\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document.nodes[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]}]}",
|
|
6600
|
+
"sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
|
|
6601
|
+
"contentHash": "9a2c3729529b0b2748a7122f93fa7159df2e840cef9bad660bdb0e2d3375c7c7",
|
|
6602
|
+
"sourceKind": "component_definition",
|
|
6603
|
+
"sourceId": "praxis-rich-content",
|
|
6604
|
+
"corpusVersion": "1.0.0"
|
|
6605
|
+
},
|
|
6606
|
+
{
|
|
6607
|
+
"chunkIndex": 5,
|
|
6608
|
+
"chunkKind": "authoring_manifest",
|
|
6609
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"block.update\",\"title\":\"Update rich content block fields\",\"scope\":\"templating\",\"targetKind\":\"block\",\"target\":{\"kind\":\"block\",\"resolver\":\"rich-block-node-by-id-or-path\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"id\":{\"type\":\"string\"},\"testId\":{\"type\":\"string\"},\"className\":{\"type\":\"string\"},\"style\":{\"type\":\"object\"},\"visibleWhen\":{\"type\":\"object\"},\"disabledWhen\":{\"type\":\"object\"},\"loadWhen\":{\"type\":\"object\"},\"classWhen\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"styleWhen\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"requiresCapabilities\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"capabilityMode\":{\"enum\":[\"all\",\"any\"]},\"text\":{\"type\":\"string\"},\"textExpr\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"labelExpr\":{\"type\":\"string\"},\"href\":{\"type\":\"string\"},\"target\":{\"enum\":[\"_self\",\"_blank\"]},\"rel\":{\"type\":\"string\"},\"src\":{\"type\":\"string\"},\"alt\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"titleExpr\":{\"type\":\"string\"},\"subtitle\":{\"type\":\"string\"},\"subtitleExpr\":{\"type\":\"string\"},\"relationLabel\":{\"type\":\"string\"},\"message\":{\"type\":\"string\"},\"summary\":{\"type\":\"string\"},\"summaryExpr\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"ctaLabel\":{\"type\":\"string\"},\"caption\":{\"type\":\"string\"},\"emptyText\":{\"type\":\"string\"},\"errorText\":{\"type\":\"string\"},\"status\":{\"enum\":[\"idle\",\"resolved\",\"empty\",\"error\",\"draft\",\"simulated\",\"approved\",\"published\",\"superseded\",\"reverted\"]},\"statusExpr\":{\"type\":\"string\"},\"owner\":{\"type\":\"string\"},\"ownerExpr\":{\"type\":\"string\"},\"policySource\":{\"type\":\"string\"},\"policySourceExpr\":{\"type\":\"string\"},\"version\":{\"type\":\"string\"},\"versionExpr\":{\"type\":\"string\"},\"confidence\":{\"type\":\"number\"},\"confidenceExpr\":{\"type\":\"string\"},\"risk\":{\"enum\":[\"low\",\"medium\",\"high\",\"critical\"]},\"riskExpr\":{\"type\":\"string\"},\"lastReviewed\":{\"type\":\"string\"},\"lastReviewedExpr\":{\"type\":\"string\"},\"supersedes\":{\"type\":\"string\"},\"supersedesExpr\":{\"type\":\"string\"},\"evidence\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"appearance\":{\"enum\":[\"plain\",\"card\",\"underline\",\"pills\"]},\"variant\":{\"enum\":[\"basic\",\"raised\",\"stroked\",\"flat\",\"plain\",\"outlined\",\"elevated\",\"filled\",\"transparent\"]},\"tone\":{\"enum\":[\"neutral\",\"info\",\"success\",\"warning\",\"danger\"]},\"size\":{\"enum\":[\"sm\",\"md\",\"lg\"]},\"density\":{},\"orientation\":{},\"loading\":{\"type\":\"boolean\"},\"loadingExpr\":{\"type\":\"string\"},\"active\":{\"type\":\"boolean\"},\"activeExpr\":{\"type\":\"string\"},\"defaultTabId\":{\"type\":\"string\"},\"order\":{\"enum\":[\"normal\",\"reverse\"]},\"position\":{\"enum\":[\"left\",\"right\",\"alternate\",\"alternate-reverse\"]},\"connectorVariant\":{\"enum\":[\"solid\",\"dashed\",\"none\"]},\"connectorColor\":{\"enum\":[\"primary\",\"secondary\",\"tertiary\",\"success\",\"warning\",\"error\",\"info\",\"neutral\"]},\"markerVariant\":{\"enum\":[\"dot\",\"icon\",\"number\"]},\"markerColor\":{},\"markerStyle\":{\"enum\":[\"filled\",\"outlined\"]},\"emphasis\":{\"enum\":[\"subtle\",\"standard\",\"strong\",\"hero\"]},\"textAppearance\":{\"enum\":[\"default\",\"prominent\",\"eyebrow\",\"label\"]},\"icon\":{\"type\":\"string\"},\"formId\":{\"type\":\"string\"},\"columns\":{\"enum\":[1,2]},\"layout\":{\"enum\":[\"stacked\",\"inline\",\"split\",\"grid\"]},\"action\":{\"type\":\"object\"},\"actions\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"primaryAction\":{\"type\":\"object\"},\"secondaryActions\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"media\":{\"type\":\"object\",\"properties\":{\"kind\":{\"enum\":[\"image\",\"video\",\"icon\",\"avatar\"]},\"src\":{\"type\":\"string\"},\"srcExpr\":{\"type\":\"string\"},\"alt\":{\"type\":\"string\"},\"altExpr\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"labelExpr\":{\"type\":\"string\"},\"placement\":{\"enum\":[\"top\",\"leading\",\"trailing\",\"background\"]},\"aspectRatio\":{\"type\":\"string\"}}},\"headerAction\":{\"type\":\"object\"},\"interaction\":{\"type\":\"object\",\"properties\":{\"mode\":{\"enum\":[\"none\",\"action\",\"selectable\"]},\"action\":{\"type\":\"object\"},\"selected\":{\"type\":\"boolean\"},\"selectedExpr\":{\"type\":\"string\"}}},\"accessibility\":{\"type\":\"object\",\"properties\":{\"role\":{\"enum\":[\"article\",\"group\",\"button\"]},\"ariaLabel\":{\"type\":\"string\"},\"ariaLabelExpr\":{\"type\":\"string\"},\"ariaLabelledBy\":{\"type\":\"string\"},\"ariaDescribedBy\":{\"type\":\"string\"}}},\"fields\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"items\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"header\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"body\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"footer\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"aside\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"document.nodes[]\",\"key\":\"id\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"block-exists\",\"node-types-supported\",\"unsafe-url-rejected\",\"unsafe-style-rejected\",\"expression-path-safe\",\"document-shape-canonical\",\"editor-runtime-round-trip\"],\"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[].interaction\",\"document.nodes[].accessibility\",\"document.nodes[].fields\",\"document.nodes[].items[]\",\"document.nodes[].header\",\"document.nodes[].body\",\"document.nodes[].footer\",\"document.nodes[].aside\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-block-exists\"]}]}",
|
|
6610
|
+
"sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
|
|
6611
|
+
"contentHash": "65d9c08622e6d563214991d0ca1ca096e32ff5447f647d62baf5af1490b355b7",
|
|
6612
|
+
"sourceKind": "component_definition",
|
|
6613
|
+
"sourceId": "praxis-rich-content",
|
|
6614
|
+
"corpusVersion": "1.0.0"
|
|
6615
|
+
},
|
|
6616
|
+
{
|
|
6617
|
+
"chunkIndex": 6,
|
|
6618
|
+
"chunkKind": "authoring_manifest",
|
|
6619
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"block.remove\",\"title\":\"Remove rich content block\",\"scope\":\"templating\",\"targetKind\":\"block\",\"target\":{\"kind\":\"block\",\"resolver\":\"rich-block-by-id-or-index\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"blockId\":{\"type\":\"string\"},\"replacementBlockId\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"remove-by-key\",\"path\":\"document.nodes[]\",\"key\":\"id\"}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"block-exists\",\"destructive-removal-confirmed\",\"document-not-empty-when-required\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document.nodes[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-block-exists\",\"confirmation-collected\"]},{\"operationId\":\"block.order.set\",\"title\":\"Reorder rich content blocks\",\"scope\":\"templating\",\"targetKind\":\"block\",\"target\":{\"kind\":\"block\",\"resolver\":\"rich-block-by-id-or-index\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"blockId\"],\"properties\":{\"blockId\":{\"type\":\"string\"},\"beforeBlockId\":{\"type\":\"string\"},\"afterBlockId\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"reorder-by-key\",\"path\":\"document.nodes[]\",\"key\":\"id\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"block-exists\",\"block-order-deterministic\",\"document-shape-canonical\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document.nodes[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-block-exists\"]},{\"operationId\":\"text.update\",\"title\":\"Update rich content text\",\"scope\":\"templating\",\"targetKind\":\"text\",\"target\":{\"kind\":\"text\",\"resolver\":\"rich-text-node-by-id-or-path\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"text\":{\"type\":\"string\"},\"textExpr\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"labelExpr\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"subtitle\":{\"type\":\"string\"},\"relationLabel\":{\"type\":\"string\"},\"message\":{\"type\":\"string\"},\"summary\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"ctaLabel\":{\"type\":\"string\"},\"emptyText\":{\"type\":\"string\"},\"errorText\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"document.nodes[]\",\"key\":\"id\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"block-exists\",\"text-target-supports-field\",\"expression-path-safe\",\"document-shape-canonical\",\"editor-runtime-round-trip\"],\"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\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-block-exists\"]},{\"operationId\":\"link.add\",\"title\":\"Add link block\",\"scope\":\"templating\",\"targetKind\":\"link\",\"target\":{\"kind\":\"link\",\"resolver\":\"document-nodes-array\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"label\",\"href\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"labelExpr\":{\"type\":\"string\"},\"href\":{\"type\":\"string\"},\"target\":{\"enum\":[\"_self\",\"_blank\"]},\"rel\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"document.nodes[]\",\"key\":\"id\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"link-url-safe\",\"link-policy-explicit\",\"node-types-supported\",\"block-id-unique\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document.nodes[]\",\"document.nodes[].href\",\"document.nodes[].target\",\"document.nodes[].rel\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"link.remove\",\"title\":\"Remove link from rich content\",\"scope\":\"templating\",\"targetKind\":\"link\",\"target\":{\"kind\":\"link\",\"resolver\":\"rich-link-node-by-id-or-path\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"linkId\":{\"type\":\"string\"},\"preserveLabelAsText\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"rich-content-link-remove\",\"handlerContract\":{\"reads\":[\"document.nodes[]\",\"document.nodes[].id\",\"document.nodes[].type\",\"document.nodes[].label\"],\"writes\":[\"document.nodes[]\"],\"identityKeys\":[\"document.nodes[].id\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"linkId\":{\"type\":\"string\"},\"preserveLabelAsText\":{\"type\":\"boolean\"}}},\"failureModes\":[\"link-not-found\",\"ambiguous-link-target\",\"replacement-text-invalid\"],\"description\":\"Removes a link node by stable id or path and optionally replaces it with a text node containing the prior link label.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"link-target-exists\",\"destructive-removal-confirmed\",\"document-shape-canonical\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document.nodes[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-link-exists\",\"confirmation-collected\"]},{\"operationId\":\"preset.apply\",\"title\":\"Apply rich block preset\",\"scope\":\"templating\",\"targetKind\":\"preset\",\"target\":{\"kind\":\"preset\",\"resolver\":\"rich-block-preset-ref\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"ref\"],\"properties\":{\"ref\":{\"type\":\"object\"},\"inputs\":{\"type\":\"object\"},\"replaceBlockId\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"rich-content-preset-apply\",\"handlerContract\":{\"reads\":[\"PRAXIS_RICH_BLOCK_PRESETS\",\"hostCapabilities.resolvePreset\",\"document.nodes[]\"],\"writes\":[\"document.nodes[]\"],\"identityKeys\":[\"ref.kind\",\"ref.namespace\",\"ref.presetId\",\"ref.version\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"ref\"],\"properties\":{\"ref\":{\"type\":\"object\"},\"inputs\":{\"type\":\"object\"},\"replaceBlockId\":{\"type\":\"string\"}}},\"failureModes\":[\"preset-not-found\",\"preset-kind-invalid\",\"preset-document-invalid\",\"preset-cycle-detected\"],\"description\":\"Resolves a rich-block preset through the governed registry/host mediation and inserts or replaces a preset reference without serializing functions.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"preset-ref-valid\",\"preset-exists-or-host-mediated\",\"host-capabilities-serializable\",\"document-shape-canonical\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document.nodes[]\",\"document.nodes[].ref\",\"document.nodes[].inputs\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]}]}",
|
|
6620
|
+
"sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
|
|
6621
|
+
"contentHash": "de3079807ac8c32a24eb0c0a25ac23b7b04b84fa0810ec1ec3c5676070546e80",
|
|
6622
|
+
"sourceKind": "component_definition",
|
|
6623
|
+
"sourceId": "praxis-rich-content",
|
|
6624
|
+
"corpusVersion": "1.0.0"
|
|
6625
|
+
},
|
|
6626
|
+
{
|
|
6627
|
+
"chunkIndex": 7,
|
|
6628
|
+
"chunkKind": "authoring_manifest",
|
|
6629
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"metadata.update\",\"title\":\"Update rich block metadata\",\"scope\":\"templating\",\"targetKind\":\"metadata\",\"target\":{\"kind\":\"metadata\",\"resolver\":\"rich-block-by-id-or-index\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"blockId\":{\"type\":\"string\"},\"testId\":{\"type\":\"string\"},\"className\":{\"type\":\"string\"},\"visibleWhen\":{\"type\":\"object\"},\"disabledWhen\":{\"type\":\"object\"},\"loadWhen\":{\"type\":\"object\"},\"classWhen\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"styleWhen\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}},\"style\":{\"type\":\"object\"},\"requiresCapabilities\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"capabilityMode\":{\"enum\":[\"all\",\"any\"]}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"document.nodes[]\",\"key\":\"id\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"block-exists\",\"class-name-safe\",\"visible-when-json-logic\",\"unsafe-style-rejected\",\"document-shape-canonical\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document.nodes[].testId\",\"document.nodes[].className\",\"document.nodes[].visibleWhen\",\"document.nodes[].disabledWhen\",\"document.nodes[].loadWhen\",\"document.nodes[].classWhen\",\"document.nodes[].styleWhen\",\"document.nodes[].style\",\"document.nodes[].requiresCapabilities\",\"document.nodes[].capabilityMode\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-block-exists\"]},{\"operationId\":\"mediaBlock.update\",\"title\":\"Update media block fields\",\"scope\":\"templating\",\"targetKind\":\"media\",\"target\":{\"kind\":\"media\",\"resolver\":\"rich-media-node-by-id-or-path\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"blockId\":{\"type\":\"string\"},\"avatarName\":{\"type\":\"string\"},\"avatarImageSrc\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"titleExpr\":{\"type\":\"string\"},\"subtitle\":{\"type\":\"string\"},\"subtitleExpr\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"rich-content-media-block-update\",\"handlerContract\":{\"reads\":[\"document.nodes[]\",\"document.nodes[].id\",\"document.nodes[].type\"],\"writes\":[\"document.nodes[].avatar\",\"document.nodes[].title\",\"document.nodes[].subtitle\"],\"identityKeys\":[\"document.nodes[].id\"],\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"blockId\":{\"type\":\"string\"},\"avatarName\":{\"type\":\"string\"},\"avatarImageSrc\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"titleExpr\":{\"type\":\"string\"},\"subtitle\":{\"type\":\"string\"},\"subtitleExpr\":{\"type\":\"string\"}}},\"failureModes\":[\"media-block-not-found\",\"target-not-media-block\",\"unsafe-url\",\"invalid-text-node\"],\"description\":\"Updates the structured mediaBlock avatar/title/subtitle fields while preserving meta and trailing content for advanced JSON authoring.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"block-exists\",\"media-block-target-valid\",\"unsafe-url-rejected\",\"expression-path-safe\",\"document-shape-canonical\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document.nodes[].avatar\",\"document.nodes[].title\",\"document.nodes[].subtitle\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-block-exists\"]},{\"operationId\":\"timeline.node.update\",\"title\":\"Update timeline display settings\",\"scope\":\"templating\",\"targetKind\":\"timeline\",\"target\":{\"kind\":\"timeline\",\"resolver\":\"rich-timeline-node-by-id-or-path\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"timelineBlockId\"],\"minProperties\":2,\"properties\":{\"timelineBlockId\":{\"type\":\"string\"},\"orientation\":{\"enum\":[\"vertical\",\"horizontal\"]},\"order\":{},\"position\":{},\"connectorVariant\":{},\"connectorColor\":{},\"markerVariant\":{},\"markerColor\":{},\"markerStyle\":{},\"emphasis\":{},\"density\":{\"enum\":[\"compact\",\"comfortable\",\"spacious\"]},\"textAppearance\":{},\"title\":{\"type\":\"string\"},\"titleExpr\":{\"type\":\"string\"},\"emptyText\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"rich-content-timeline-node-update\",\"handlerContract\":{\"reads\":[\"document.nodes[]\",\"document.nodes[].id\",\"document.nodes[].type\"],\"writes\":[\"document.nodes[].orientation\",\"document.nodes[].order\",\"document.nodes[].position\",\"document.nodes[].connectorVariant\",\"document.nodes[].connectorColor\",\"document.nodes[].markerVariant\",\"document.nodes[].markerColor\",\"document.nodes[].markerStyle\",\"document.nodes[].emphasis\",\"document.nodes[].density\",\"document.nodes[].textAppearance\",\"document.nodes[].title\",\"document.nodes[].titleExpr\",\"document.nodes[].emptyText\"],\"identityKeys\":[\"document.nodes[].id\"],\"failureModes\":[\"timeline-not-found\",\"unsupported-timeline-setting\",\"invalid-timeline-setting\"],\"description\":\"Updates timeline node display and semantic appearance settings while preserving timeline items and the canonical RichTimelineNode shape.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"block-exists\",\"timeline-target-valid\",\"timeline-setting-supported\",\"document-shape-canonical\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document.nodes[].orientation\",\"document.nodes[].order\",\"document.nodes[].position\",\"document.nodes[].connectorVariant\",\"document.nodes[].connectorColor\",\"document.nodes[].markerVariant\",\"document.nodes[].markerColor\",\"document.nodes[].markerStyle\",\"document.nodes[].emphasis\",\"document.nodes[].density\",\"document.nodes[].textAppearance\",\"document.nodes[].title\",\"document.nodes[].titleExpr\",\"document.nodes[].emptyText\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-block-exists\"]},{\"operationId\":\"timeline.item.add\",\"title\":\"Add timeline item\",\"scope\":\"templating\",\"targetKind\":\"timelineItem\",\"target\":{\"kind\":\"timelineItem\",\"resolver\":\"rich-timeline-node-by-id-or-path\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"timelineBlockId\",\"item\"],\"properties\":{\"timelineBlockId\":{\"type\":\"string\"},\"item\":{},\"afterItemId\":{\"type\":\"string\"},\"beforeItemId\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"rich-content-timeline-item-add\",\"handlerContract\":{\"reads\":[\"document.nodes[]\",\"document.nodes[].items[]\"],\"writes\":[\"document.nodes[].items[]\"],\"identityKeys\":[\"document.nodes[].id\",\"document.nodes[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"timelineBlockId\",\"item\"],\"properties\":{\"timelineBlockId\":{\"type\":\"string\"},\"afterItemId\":{\"type\":\"string\"},\"beforeItemId\":{\"type\":\"string\"}}},\"failureModes\":[\"timeline-not-found\",\"duplicate-timeline-item-id\",\"invalid-timeline-item\"],\"description\":\"Adds a timeline item to a timeline node using stable timeline and item ids when present; array index is a resolver fallback only.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"block-exists\",\"timeline-target-valid\",\"timeline-item-valid\",\"timeline-item-id-unique\",\"document-shape-canonical\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document.nodes[].items[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-block-exists\"]}]}",
|
|
6630
|
+
"sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
|
|
6631
|
+
"contentHash": "164ed574f455a3c46c54530d8d5159afc00e31356a5e6094f2a4c0448019c0f7",
|
|
6632
|
+
"sourceKind": "component_definition",
|
|
6633
|
+
"sourceId": "praxis-rich-content",
|
|
6634
|
+
"corpusVersion": "1.0.0"
|
|
6635
|
+
},
|
|
6636
|
+
{
|
|
6637
|
+
"chunkIndex": 8,
|
|
6638
|
+
"chunkKind": "authoring_manifest",
|
|
6639
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"timeline.item.update\",\"title\":\"Update timeline item\",\"scope\":\"templating\",\"targetKind\":\"timelineItem\",\"target\":{\"kind\":\"timelineItem\",\"resolver\":\"rich-timeline-item-by-block-id-and-item-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"timelineBlockId\"],\"minProperties\":2,\"properties\":{\"timelineBlockId\":{\"type\":\"string\"},\"itemId\":{\"type\":\"string\"},\"itemIndex\":{\"type\":\"number\"},\"field\":{\"enum\":[\"title\",\"titleExpr\",\"subtitle\",\"subtitleExpr\",\"meta\",\"metaExpr\",\"opposite\",\"oppositeExpr\",\"icon\",\"iconExpr\",\"badge\",\"badgeExpr\",\"markerColor\",\"markerStyle\",\"connectorColor\",\"connectorVariant\"]},\"value\":{\"type\":\"string\"},\"patch\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"id\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"titleExpr\":{\"type\":\"string\"},\"subtitle\":{\"type\":\"string\"},\"subtitleExpr\":{\"type\":\"string\"},\"meta\":{\"type\":\"string\"},\"metaExpr\":{\"type\":\"string\"},\"opposite\":{\"type\":\"string\"},\"oppositeExpr\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"iconExpr\":{\"type\":\"string\"},\"badge\":{\"type\":\"string\"},\"badgeExpr\":{\"type\":\"string\"},\"markerColor\":{},\"markerStyle\":{},\"connectorColor\":{},\"connectorVariant\":{}}}},\"anyOf\":[{\"required\":[\"field\",\"value\"]},{\"required\":[\"patch\"]}],\"allOf\":[{\"if\":{\"properties\":{\"field\":{\"enum\":[\"markerColor\",\"connectorColor\"]}},\"required\":[\"field\"]},\"then\":{\"properties\":{\"value\":{}}}},{\"if\":{\"properties\":{\"field\":{\"const\":\"markerStyle\"}},\"required\":[\"field\"]},\"then\":{\"properties\":{\"value\":{}}}},{\"if\":{\"properties\":{\"field\":{\"const\":\"connectorVariant\"}},\"required\":[\"field\"]},\"then\":{\"properties\":{\"value\":{}}}},{\"if\":{\"properties\":{\"field\":{}},\"required\":[\"field\"]},\"then\":{\"properties\":{\"value\":{\"type\":\"string\"}}}}]},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"rich-content-timeline-item-update\",\"handlerContract\":{\"reads\":[\"document.nodes[]\",\"document.nodes[].items[]\"],\"writes\":[\"document.nodes[].items[]\"],\"identityKeys\":[\"document.nodes[].id\",\"document.nodes[].items[].id\"],\"failureModes\":[\"timeline-not-found\",\"timeline-item-not-found\",\"unsupported-timeline-field\",\"invalid-timeline-item\"],\"description\":\"Updates a timeline item by stable item id when available, preserving the item object shape accepted by RichTimelineItem.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"block-exists\",\"timeline-target-valid\",\"timeline-item-exists\",\"timeline-item-field-supported\",\"document-shape-canonical\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document.nodes[].items[].title\",\"document.nodes[].items[].titleExpr\",\"document.nodes[].items[].subtitle\",\"document.nodes[].items[].subtitleExpr\",\"document.nodes[].items[].meta\",\"document.nodes[].items[].metaExpr\",\"document.nodes[].items[].opposite\",\"document.nodes[].items[].oppositeExpr\",\"document.nodes[].items[].icon\",\"document.nodes[].items[].iconExpr\",\"document.nodes[].items[].badge\",\"document.nodes[].items[].badgeExpr\",\"document.nodes[].items[].markerColor\",\"document.nodes[].items[].markerStyle\",\"document.nodes[].items[].connectorColor\",\"document.nodes[].items[].connectorVariant\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-block-exists\",\"target-timeline-item-exists\"]},{\"operationId\":\"timeline.item.remove\",\"title\":\"Remove timeline item\",\"scope\":\"templating\",\"targetKind\":\"timelineItem\",\"target\":{\"kind\":\"timelineItem\",\"resolver\":\"rich-timeline-item-by-block-id-and-item-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"timelineBlockId\"],\"properties\":{\"timelineBlockId\":{\"type\":\"string\"},\"itemId\":{\"type\":\"string\"},\"itemIndex\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"rich-content-timeline-item-remove\",\"handlerContract\":{\"reads\":[\"document.nodes[]\",\"document.nodes[].items[]\"],\"writes\":[\"document.nodes[].items[]\"],\"identityKeys\":[\"document.nodes[].id\",\"document.nodes[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"timelineBlockId\"],\"properties\":{\"timelineBlockId\":{\"type\":\"string\"},\"itemId\":{\"type\":\"string\"},\"itemIndex\":{\"type\":\"number\"}}},\"failureModes\":[\"timeline-not-found\",\"timeline-item-not-found\",\"ambiguous-timeline-item\"],\"description\":\"Removes a timeline item from a timeline node after explicit confirmation; stable item id is preferred over index.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"timeline-target-valid\",\"timeline-item-exists\",\"destructive-removal-confirmed\",\"document-shape-canonical\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document.nodes[].items[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-timeline-item-exists\",\"confirmation-collected\"]},{\"operationId\":\"sanitizationPolicy.set\",\"title\":\"Set rich content sanitization policy\",\"scope\":\"global\",\"targetKind\":\"sanitizationPolicy\",\"target\":{\"kind\":\"sanitizationPolicy\",\"resolver\":\"rich-content-validation-policy\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"allowHtml\":{\"const\":false},\"allowedUrlProtocols\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"allowImageDataUrls\":{\"type\":\"boolean\"},\"maxNodeDepth\":{\"type\":\"number\"},\"maxNodeCount\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"rich-content-sanitization-policy\",\"handlerContract\":{\"reads\":[\"document\",\"validateRichContentDocument\"],\"writes\":[\"document\"],\"identityKeys\":[\"document.kind\",\"document.version\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"allowHtml\":{\"const\":false},\"allowedUrlProtocols\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"allowImageDataUrls\":{\"type\":\"boolean\"},\"maxNodeDepth\":{\"type\":\"number\"},\"maxNodeCount\":{\"type\":\"number\"}}},\"failureModes\":[\"html-not-supported\",\"unsafe-protocol\",\"max-depth-too-high\",\"max-node-count-too-high\"],\"description\":\"Validates requested policy against the fixed validator guardrails; rich-content authoring remains structured JSON and does not allow arbitrary HTML.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"sanitization-policy-explicit\",\"unsafe-html-rejected\",\"unsafe-url-rejected\",\"security-change-confirmed\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"document\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"confirmation-collected\"]},{\"operationId\":\"display.mode.set\",\"title\":\"Set rich content display mode\",\"scope\":\"global\",\"targetKind\":\"display\",\"target\":{\"kind\":\"display\",\"resolver\":\"rich-content-layout-and-root-class\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"layout\":{\"enum\":[\"block\",\"inline\"]},\"rootClassName\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"set-value\",\"path\":\"layout\"},{\"kind\":\"set-value\",\"path\":\"rootClassName\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"layout-valid\",\"root-class-safe\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"layout\",\"rootClassName\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\"]}]}",
|
|
6640
|
+
"sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
|
|
6641
|
+
"contentHash": "59baf54e80f551bf1b7b42b7b19d2ffc5c1f9e2bfce8669ea0deda430c705034",
|
|
6642
|
+
"sourceKind": "component_definition",
|
|
6643
|
+
"sourceId": "praxis-rich-content",
|
|
6644
|
+
"corpusVersion": "1.0.0"
|
|
6645
|
+
},
|
|
6646
|
+
{
|
|
6647
|
+
"chunkIndex": 9,
|
|
6648
|
+
"chunkKind": "authoring_manifest",
|
|
6649
|
+
"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\":\"warning\",\"code\":\"PRC023\",\"description\":\"rootClassName must contain safe CSS class tokens.\"},{\"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.\"}]}",
|
|
6650
|
+
"sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
|
|
6651
|
+
"contentHash": "45906a044bc04a614e8ad1fcaeadb6542db97922dd0f3497164712920a8e3f16",
|
|
6652
|
+
"sourceKind": "component_definition",
|
|
6653
|
+
"sourceId": "praxis-rich-content",
|
|
6654
|
+
"corpusVersion": "1.0.0"
|
|
6655
|
+
},
|
|
6656
|
+
{
|
|
6657
|
+
"chunkIndex": 10,
|
|
6658
|
+
"chunkKind": "authoring_manifest",
|
|
6659
|
+
"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.\"]}",
|
|
6660
|
+
"sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
|
|
6661
|
+
"contentHash": "11ad0440a4142b2ff043dfc31987a1841414a0dc75769b89980233fe5f66f46b",
|
|
6662
|
+
"sourceKind": "component_definition",
|
|
6663
|
+
"sourceId": "praxis-rich-content",
|
|
6664
|
+
"corpusVersion": "1.0.0"
|
|
6665
|
+
},
|
|
6666
|
+
{
|
|
6667
|
+
"chunkIndex": 11,
|
|
6668
|
+
"chunkKind": "authoring_manifest",
|
|
6669
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-rich-content\",\"ownerPackage\":\"@praxisui/rich-content\",\"configSchemaId\":\"RichContentDocument\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"set-empty-document\",\"request\":\"Start with an empty rich content document.\",\"operationId\":\"document.set\",\"params\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[]},\"isPositive\":true},{\"id\":\"add-text-block\",\"request\":\"Add a text block saying Welcome.\",\"operationId\":\"block.add\",\"params\":{\"type\":\"text\",\"node\":{\"id\":\"welcome\",\"type\":\"text\",\"text\":\"Welcome\"}},\"isPositive\":true},{\"id\":\"remove-obsolete-block\",\"request\":\"Remove the obsolete block.\",\"operationId\":\"block.remove\",\"target\":\"obsolete\",\"params\":{\"blockId\":\"obsolete\"},\"isPositive\":true},{\"id\":\"move-summary-before-details\",\"request\":\"Move summary before details.\",\"operationId\":\"block.order.set\",\"target\":\"summary\",\"params\":{\"blockId\":\"summary\",\"beforeBlockId\":\"details\"},\"isPositive\":true},{\"id\":\"update-title-text\",\"request\":\"Change the hero title to Customer overview.\",\"operationId\":\"text.update\",\"target\":\"hero-title\",\"params\":{\"text\":\"Customer overview\"},\"isPositive\":true},{\"id\":\"add-docs-link\",\"request\":\"Add a link to the documentation.\",\"operationId\":\"link.add\",\"params\":{\"id\":\"docs-link\",\"label\":\"Documentation\",\"href\":\"/docs\",\"target\":\"_self\"},\"isPositive\":true},{\"id\":\"reject-script-link\",\"request\":\"Add a link to javascript:alert(1).\",\"operationId\":\"link.add\",\"params\":{\"label\":\"Bad link\",\"href\":\"javascript:alert(1)\"},\"isPositive\":false},{\"id\":\"remove-docs-link\",\"request\":\"Remove the documentation link but keep its label as text.\",\"operationId\":\"link.remove\",\"target\":\"docs-link\",\"params\":{\"linkId\":\"docs-link\",\"preserveLabelAsText\":true},\"isPositive\":true},{\"id\":\"apply-profile-preset\",\"request\":\"Apply the profile summary rich-block preset.\",\"operationId\":\"preset.apply\",\"params\":{\"ref\":{\"kind\":\"rich-block\",\"namespace\":\"praxis.rich-content\",\"presetId\":\"profile-summary\",\"version\":\"1.0.0\"}},\"isPositive\":true},{\"id\":\"show-only-active-row\",\"request\":\"Show the status block only when row.active is true.\",\"operationId\":\"metadata.update\",\"target\":\"status\",\"params\":{\"blockId\":\"status\",\"visibleWhen\":{\"===\":[{\"var\":\"row.active\"},true]}},\"isPositive\":true},{\"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},{\"id\":\"make-timeline-prominent\",\"request\":\"Make the activity timeline read as a prominent hero process.\",\"operationId\":\"timeline.node.update\",\"target\":\"activity\",\"params\":{\"timelineBlockId\":\"activity\",\"emphasis\":\"hero\",\"density\":\"comfortable\",\"textAppearance\":\"prominent\"},\"isPositive\":true},{\"id\":\"add-created-timeline-item\",\"request\":\"Add a Created item to the activity timeline.\",\"operationId\":\"timeline.item.add\",\"target\":\"activity\",\"params\":{\"timelineBlockId\":\"activity\",\"item\":{\"id\":\"created\",\"title\":\"Created\",\"badge\":\"Done\"}},\"isPositive\":true},{\"id\":\"reject-unknown-timeline-field\",\"request\":\"Set a custom script field on a timeline item.\",\"operationId\":\"timeline.item.update\",\"target\":\"activity.created\",\"params\":{\"timelineBlockId\":\"activity\",\"itemId\":\"created\",\"field\":\"script\",\"value\":\"alert(1)\"},\"isPositive\":false},{\"id\":\"reject-html-policy\",\"request\":\"Allow arbitrary HTML in this rich content document.\",\"operationId\":\"sanitizationPolicy.set\",\"params\":{\"allowHtml\":true},\"isPositive\":false},{\"id\":\"compact-inline-layout\",\"request\":\"Render this rich content inline with root class status-line.\",\"operationId\":\"display.mode.set\",\"params\":{\"layout\":\"inline\",\"rootClassName\":\"status-line\"},\"isPositive\":true}]}",
|
|
6670
|
+
"sourcePointer": "projects/praxis-rich-content/src/lib/ai/praxis-rich-content-authoring-manifest.ts",
|
|
6671
|
+
"contentHash": "ad58ba2be25fa7d0e4eb9f9435229b744d51442712663f54bc6dfedb2b3d18a5",
|
|
6672
|
+
"sourceKind": "component_definition",
|
|
6673
|
+
"sourceId": "praxis-rich-content",
|
|
6674
|
+
"corpusVersion": "1.0.0"
|
|
6675
|
+
},
|
|
6676
|
+
{
|
|
6677
|
+
"chunkIndex": 12,
|
|
6578
6678
|
"chunkKind": "recipe",
|
|
6579
|
-
"content": "{\
|
|
6679
|
+
"content": "{\"_comment\":\"Recipe for @praxisui/rich-content. Use RichContentDocument for governed presentation, policy notes, operational summaries, host-mediated action cards, timelines and AI-readable explanations.\",\"templateMeta\":{\"registryKey\":\"praxis-rich-content\",\"variantId\":\"knowledge-surface\",\"description\":\"Cria superfícies editoriais portáveis com RichContentDocument, incluindo blocos governados como actionCard, lookupCard e formLauncher.\",\"useWhen\":\"Create reusable rich presentation surfaces and governed editorial action surfaces that can be embedded in Dynamic Page, Tabs, Dialog, Stepper, List expansion or Page Builder.\",\"examplePrompts\":[\"create a rich content policy card\",\"show operational notes with metrics and timeline\",\"generate a reusable knowledge surface for agents\",\"create a governed action card for a host-mediated workflow\",\"show a related record summary with governed action\"]},\"authoringGuidance\":[\"Use document.kind \\\"praxis.rich-content\\\" and version \\\"1.0.0\\\".\",\"Use document.nodes for block layout surfaces and nodes for inline compact status surfaces.\",\"Use context plus *Expr properties when text, badges, metrics or progress should resolve from host state.\",\"Use actionButton, lookupCard, relatedRecord, formLauncher or actionCard when the host must mediate an action instead of embedding handlers in the document.\",\"Use action.confirmMessage when the workflow requires confirmation; the host must provide hostCapabilities.confirmAction and the runtime fails closed without dispatch if confirmation is rejected or unavailable.\",\"Use card variant/tone/size/orientation/media/interaction when the authoring intent is a semantic surface, not a host-authored wrapper.\",\"Use rich-content for presentation and explanation only; use table, list or dynamic-form for editable business data.\",\"Prefer portable nodes such as card, callout, recordSummary, relatedRecord, actionCard, compose, text, icon, badge, metric, progress, mediaBlock, avatar and timeline.\"],\"inputs\":{\"layout\":\"block\",\"rootClassName\":\"mission-knowledge-surface\",\"context\":{\"mission\":{\"name\":\"Operation Dawn Gate\",\"owner\":\"Ariadne Ops\",\"readiness\":82,\"risk\":\"Elevated\",\"region\":\"South Atlantic\"},\"policy\":{\"owner\":\"Platform Governance\",\"version\":\"2026.04\",\"source\":\"Quickstart reference contract\"}},\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"card\",\"titleExpr\":\"${mission.name}\",\"subtitleExpr\":\"${policy.source}\",\"variant\":\"elevated\",\"tone\":\"info\",\"size\":\"lg\",\"orientation\":\"horizontal\",\"media\":{\"kind\":\"icon\",\"icon\":\"psychology\",\"label\":\"AI-authored semantic decision surface\",\"placement\":\"leading\"},\"accessibility\":{\"role\":\"article\",\"ariaLabel\":\"Mission knowledge surface\"},\"content\":[{\"type\":\"compose\",\"wrap\":true,\"gap\":\"sm\",\"items\":[{\"type\":\"badge\",\"labelExpr\":\"${mission.region}\"},{\"type\":\"badge\",\"labelExpr\":\"${mission.risk}\"},{\"type\":\"badge\",\"labelExpr\":\"${policy.version}\"}]},{\"type\":\"text\",\"text\":\"Use rich content when the page needs governed explanation, operational notes or agent-readable context without inventing a one-off Angular template.\"},{\"type\":\"compose\",\"wrap\":true,\"gap\":\"lg\",\"items\":[{\"type\":\"metric\",\"label\":\"Readiness\",\"valueExpr\":\"${mission.readiness}\",\"captionExpr\":\"${mission.owner}\"},{\"type\":\"progress\",\"label\":\"Execution confidence\",\"valueExpr\":\"${mission.readiness}\",\"max\":100}]}]},{\"type\":\"mediaBlock\",\"avatar\":{\"type\":\"avatar\",\"initials\":\"AI\",\"name\":\"AI recipe\"},\"title\":{\"type\":\"text\",\"text\":\"Agent authoring note\"},\"subtitle\":{\"type\":\"text\",\"text\":\"Rich content is presentation metadata. Use it for policy, summaries, timelines and explanations; use forms and tables for editable business data.\"},\"meta\":{\"type\":\"badge\",\"label\":\"copyable JSON\"},\"trailing\":[{\"type\":\"icon\",\"icon\":\"psychology\",\"ariaLabel\":\"AI ready\"}]},{\"type\":\"relatedRecord\",\"title\":\"Related approval owner\",\"subtitleExpr\":\"${policy.owner}\",\"relationLabel\":\"Policy owner\",\"metaExpr\":\"${policy.version}\",\"ctaLabel\":\"Open related owner\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"briefing.inspect\",\"confirmMessage\":\"Confirm opening the governed briefing package?\"},\"fields\":[{\"label\":\"Source\",\"valueExpr\":\"${policy.source}\",\"hint\":\"Resolved from the same portable document context.\"}],\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Escalate owner review\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"briefing.escalate\"}}]},{\"type\":\"actionCard\",\"title\":\"Open governed briefing\",\"subtitleExpr\":\"${policy.owner}\",\"message\":\"Use actionCard when the host must run a governed workflow from a portable editorial document.\",\"metaExpr\":\"${policy.version}\",\"ctaLabel\":\"Inspect briefing\",\"variant\":\"raised\",\"color\":\"primary\",\"action\":{\"actionId\":\"briefing.inspect\",\"confirmMessage\":\"Confirm opening the governed briefing package?\"},\"secondaryActions\":[{\"type\":\"actionButton\",\"label\":\"Escalate review\",\"variant\":\"stroked\",\"action\":{\"actionId\":\"briefing.escalate\"}}]},{\"type\":\"timeline\",\"title\":\"Knowledge lifecycle\",\"orientation\":\"horizontal\",\"order\":\"reverse\",\"position\":\"alternate\",\"connectorVariant\":\"dashed\",\"markerVariant\":\"number\",\"items\":[{\"icon\":\"schema\",\"title\":\"Contract discovered\",\"subtitle\":\"Read source metadata and decide whether the surface is data, action or explanation.\",\"meta\":\"schemas.filtered + recipes\",\"opposite\":\"1. Discover\",\"badge\":\"source\"},{\"icon\":\"article\",\"title\":\"Briefing authored\",\"subtitle\":\"Render cards, metrics, progress and guidance with one RichContentDocument.\",\"meta\":\"praxis-rich-content\",\"opposite\":\"2. Author\",\"badge\":\"runtime\"},{\"icon\":\"open_in_new\",\"title\":\"Surface reused\",\"subtitle\":\"Embed the same document in a tab, dialog, stepper, list expansion or dashboard cell.\",\"meta\":\"Dynamic Page composition\",\"opposite\":\"3. Reuse\",\"badge\":\"portable\"}]}]}},\"inlineExample\":{\"layout\":\"inline\",\"context\":{\"status\":{\"label\":\"Governed knowledge surface\",\"phase\":\"Reusable\"}},\"nodes\":[{\"type\":\"icon\",\"icon\":\"verified\",\"ariaLabel\":\"Verified\"},{\"type\":\"text\",\"textExpr\":\"${status.label}\"},{\"type\":\"badge\",\"labelExpr\":\"${status.phase}\"}]}}",
|
|
6580
6680
|
"sourcePointer": "examples/ai-recipes/praxis-rich-content.json",
|
|
6581
|
-
"contentHash": "
|
|
6681
|
+
"contentHash": "d281ad36c6e3352b062e5eb7b98a037f6c75fb7d2c063fc5f71e893ed77e1dc7",
|
|
6582
6682
|
"sourceKind": "component_definition",
|
|
6583
6683
|
"sourceId": "praxis-rich-content",
|
|
6584
6684
|
"corpusVersion": "1.0.0"
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/rich-content",
|
|
3
|
-
"version": "9.0.0-beta.
|
|
3
|
+
"version": "9.0.0-beta.78",
|
|
4
4
|
"description": "Rich content rendering and authoring primitives for Praxis UI surfaces, including semantic blocks and page-builder integration.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
7
7
|
"@angular/core": "^21.0.0",
|
|
8
|
-
"@praxisui/core": "^9.0.0-beta.
|
|
8
|
+
"@praxisui/core": "^9.0.0-beta.78",
|
|
9
9
|
"@angular/forms": "^21.0.0",
|
|
10
10
|
"rxjs": "~7.8.0"
|
|
11
11
|
},
|