{
  "schemaVersion": "1.0.0",
  "generatedAt": "2026-08-26T04:13:47.852Z",
  "packageName": "@praxisui/stepper",
  "packageVersion": "9.0.23",
  "sourceRegistry": "praxis-component-registry-ingestion",
  "sourceRegistryVersion": "1.0.0",
  "componentCount": 1,
  "components": {
    "praxis-stepper": {
      "id": "praxis-stepper",
      "description": "Stepper configurável (horizontal/vertical/linear) com passos e conteúdo dinâmico.",
      "inputs": [
        {
          "name": "stepperId",
          "type": "string",
          "required": false,
          "description": "Identificador para persistência (obrigatório)",
          "label": "ID do Stepper"
        },
        {
          "name": "componentInstanceId",
          "type": "string",
          "required": false,
          "description": "Identificador opcional para múltiplas instâncias na mesma rota",
          "label": "ID da instância"
        },
        {
          "name": "config",
          "type": "StepperMetadata",
          "required": false,
          "description": "Configuração JSON com passos, aparência, densidade, classes CSS e navegação",
          "label": "Configuração"
        },
        {
          "name": "selectedIndex",
          "type": "number",
          "required": false,
          "label": "[(selectedIndex)] Índice selecionado"
        },
        {
          "name": "selectedIndexInput",
          "type": "number",
          "required": false,
          "label": "Índice selecionado (legacy)"
        },
        {
          "name": "disableRippleInput",
          "type": "boolean",
          "required": false,
          "label": "Desabilitar ripple",
          "default": false
        },
        {
          "name": "enableCustomization",
          "type": "boolean",
          "required": false,
          "description": "Exibe controles de customização e assistente AI no runtime",
          "label": "Modo de customização",
          "default": false
        },
        {
          "name": "labelPosition",
          "type": "'bottom' | 'end'",
          "required": false,
          "label": "Posição do rótulo (horizontal)"
        },
        {
          "name": "color",
          "type": "ThemePalette",
          "required": false,
          "label": "Cor (M2)"
        },
        {
          "name": "serverValidate",
          "type": "(args) => Promise<{ ok: boolean; fieldErrors?: Record<string,string[]>; formErrors?: string[] }>",
          "required": false,
          "label": "Validação remota (opt-in)"
        },
        {
          "name": "stepperContext",
          "type": "Record<string, any>",
          "required": false,
          "description": "Contexto compartilhado para widgets internos",
          "label": "Contexto"
        }
      ],
      "outputs": [
        {
          "name": "selectionChange",
          "type": "any",
          "required": false,
          "label": "Troca de seleção"
        },
        {
          "name": "selectedIndexChange",
          "type": "number",
          "required": false,
          "label": "Índice selecionado (change)"
        },
        {
          "name": "animationDone",
          "type": "void",
          "required": false,
          "label": "Animação concluída"
        },
        {
          "name": "widgetEvent",
          "type": "WidgetEventEnvelope",
          "required": false,
          "label": "Evento interno"
        },
        {
          "name": "stepFormReady",
          "type": "{ stepId?: string; stepIndex: number; event: FormReadyEvent }",
          "required": false,
          "label": "Form ready (por etapa)"
        },
        {
          "name": "stepFormValueChange",
          "type": "{ stepId?: string; stepIndex: number; event: FormValueChangeEvent }",
          "required": false,
          "label": "Form value change (por etapa)"
        },
        {
          "name": "stepReactiveDeterminationExecuted",
          "type": "{ stepId?: string; stepIndex: number; event: ReactiveDeterminationExecutionEvent }",
          "required": false,
          "label": "Evidencia metadata-only por etapa"
        },
        {
          "name": "stepReactiveDeterminationPendingChange",
          "type": "{ stepId?: string; stepIndex: number; pending: boolean }",
          "required": false,
          "label": "Estado de estabilizacao por etapa"
        },
        {
          "name": "reactiveDeterminationStabilityChange",
          "type": "StepperReactiveDeterminationStabilityChange",
          "required": false,
          "label": "Estabilidade agregada: pending, settled-satisfied ou settled-unsatisfied"
        }
      ],
      "configSchemaId": null,
      "selector": "praxis-stepper",
      "friendlyName": "Praxis Stepper",
      "icon": "format_list_numbered",
      "tags": [
        "widget",
        "container",
        "stepper",
        "configurable"
      ],
      "lib": "@praxisui/stepper",
      "layoutHints": {
        "recommendedCols": 8,
        "recommendedRows": 6,
        "minCols": 4,
        "minRows": 4
      },
      "actions": [
        {
          "id": "select-step",
          "label": "Selecionar etapa",
          "icon": "flag",
          "description": "Emite alteração do índice selecionado",
          "emit": "selectedIndexChange",
          "payloadSchema": {
            "type": "number",
            "example": 0
          },
          "scope": "any"
        },
        {
          "id": "step-change",
          "label": "Troca de etapa",
          "icon": "swap_vert",
          "description": "Emite evento ao trocar de etapa",
          "emit": "selectionChange",
          "payloadSchema": {
            "type": "object",
            "properties": {
              "selectedIndex": {
                "type": "number",
                "description": "Índice selecionado"
              },
              "previouslySelectedIndex": {
                "type": "number",
                "description": "Índice anterior"
              }
            },
            "required": [
              "selectedIndex"
            ],
            "example": {
              "selectedIndex": 1,
              "previouslySelectedIndex": 0
            }
          },
          "scope": "any"
        }
      ],
      "configEditor": {
        "component": "[ref:PraxisStepperWidgetConfigEditor]",
        "title": "Configure stepper"
      },
      "authoringManifestRef": {
        "componentId": "praxis-stepper",
        "source": "PRAXIS_STEPPER_AUTHORING_MANIFEST"
      },
      "source": "projects/praxis-stepper/src/lib/praxis-stepper.metadata.ts",
      "exportName": "PRAXIS_STEPPER_COMPONENT_METADATA",
      "componentCapabilities": [
        {
          "path": "orientation",
          "category": "layout",
          "valueKind": "enum",
          "description": "Orientation of the stepper."
        },
        {
          "path": "linear",
          "category": "behavior",
          "valueKind": "boolean",
          "description": "Require sequential completion of steps."
        },
        {
          "path": "headerPosition",
          "category": "layout",
          "valueKind": "enum",
          "description": "Header position (vertical only)."
        },
        {
          "path": "labelPosition",
          "category": "layout",
          "valueKind": "enum",
          "description": "Label position for horizontal stepper."
        },
        {
          "path": "color",
          "category": "appearance",
          "valueKind": "enum",
          "description": "Material color palette."
        },
        {
          "path": "disableRipple",
          "category": "behavior",
          "valueKind": "boolean",
          "description": "Disable ripple for headers."
        },
        {
          "path": "animationDuration",
          "category": "behavior",
          "valueKind": "string",
          "description": "Animation duration, e.g. 300ms."
        },
        {
          "path": "selectedIndex",
          "category": "behavior",
          "valueKind": "number",
          "description": "Current step index."
        },
        {
          "path": "density",
          "category": "appearance",
          "valueKind": "enum",
          "description": "Density preset."
        },
        {
          "path": "stepperClass",
          "category": "appearance",
          "valueKind": "string",
          "description": "CSS class for stepper root."
        },
        {
          "path": "headerClass",
          "category": "appearance",
          "valueKind": "string",
          "description": "CSS class for header."
        },
        {
          "path": "contentClass",
          "category": "appearance",
          "valueKind": "string",
          "description": "CSS class for content area."
        },
        {
          "path": "appearance",
          "category": "appearance",
          "valueKind": "object",
          "description": "Appearance settings."
        },
        {
          "path": "appearance.themeClass",
          "category": "appearance",
          "valueKind": "string",
          "description": "Theme CSS class for root."
        },
        {
          "path": "appearance.tokens",
          "category": "appearance",
          "valueKind": "object",
          "description": "Token map for theme overrides."
        },
        {
          "path": "appearance.tokens.[token]",
          "category": "appearance",
          "valueKind": "string",
          "description": "Token value (CSS value or var).",
          "safetyNotes": "Token keys follow mat.stepper-overrides."
        },
        {
          "path": "appearance.icons",
          "category": "appearance",
          "valueKind": "object",
          "description": "Stepper icon overrides."
        },
        {
          "path": "appearance.icons.number",
          "category": "appearance",
          "valueKind": "string",
          "description": "Icon for number state."
        },
        {
          "path": "appearance.icons.done",
          "category": "appearance",
          "valueKind": "string",
          "description": "Icon for done state."
        },
        {
          "path": "appearance.icons.edit",
          "category": "appearance",
          "valueKind": "string",
          "description": "Icon for edit state."
        },
        {
          "path": "appearance.icons.error",
          "category": "appearance",
          "valueKind": "string",
          "description": "Icon for error state."
        },
        {
          "path": "appearance.iconsSet",
          "category": "appearance",
          "valueKind": "enum",
          "description": "Icon set class name (Material Symbols)."
        },
        {
          "path": "navigation",
          "category": "navigation",
          "valueKind": "object",
          "description": "Footer navigation config."
        },
        {
          "path": "navigation.visible",
          "category": "navigation",
          "valueKind": "boolean",
          "description": "Show navigation buttons."
        },
        {
          "path": "navigation.prevLabel",
          "category": "navigation",
          "valueKind": "string",
          "description": "Previous button label."
        },
        {
          "path": "navigation.nextLabel",
          "category": "navigation",
          "valueKind": "string",
          "description": "Next button label."
        },
        {
          "path": "navigation.prevIcon",
          "category": "navigation",
          "valueKind": "string",
          "description": "Previous button icon."
        },
        {
          "path": "navigation.nextIcon",
          "category": "navigation",
          "valueKind": "string",
          "description": "Next button icon."
        },
        {
          "path": "navigation.variant",
          "category": "navigation",
          "valueKind": "enum",
          "description": "Button variant."
        },
        {
          "path": "navigation.color",
          "category": "navigation",
          "valueKind": "enum",
          "description": "Button color."
        },
        {
          "path": "navigation.align",
          "category": "navigation",
          "valueKind": "enum",
          "description": "Navigation alignment."
        },
        {
          "path": "steps",
          "category": "steps",
          "valueKind": "array",
          "description": "Step definitions."
        },
        {
          "path": "steps[]",
          "category": "steps",
          "valueKind": "object",
          "description": "Step definition."
        },
        {
          "path": "steps[].id",
          "category": "steps",
          "valueKind": "string",
          "description": "Step id."
        },
        {
          "path": "steps[].label",
          "category": "steps",
          "valueKind": "string",
          "description": "Step label."
        },
        {
          "path": "steps[].description",
          "category": "steps",
          "valueKind": "string",
          "description": "Step description."
        },
        {
          "path": "steps[].optional",
          "category": "steps",
          "valueKind": "boolean",
          "description": "Mark step as optional."
        },
        {
          "path": "steps[].editable",
          "category": "steps",
          "valueKind": "boolean",
          "description": "Allow editing completed steps."
        },
        {
          "path": "steps[].completed",
          "category": "steps",
          "valueKind": "boolean",
          "description": "Force completed state."
        },
        {
          "path": "steps[].hasError",
          "category": "steps",
          "valueKind": "boolean",
          "description": "Force error state."
        },
        {
          "path": "steps[].stateIcon",
          "category": "steps",
          "valueKind": "string",
          "description": "Custom state icon key."
        },
        {
          "path": "steps[].state",
          "category": "steps",
          "valueKind": "string",
          "description": "Custom state name for matStepperIcon."
        },
        {
          "path": "steps[].errorMessage",
          "category": "steps",
          "valueKind": "string",
          "description": "Error message shown in header."
        },
        {
          "path": "steps[].ariaLabel",
          "category": "accessibility",
          "valueKind": "string",
          "description": "ARIA label for step header."
        },
        {
          "path": "steps[].ariaLabelledby",
          "category": "accessibility",
          "valueKind": "string",
          "description": "ARIA labelledby for step header."
        },
        {
          "path": "steps[].form",
          "category": "steps",
          "valueKind": "object",
          "description": "Optional Dynamic Form config for step."
        },
        {
          "path": "steps[].form.resourcePath",
          "category": "steps",
          "valueKind": "string",
          "description": "Resource path for Dynamic Form."
        },
        {
          "path": "steps[].form.resourceId",
          "category": "steps",
          "valueKind": "string",
          "description": "Resource id for Dynamic Form (string or number).",
          "example": "123",
          "safetyNotes": "Accepts string or number."
        },
        {
          "path": "steps[].form.mode",
          "category": "steps",
          "valueKind": "enum",
          "description": "Form mode."
        },
        {
          "path": "steps[].form.config",
          "category": "steps",
          "valueKind": "object",
          "description": "FormConfig for Dynamic Form.",
          "safetyNotes": "Use the form catalog for nested paths and FieldMetadata details."
        },
        {
          "path": "steps[].form.config.editorialContext",
          "category": "steps",
          "valueKind": "object",
          "description": "Contexto editorial compartilhado entre blocos hospedados pelo Dynamic Form da etapa."
        },
        {
          "path": "steps[].form.config.formBlocksBefore",
          "category": "steps",
          "valueKind": "object",
          "description": "RichContentDocument hospedado antes do formulario da etapa."
        },
        {
          "path": "steps[].form.config.formBlocksBeforeActions",
          "category": "steps",
          "valueKind": "object",
          "description": "RichContentDocument hospedado depois das secoes e antes da area principal de acoes do formulario da etapa."
        },
        {
          "path": "steps[].form.config.formBlocksAfter",
          "category": "steps",
          "valueKind": "object",
          "description": "RichContentDocument hospedado depois do formulario inteiro da etapa."
        },
        {
          "path": "steps[].form.schemaSource",
          "category": "steps",
          "valueKind": "enum",
          "description": "Schema source for Dynamic Form."
        },
        {
          "path": "steps[].form.formId",
          "category": "steps",
          "valueKind": "string",
          "description": "Form id for Dynamic Form."
        },
        {
          "path": "steps[].stepBlocksBeforeForm",
          "category": "steps",
          "valueKind": "object",
          "description": "RichContentDocument rendered before the step form."
        },
        {
          "path": "steps[].stepBlocksAfterForm",
          "category": "steps",
          "valueKind": "object",
          "description": "RichContentDocument rendered after the step form."
        },
        {
          "path": "steps[].widgets",
          "category": "steps",
          "valueKind": "array",
          "description": "Advanced host-owned WidgetDefinition list rendered after canonical rich content.",
          "safetyNotes": "Use only for embedded components that cannot be represented as RichContentDocument."
        },
        {
          "path": "steps[].widgets[]",
          "category": "steps",
          "valueKind": "object",
          "description": "Advanced WidgetDefinition item."
        },
        {
          "path": "steps[].widgets[].id",
          "category": "steps",
          "valueKind": "enum",
          "description": "Component registry id for advanced widget.",
          "safetyNotes": "Use ids registered in ComponentMetadataRegistry. Do not use widgets for step editorial copy/cards."
        },
        {
          "path": "steps[].widgets[].inputs",
          "category": "steps",
          "valueKind": "object",
          "description": "Inputs bound into the advanced widget instance."
        }
      ],
      "componentCapabilityNotes": [
        "steps[] should be merged by id or label to avoid replacing all steps.",
        "steps[].form.config uses FormConfig (see form catalog) and may include sections/actions/fieldMetadata.",
        "steps[].form.config tambem pode usar a surface editorial do dynamic-form: formBlocksBefore, formBlocksBeforeActions, formBlocksAfter e editorialContext como RichContentDocument.",
        "Use steps[].stepBlocksBeforeForm and steps[].stepBlocksAfterForm for editorial step content; both are RichContentDocument surfaces rendered by @praxisui/rich-content.",
        "steps[].widgets is reserved for advanced embedded components that do not have a canonical rich-content representation.",
        "appearance.tokens is a free-form map; host may validate/sanitize.",
        "When editing steps[].form.config.fieldMetadata, use FieldMetadata base if no controlType catalog exists."
      ],
      "componentContext": {
        "version": "v1",
        "optionsByPath": {
          "orientation": {
            "mode": "enum",
            "options": [
              {
                "value": "horizontal",
                "label": "Horizontal"
              },
              {
                "value": "vertical",
                "label": "Vertical"
              }
            ]
          },
          "headerPosition": {
            "mode": "enum",
            "options": [
              {
                "value": "top",
                "label": "Top"
              },
              {
                "value": "bottom",
                "label": "Bottom"
              }
            ]
          },
          "labelPosition": {
            "mode": "enum",
            "options": [
              {
                "value": "bottom",
                "label": "Bottom"
              },
              {
                "value": "end",
                "label": "End"
              }
            ]
          },
          "density": {
            "mode": "enum",
            "options": [
              {
                "value": "default",
                "label": "Default"
              },
              {
                "value": "comfortable",
                "label": "Comfortable"
              },
              {
                "value": "compact",
                "label": "Compact"
              }
            ]
          },
          "color": {
            "mode": "enum",
            "options": [
              {
                "value": "primary",
                "label": "Primary"
              },
              {
                "value": "accent",
                "label": "Accent"
              },
              {
                "value": "warn",
                "label": "Warn"
              }
            ]
          },
          "navigation.variant": {
            "mode": "enum",
            "options": [
              {
                "value": "basic",
                "label": "Basic"
              },
              {
                "value": "flat",
                "label": "Flat"
              },
              {
                "value": "stroked",
                "label": "Stroked"
              },
              {
                "value": "raised",
                "label": "Raised"
              }
            ]
          },
          "navigation.align": {
            "mode": "enum",
            "options": [
              {
                "value": "start",
                "label": "Start"
              },
              {
                "value": "center",
                "label": "Center"
              },
              {
                "value": "end",
                "label": "End"
              },
              {
                "value": "space-between",
                "label": "Space between"
              }
            ]
          },
          "navigation.color": {
            "mode": "enum",
            "options": [
              {
                "value": "primary",
                "label": "Primary"
              },
              {
                "value": "accent",
                "label": "Accent"
              },
              {
                "value": "warn",
                "label": "Warn"
              }
            ]
          },
          "steps[].form.mode": {
            "mode": "enum",
            "options": [
              {
                "value": "create",
                "label": "Create"
              },
              {
                "value": "edit",
                "label": "Edit"
              },
              {
                "value": "view",
                "label": "View"
              }
            ]
          },
          "steps[].form.schemaSource": {
            "mode": "enum",
            "options": [
              {
                "value": "resource",
                "label": "Resource"
              },
              {
                "value": "filter",
                "label": "Filter"
              }
            ]
          },
          "appearance.iconsSet": {
            "mode": "enum",
            "options": [
              {
                "value": "material-symbols-outlined",
                "label": "Outlined"
              },
              {
                "value": "material-symbols-rounded",
                "label": "Rounded"
              },
              {
                "value": "material-symbols-sharp",
                "label": "Sharp"
              }
            ]
          }
        },
        "actionCatalog": [
          {
            "id": "orientation.set",
            "intentExamples": [
              "orientation",
              "horizontal",
              "vertical"
            ],
            "patchTemplate": {
              "orientation": "{{value}}"
            }
          },
          {
            "id": "headerPosition.set",
            "intentExamples": [
              "header position",
              "header"
            ],
            "patchTemplate": {
              "headerPosition": "{{value}}"
            }
          },
          {
            "id": "labelPosition.set",
            "intentExamples": [
              "label position",
              "label align"
            ],
            "patchTemplate": {
              "labelPosition": "{{value}}"
            }
          },
          {
            "id": "density.set",
            "intentExamples": [
              "density",
              "compact",
              "comfortable"
            ],
            "patchTemplate": {
              "density": "{{value}}"
            }
          },
          {
            "id": "color.set",
            "intentExamples": [
              "color",
              "theme color"
            ],
            "patchTemplate": {
              "color": "{{value}}"
            }
          },
          {
            "id": "linear.enable",
            "intentExamples": [
              "linear",
              "sequential",
              "require order"
            ],
            "patchTemplate": {
              "linear": true
            }
          },
          {
            "id": "linear.disable",
            "intentExamples": [
              "non linear",
              "free navigation"
            ],
            "patchTemplate": {
              "linear": false
            }
          },
          {
            "id": "selectedIndex.set",
            "intentExamples": [
              "select step",
              "active step",
              "selected index"
            ],
            "patchTemplate": {
              "selectedIndex": "{{value}}"
            }
          },
          {
            "id": "navigation.visible.enable",
            "intentExamples": [
              "show navigation",
              "show buttons"
            ],
            "patchTemplate": {
              "navigation": {
                "visible": true
              }
            }
          },
          {
            "id": "navigation.visible.disable",
            "intentExamples": [
              "hide navigation",
              "hide buttons"
            ],
            "patchTemplate": {
              "navigation": {
                "visible": false
              }
            }
          },
          {
            "id": "navigation.labels.set",
            "intentExamples": [
              "next label",
              "previous label",
              "navigation labels"
            ],
            "patchTemplate": {
              "navigation": {
                "prevLabel": "{{params.prev}}",
                "nextLabel": "{{params.next}}"
              }
            }
          },
          {
            "id": "step.add",
            "intentExamples": [
              "add step",
              "new step",
              "create step"
            ],
            "patchTemplate": {
              "steps": [
                {
                  "id": "{{target}}",
                  "label": "{{value}}"
                }
              ]
            }
          },
          {
            "id": "step.label.set",
            "intentExamples": [
              "rename step",
              "step label"
            ],
            "patchTemplate": {
              "steps": [
                {
                  "id": "{{target}}",
                  "label": "{{value}}"
                }
              ]
            }
          },
          {
            "id": "step.description.set",
            "intentExamples": [
              "step description",
              "description"
            ],
            "patchTemplate": {
              "steps": [
                {
                  "id": "{{target}}",
                  "description": "{{value}}"
                }
              ]
            }
          },
          {
            "id": "step.optional.enable",
            "intentExamples": [
              "optional step",
              "not required"
            ],
            "patchTemplate": {
              "steps": [
                {
                  "id": "{{target}}",
                  "optional": true
                }
              ]
            }
          },
          {
            "id": "step.optional.disable",
            "intentExamples": [
              "required step"
            ],
            "patchTemplate": {
              "steps": [
                {
                  "id": "{{target}}",
                  "optional": false
                }
              ]
            }
          },
          {
            "id": "step.completed.set",
            "intentExamples": [
              "mark completed",
              "completed step"
            ],
            "patchTemplate": {
              "steps": [
                {
                  "id": "{{target}}",
                  "completed": "{{value}}"
                }
              ]
            }
          },
          {
            "id": "step.error.set",
            "intentExamples": [
              "mark error",
              "step error"
            ],
            "patchTemplate": {
              "steps": [
                {
                  "id": "{{target}}",
                  "hasError": "{{value}}"
                }
              ]
            }
          },
          {
            "id": "step.form.resourcePath.set",
            "intentExamples": [
              "form resource",
              "resource path",
              "step form"
            ],
            "patchTemplate": {
              "steps": [
                {
                  "id": "{{target}}",
                  "form": {
                    "resourcePath": "{{value}}"
                  }
                }
              ]
            }
          },
          {
            "id": "step.form.mode.set",
            "intentExamples": [
              "form mode",
              "create mode",
              "edit mode",
              "view mode"
            ],
            "patchTemplate": {
              "steps": [
                {
                  "id": "{{target}}",
                  "form": {
                    "mode": "{{value}}"
                  }
                }
              ]
            }
          },
          {
            "id": "step.form.formId.set",
            "intentExamples": [
              "form id",
              "form reference"
            ],
            "patchTemplate": {
              "steps": [
                {
                  "id": "{{target}}",
                  "form": {
                    "formId": "{{value}}"
                  }
                }
              ]
            }
          }
        ],
        "fieldResolvers": {
          "steps[]": [
            "id",
            "label"
          ]
        },
        "hints": [
          "Use steps[].id or steps[].label as merge keys; avoid array indexes.",
          "Step form config merges by id; avoid replacing entire steps array.",
          "Selected index expects a zero-based number.",
          "DOC: Widget purpose: stepper with ordered steps and optional per-step forms.",
          "DOC: Host inputs: stepperId (required) and config (optional).",
          "DOC: When config is provided, steps[] should be present; each step requires label.",
          "DOC: Optional step.form embeds a dynamic form; use form.resourcePath + form.config as needed."
        ]
      },
      "authoringManifest": {
        "schemaVersion": "1.0.0",
        "componentId": "praxis-stepper",
        "ownerPackage": "@praxisui/stepper",
        "configSchemaId": "StepperMetadata",
        "manifestVersion": "1.0.0",
        "runtimeInputs": [
          {
            "name": "config",
            "type": "StepperMetadata",
            "description": "Canonical multi-step flow configuration."
          },
          {
            "name": "stepperId",
            "type": "string",
            "description": "Stable id used to derive stepper config persistence scope."
          },
          {
            "name": "componentInstanceId",
            "type": "string",
            "description": "Optional instance discriminator for persistence scope."
          },
          {
            "name": "selectedIndex",
            "type": "number",
            "description": "Selected step index, compatible with two-way binding."
          },
          {
            "name": "serverValidate",
            "type": "function",
            "description": "Optional host-owned async validation gate for step progression."
          },
          {
            "name": "stepperContext",
            "type": "Record<string, any>",
            "description": "Context passed to nested widgets and rich content."
          },
          {
            "name": "enableCustomization",
            "type": "boolean",
            "description": "Enables Settings Panel authoring surfaces."
          }
        ],
        "editableTargets": [
          {
            "kind": "step",
            "resolver": "step-by-id-or-label",
            "description": "A step in config.steps[]."
          },
          {
            "kind": "stepLabel",
            "resolver": "step-by-id-or-label",
            "description": "The visible label of a step."
          },
          {
            "kind": "stepContent",
            "resolver": "step-content-by-id",
            "description": "Dynamic form, rich content or advanced widgets hosted inside a step."
          },
          {
            "kind": "navigation",
            "resolver": "stepper-navigation-config",
            "description": "Footer navigation labels, icons, variant, alignment and visibility."
          },
          {
            "kind": "completionRule",
            "resolver": "step-by-id-or-label",
            "description": "Optional/completed/error state metadata for a step."
          },
          {
            "kind": "validationGate",
            "resolver": "step-validation-by-id",
            "description": "Validation gate that controls linear navigation and remote validation delegation."
          },
          {
            "kind": "orientation",
            "resolver": "stepper-layout-config",
            "description": "Stepper orientation, header position and label position."
          }
        ],
        "operations": [
          {
            "operationId": "step.add",
            "title": "Add step",
            "scope": "global",
            "targetKind": "step",
            "target": {
              "kind": "step",
              "resolver": "steps-array",
              "ambiguityPolicy": "fail",
              "required": false
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "id",
                "label"
              ],
              "properties": {
                "id": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "optional": {
                  "type": "boolean"
                },
                "editable": {
                  "type": "boolean"
                },
                "completed": {
                  "type": "boolean"
                },
                "hasError": {
                  "type": "boolean"
                },
                "state": {
                  "type": "string"
                },
                "stateIcon": {
                  "type": "string"
                },
                "errorMessage": {
                  "type": "string"
                },
                "ariaLabel": {
                  "type": "string"
                },
                "ariaLabelledby": {
                  "type": "string"
                },
                "form": {
                  "type": "object"
                },
                "stepBlocksBeforeForm": {
                  "type": "object"
                },
                "stepBlocksAfterForm": {
                  "type": "object"
                },
                "widgets": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            },
            "effects": [
              {
                "kind": "append-unique",
                "path": "steps[]",
                "key": "id"
              }
            ],
            "destructive": false,
            "requiresConfirmation": false,
            "validators": [
              "step-id-unique",
              "step-order-deterministic",
              "step-content-valid"
            ],
            "affectedPaths": [
              "steps[]"
            ],
            "submissionImpact": "config-only",
            "preconditions": [
              "config-initialized"
            ]
          },
          {
            "operationId": "step.remove",
            "title": "Remove step",
            "scope": "layout",
            "targetKind": "step",
            "target": {
              "kind": "step",
              "resolver": "step-by-id-or-label",
              "ambiguityPolicy": "fail",
              "required": true
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "replacementStepId": {
                  "type": "string"
                }
              }
            },
            "effects": [
              {
                "kind": "compile-domain-patch",
                "handler": "stepper-step-remove",
                "handlerContract": {
                  "reads": [
                    "steps[]",
                    "selectedIndex"
                  ],
                  "writes": [
                    "steps[]",
                    "selectedIndex"
                  ],
                  "identityKeys": [
                    "steps[].id"
                  ],
                  "inputSchema": {
                    "type": "object",
                    "properties": {
                      "replacementStepId": {
                        "type": "string"
                      }
                    }
                  },
                  "failureModes": [
                    "step-not-found",
                    "replacement-step-not-found",
                    "content-removal-not-confirmed"
                  ],
                  "description": "Removes the target step by stable id and recomputes selectedIndex to preserve deterministic navigation state."
                }
              }
            ],
            "destructive": true,
            "requiresConfirmation": true,
            "validators": [
              "step-exists",
              "selected-step-removal-safe",
              "step-content-removal-confirmed"
            ],
            "affectedPaths": [
              "steps[]",
              "selectedIndex"
            ],
            "submissionImpact": "config-only",
            "preconditions": [
              "config-initialized",
              "target-step-exists",
              "confirmation-collected"
            ]
          },
          {
            "operationId": "step.label.set",
            "title": "Set step label",
            "scope": "layout",
            "targetKind": "stepLabel",
            "target": {
              "kind": "stepLabel",
              "resolver": "step-by-id-or-label",
              "ambiguityPolicy": "fail",
              "required": true
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "label"
              ],
              "properties": {
                "label": {
                  "type": "string"
                }
              }
            },
            "effects": [
              {
                "kind": "merge-by-key",
                "path": "steps[]",
                "key": "id"
              }
            ],
            "destructive": false,
            "requiresConfirmation": false,
            "validators": [
              "step-exists",
              "step-label-valid"
            ],
            "affectedPaths": [
              "steps[].label"
            ],
            "submissionImpact": "config-only",
            "preconditions": [
              "config-initialized",
              "target-step-exists"
            ]
          },
          {
            "operationId": "step.order.set",
            "title": "Reorder steps",
            "scope": "layout",
            "targetKind": "step",
            "target": {
              "kind": "step",
              "resolver": "step-by-id-or-label",
              "ambiguityPolicy": "fail",
              "required": true
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "beforeStepId"
              ],
              "properties": {
                "beforeStepId": {
                  "type": "string"
                }
              }
            },
            "effects": [
              {
                "kind": "compile-domain-patch",
                "handler": "stepper-step-reorder",
                "handlerContract": {
                  "reads": [
                    "steps[]",
                    "selectedIndex"
                  ],
                  "writes": [
                    "steps[]",
                    "selectedIndex"
                  ],
                  "identityKeys": [
                    "steps[].id"
                  ],
                  "inputSchema": {
                    "type": "object",
                    "required": [
                      "beforeStepId"
                    ],
                    "properties": {
                      "beforeStepId": {
                        "type": "string"
                      }
                    }
                  },
                  "failureModes": [
                    "step-not-found",
                    "before-step-not-found",
                    "ambiguous-step-target"
                  ],
                  "description": "Moves the target step before another stable step id and recomputes selectedIndex by preserving selected step identity."
                }
              }
            ],
            "destructive": false,
            "requiresConfirmation": false,
            "validators": [
              "step-exists",
              "step-order-deterministic",
              "selected-index-preserved"
            ],
            "affectedPaths": [
              "steps[]",
              "selectedIndex"
            ],
            "submissionImpact": "config-only",
            "preconditions": [
              "config-initialized",
              "target-step-exists"
            ]
          },
          {
            "operationId": "step.optional.set",
            "title": "Set optional state",
            "scope": "interaction",
            "targetKind": "completionRule",
            "target": {
              "kind": "completionRule",
              "resolver": "step-by-id-or-label",
              "ambiguityPolicy": "fail",
              "required": true
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "optional"
              ],
              "properties": {
                "optional": {
                  "type": "boolean"
                }
              }
            },
            "effects": [
              {
                "kind": "merge-by-key",
                "path": "steps[]",
                "key": "id"
              }
            ],
            "destructive": false,
            "requiresConfirmation": false,
            "validators": [
              "step-exists",
              "completion-rule-compatible"
            ],
            "affectedPaths": [
              "steps[].optional"
            ],
            "submissionImpact": "config-only",
            "preconditions": [
              "config-initialized",
              "target-step-exists"
            ]
          },
          {
            "operationId": "step.completed.set",
            "title": "Set completed state",
            "scope": "interaction",
            "targetKind": "completionRule",
            "target": {
              "kind": "completionRule",
              "resolver": "step-by-id-or-label",
              "ambiguityPolicy": "fail",
              "required": true
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "completed"
              ],
              "properties": {
                "completed": {
                  "type": "boolean"
                },
                "hasError": {
                  "type": "boolean"
                },
                "errorMessage": {
                  "type": "string"
                }
              }
            },
            "effects": [
              {
                "kind": "merge-by-key",
                "path": "steps[]",
                "key": "id"
              }
            ],
            "destructive": false,
            "requiresConfirmation": false,
            "validators": [
              "step-exists",
              "completion-rule-compatible",
              "linear-completion-safe"
            ],
            "affectedPaths": [
              "steps[].completed",
              "steps[].hasError",
              "steps[].errorMessage"
            ],
            "submissionImpact": "config-only",
            "preconditions": [
              "config-initialized",
              "target-step-exists"
            ]
          },
          {
            "operationId": "navigation.mode.set",
            "title": "Set navigation mode",
            "scope": "interaction",
            "targetKind": "navigation",
            "target": {
              "kind": "navigation",
              "resolver": "stepper-navigation-config",
              "ambiguityPolicy": "fail",
              "required": true
            },
            "inputSchema": {
              "type": "object",
              "properties": {
                "linear": {
                  "type": "boolean"
                },
                "visible": {
                  "type": "boolean"
                },
                "prevLabel": {
                  "type": "string"
                },
                "nextLabel": {
                  "type": "string"
                },
                "prevIcon": {
                  "type": "string"
                },
                "nextIcon": {
                  "type": "string"
                },
                "variant": {
                  "enum": [
                    "basic",
                    "flat",
                    "stroked",
                    "raised"
                  ]
                },
                "color": {
                  "enum": [
                    "primary",
                    "accent",
                    "warn"
                  ]
                },
                "align": {
                  "enum": [
                    "start",
                    "center",
                    "end",
                    "space-between"
                  ]
                }
              }
            },
            "effects": [
              {
                "kind": "merge-object",
                "path": "navigation"
              },
              {
                "kind": "set-value",
                "path": "linear"
              }
            ],
            "destructive": false,
            "requiresConfirmation": false,
            "validators": [
              "navigation-values-valid",
              "linear-navigation-valid",
              "editor-runtime-round-trip"
            ],
            "affectedPaths": [
              "navigation.visible",
              "navigation.prevLabel",
              "navigation.nextLabel",
              "navigation.prevIcon",
              "navigation.nextIcon",
              "navigation.variant",
              "navigation.color",
              "navigation.align",
              "linear"
            ],
            "submissionImpact": "config-only",
            "preconditions": [
              "config-initialized"
            ]
          },
          {
            "operationId": "orientation.set",
            "title": "Set orientation",
            "scope": "layout",
            "targetKind": "orientation",
            "target": {
              "kind": "orientation",
              "resolver": "stepper-layout-config",
              "ambiguityPolicy": "fail",
              "required": true
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "orientation"
              ],
              "properties": {
                "orientation": {
                  "enum": [
                    "horizontal",
                    "vertical"
                  ]
                },
                "headerPosition": {
                  "enum": [
                    "top",
                    "bottom"
                  ]
                },
                "labelPosition": {
                  "enum": [
                    "bottom",
                    "end"
                  ]
                },
                "density": {
                  "enum": [
                    "default",
                    "comfortable",
                    "compact"
                  ]
                }
              }
            },
            "effects": [
              {
                "kind": "set-value",
                "path": "orientation"
              },
              {
                "kind": "set-value",
                "path": "headerPosition"
              },
              {
                "kind": "set-value",
                "path": "labelPosition"
              },
              {
                "kind": "set-value",
                "path": "density"
              }
            ],
            "destructive": false,
            "requiresConfirmation": false,
            "validators": [
              "orientation-values-valid",
              "label-position-compatible",
              "editor-runtime-round-trip"
            ],
            "affectedPaths": [
              "orientation",
              "headerPosition",
              "labelPosition",
              "density"
            ],
            "submissionImpact": "config-only",
            "preconditions": [
              "config-initialized"
            ]
          },
          {
            "operationId": "validation.rule.add",
            "title": "Add validation rule",
            "scope": "rule",
            "targetKind": "validationGate",
            "target": {
              "kind": "validationGate",
              "resolver": "step-validation-by-id",
              "ambiguityPolicy": "fail",
              "required": true
            },
            "inputSchema": {
              "type": "object",
              "required": [
                "stepId",
                "rule"
              ],
              "properties": {
                "stepId": {
                  "type": "string"
                },
                "fieldName": {
                  "type": "string"
                },
                "childComponentId": {
                  "type": "string"
                },
                "rule": {
                  "type": "object"
                },
                "message": {
                  "type": "string"
                },
                "remote": {
                  "type": "boolean"
                }
              }
            },
            "effects": [
              {
                "kind": "compile-domain-patch",
                "handler": "stepper-validation-rule-upsert",
                "handlerContract": {
                  "reads": [
                    "steps[]",
                    "steps[].form",
                    "steps[].form.config",
                    "steps[].widgets",
                    "linear"
                  ],
                  "writes": [
                    "steps[].form.config",
                    "steps[].form.config.sections",
                    "steps[].form.config.fieldMetadata",
                    "steps[].hasError",
                    "steps[].errorMessage"
                  ],
                  "identityKeys": [
                    "steps[].id",
                    "steps[].form.formId",
                    "steps[].widgets[].id"
                  ],
                  "inputSchema": {
                    "type": "object",
                    "required": [
                      "stepId",
                      "rule"
                    ],
                    "properties": {
                      "stepId": {
                        "type": "string"
                      },
                      "fieldName": {
                        "type": "string"
                      },
                      "childComponentId": {
                        "type": "string"
                      },
                      "rule": {
                        "type": "object"
                      },
                      "message": {
                        "type": "string"
                      },
                      "remote": {
                        "type": "boolean"
                      }
                    }
                  },
                  "failureModes": [
                    "step-not-found",
                    "validation-target-not-found",
                    "dynamic-form-config-missing",
                    "remote-validation-requires-host-serverValidate"
                  ],
                  "description": "Projects a validation rule into the step dynamic-form config or delegates it to the host serverValidate gate without redefining child component contracts."
                }
              }
            ],
            "validators": [
              "step-exists",
              "validation-rule-target-exists",
              "validation-rule-compatible",
              "server-validation-delegated"
            ],
            "destructive": false,
            "requiresConfirmation": false,
            "affectedPaths": [
              "steps[].form.config",
              "steps[].form.config.sections",
              "steps[].form.config.fieldMetadata",
              "steps[].hasError",
              "steps[].errorMessage"
            ],
            "submissionImpact": "affects-schema-backed-data",
            "preconditions": [
              "config-initialized",
              "target-step-exists"
            ]
          },
          {
            "operationId": "step.content.set",
            "title": "Set step content",
            "scope": "layout",
            "targetKind": "stepContent",
            "target": {
              "kind": "stepContent",
              "resolver": "step-content-by-id",
              "ambiguityPolicy": "fail",
              "required": true
            },
            "inputSchema": {
              "type": "object",
              "minProperties": 1,
              "properties": {
                "id": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "optional": {
                  "type": "boolean"
                },
                "editable": {
                  "type": "boolean"
                },
                "completed": {
                  "type": "boolean"
                },
                "hasError": {
                  "type": "boolean"
                },
                "state": {
                  "type": "string"
                },
                "stateIcon": {
                  "type": "string"
                },
                "errorMessage": {
                  "type": "string"
                },
                "form": {
                  "type": "object"
                },
                "stepBlocksBeforeForm": {
                  "type": "object"
                },
                "stepBlocksAfterForm": {
                  "type": "object"
                },
                "widgets": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            },
            "effects": [
              {
                "kind": "merge-by-key",
                "path": "steps[]",
                "key": "id"
              }
            ],
            "destructive": false,
            "requiresConfirmation": false,
            "validators": [
              "step-exists",
              "step-content-valid",
              "nested-widget-contract-delegated"
            ],
            "affectedPaths": [
              "steps[].form",
              "steps[].stepBlocksBeforeForm",
              "steps[].stepBlocksAfterForm",
              "steps[].widgets"
            ],
            "submissionImpact": "affects-schema-backed-data",
            "preconditions": [
              "config-initialized",
              "target-step-exists"
            ]
          }
        ],
        "validators": [
          {
            "validatorId": "step-id-unique",
            "level": "error",
            "code": "PSTEP001",
            "description": "Step ids must be unique and stable within config.steps[]."
          },
          {
            "validatorId": "step-exists",
            "level": "error",
            "code": "PSTEP002",
            "description": "Target step must exist before applying the operation."
          },
          {
            "validatorId": "step-order-deterministic",
            "level": "error",
            "code": "PSTEP003",
            "description": "Step ordering must use stable ids, not transient array index as identity."
          },
          {
            "validatorId": "step-content-valid",
            "level": "error",
            "code": "PSTEP004",
            "description": "Step content must remain valid Dynamic Form config, RichContentDocument or WidgetDefinition[] metadata."
          },
          {
            "validatorId": "step-content-removal-confirmed",
            "level": "error",
            "code": "PSTEP005",
            "description": "Removing a step with form, rich content or widgets is destructive and requires confirmation."
          },
          {
            "validatorId": "selected-step-removal-safe",
            "level": "error",
            "code": "PSTEP006",
            "description": "Removing the selected step requires a deterministic replacement selected index or explicit confirmation."
          },
          {
            "validatorId": "selected-index-preserved",
            "level": "warning",
            "code": "PSTEP007",
            "description": "Reordering steps must preserve selected step identity and only recompute selectedIndex after resolution."
          },
          {
            "validatorId": "step-label-valid",
            "level": "error",
            "code": "PSTEP008",
            "description": "Step labels must be non-empty text values after localization/domain projection."
          },
          {
            "validatorId": "completion-rule-compatible",
            "level": "error",
            "code": "PSTEP009",
            "description": "Optional, completed, hasError and errorMessage flags must remain compatible with Material stepper semantics."
          },
          {
            "validatorId": "linear-completion-safe",
            "level": "warning",
            "code": "PSTEP010",
            "description": "Forcing completion in linear mode should not bypass invalid Dynamic Form or server validation gates."
          },
          {
            "validatorId": "navigation-values-valid",
            "level": "error",
            "code": "PSTEP011",
            "description": "Navigation labels, icons, variant, color and alignment must match StepperMetadata enums and runtime bindings."
          },
          {
            "validatorId": "linear-navigation-valid",
            "level": "error",
            "code": "PSTEP012",
            "description": "Linear navigation depends on form validity and must not be replaced by host-local navigation rules."
          },
          {
            "validatorId": "orientation-values-valid",
            "level": "error",
            "code": "PSTEP013",
            "description": "Orientation, headerPosition, labelPosition and density values must match StepperMetadata enums."
          },
          {
            "validatorId": "label-position-compatible",
            "level": "warning",
            "code": "PSTEP014",
            "description": "labelPosition only affects horizontal steppers and must round-trip without corrupting vertical layout."
          },
          {
            "validatorId": "validation-rule-target-exists",
            "level": "error",
            "code": "PSTEP015",
            "description": "Validation rules must reference an existing field inside the step form or an existing child widget/component."
          },
          {
            "validatorId": "validation-rule-compatible",
            "level": "error",
            "code": "PSTEP016",
            "description": "Validation rules must compile into Dynamic Form metadata or host serverValidate delegation without inventing a parallel stepper rule DSL."
          },
          {
            "validatorId": "server-validation-delegated",
            "level": "info",
            "code": "PSTEP017",
            "description": "Remote validation remains delegated to the serverValidate input and is not implemented as hidden stepper metadata."
          },
          {
            "validatorId": "nested-widget-contract-delegated",
            "level": "info",
            "code": "PSTEP018",
            "description": "Nested widget content remains governed by the child component contract and widgetEvent path delegation."
          },
          {
            "validatorId": "editor-runtime-round-trip",
            "level": "error",
            "code": "PSTEP019",
            "description": "Settings Panel editor, runtime and registry projection must preserve step ids, order, navigation and validation intent."
          }
        ],
        "roundTripRequirements": [
          "Operations must preserve stable step ids; array index may be used only as a resolver fallback, never as canonical identity.",
          "Settings Panel editor, runtime persistence and registry projection must round-trip StepperMetadata without losing step ids, order or selectedIndex.",
          "Validation authoring must target Dynamic Form metadata or the host-owned serverValidate gate; the stepper manifest must not define a parallel validation DSL.",
          "Nested widgets remain delegated through WidgetDefinition and widgetEvent path enrichment instead of being redefined by the stepper contract.",
          "Removing a step with form, rich content or widgets requires explicit confirmation because it can delete nested authoring content."
        ],
        "examples": [
          {
            "id": "add-review-step",
            "request": "Add a review step after the documents step.",
            "operationId": "step.add",
            "params": {
              "id": "review",
              "label": "Review"
            },
            "isPositive": true
          },
          {
            "id": "rename-profile-step",
            "request": "Rename the profile step to Customer profile.",
            "operationId": "step.label.set",
            "target": "profile",
            "params": {
              "label": "Customer profile"
            },
            "isPositive": true
          },
          {
            "id": "move-confirm-before-submit",
            "request": "Move confirm before submit.",
            "operationId": "step.order.set",
            "target": "confirm",
            "params": {
              "beforeStepId": "submit"
            },
            "isPositive": true
          },
          {
            "id": "make-upload-optional",
            "request": "Make the upload step optional.",
            "operationId": "step.optional.set",
            "target": "upload",
            "params": {
              "optional": true
            },
            "isPositive": true
          },
          {
            "id": "set-linear-navigation",
            "request": "Use linear navigation with Back and Continue labels.",
            "operationId": "navigation.mode.set",
            "params": {
              "linear": true,
              "prevLabel": "Back",
              "nextLabel": "Continue"
            },
            "isPositive": true
          },
          {
            "id": "switch-vertical-layout",
            "request": "Make the stepper vertical.",
            "operationId": "orientation.set",
            "params": {
              "orientation": "vertical",
              "headerPosition": "top"
            },
            "isPositive": true
          },
          {
            "id": "require-email-on-profile",
            "request": "Require email before continuing from profile.",
            "operationId": "validation.rule.add",
            "target": "profile",
            "params": {
              "stepId": "profile",
              "fieldName": "email",
              "rule": {
                "required": true
              },
              "message": "Email is required"
            },
            "isPositive": true
          },
          {
            "id": "reject-duplicate-step-id",
            "request": "Add another step with id review.",
            "operationId": "step.add",
            "params": {
              "id": "review",
              "label": "Duplicate review"
            },
            "isPositive": false
          },
          {
            "id": "confirm-remove-content-step",
            "request": "Remove the documents step that contains an upload widget.",
            "operationId": "step.remove",
            "target": "documents",
            "params": {
              "replacementStepId": "review"
            },
            "isPositive": true
          }
        ]
      },
      "chunks": [
        {
          "chunkIndex": 0,
          "chunkKind": "summary",
          "content": "Component ID: praxis-stepper\nSelector: praxis-stepper\nFriendly Name: Praxis Stepper\nDescription: Stepper configurável (horizontal/vertical/linear) com passos e conteúdo dinâmico.\nLib/Package: @praxisui/stepper\nTags: widget, container, stepper, configurable\nInputs:\n  - stepperId (string)\n  - componentInstanceId (string)\n  - config (StepperMetadata)\n  - selectedIndex (number)\n  - selectedIndexInput (number)\n  - disableRippleInput (boolean)\n  - enableCustomization (boolean)\n  - labelPosition ('bottom' | 'end')\n  - color (ThemePalette)\n  - serverValidate ((args) => Promise<{ ok: boolean; fieldErrors?: Record<string,string[]>; formErrors?: string[] }>)\n  - stepperContext (Record<string, any>)\nOutputs:\n  - selectionChange (any)\n  - selectedIndexChange (number)\n  - animationDone (void)\n  - widgetEvent (WidgetEventEnvelope)\n  - stepFormReady ({ stepId?: string; stepIndex: number; event: FormReadyEvent })\n  - stepFormValueChange ({ stepId?: string; stepIndex: number; event: FormValueChangeEvent })\n  - stepReactiveDeterminationExecuted ({ stepId?: string; stepIndex: number; event: ReactiveDeterminationExecutionEvent })\n  - stepReactiveDeterminationPendingChange ({ stepId?: string; stepIndex: number; pending: boolean })\n  - reactiveDeterminationStabilityChange (StepperReactiveDeterminationStabilityChange)\n",
          "sourcePointer": "projects/praxis-stepper/src/lib/praxis-stepper.metadata.ts",
          "contentHash": "45d94ab8764dc92a68f79332305178436a43403578fa626846dbc9f163684a37",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 1,
          "chunkKind": "capabilities",
          "content": "Component Capability:\n  - Path: orientation\n    Category: layout\n    Kind: enum\n    Description: Orientation of the stepper.\n\nComponent Capability:\n  - Path: linear\n    Category: behavior\n    Kind: boolean\n    Description: Require sequential completion of steps.\n\nComponent Capability:\n  - Path: headerPosition\n    Category: layout\n    Kind: enum\n    Description: Header position (vertical only).\n\nComponent Capability:\n  - Path: labelPosition\n    Category: layout\n    Kind: enum\n    Description: Label position for horizontal stepper.\n\nComponent Capability:\n  - Path: color\n    Category: appearance\n    Kind: enum\n    Description: Material color palette.\n\nComponent Capability:\n  - Path: disableRipple\n    Category: behavior\n    Kind: boolean\n    Description: Disable ripple for headers.\n\nComponent Capability:\n  - Path: animationDuration\n    Category: behavior\n    Kind: string\n    Description: Animation duration, e.g. 300ms.\n\nComponent Capability:\n  - Path: selectedIndex\n    Category: behavior\n    Kind: number\n    Description: Current step index.\n\nComponent Capability:\n  - Path: density\n    Category: appearance\n    Kind: enum\n    Description: Density preset.\n\nComponent Capability:\n  - Path: stepperClass\n    Category: appearance\n    Kind: string\n    Description: CSS class for stepper root.\n\nComponent Capability:\n  - Path: headerClass\n    Category: appearance\n    Kind: string\n    Description: CSS class for header.\n\nComponent Capability:\n  - Path: contentClass\n    Category: appearance\n    Kind: string\n    Description: CSS class for content area.\n\nComponent Capability:\n  - Path: appearance\n    Category: appearance\n    Kind: object\n    Description: Appearance settings.\n\nComponent Capability:\n  - Path: appearance.themeClass\n    Category: appearance\n    Kind: string\n    Description: Theme CSS class for root.\n\nComponent Capability:\n  - Path: appearance.tokens\n    Category: appearance\n    Kind: object\n    Description: Token map for theme overrides.\n\nComponent Capability:\n  - Path: appearance.tokens.[token]\n    Category: appearance\n    Kind: string\n    Description: Token value (CSS value or var).\n\nComponent Capability:\n  - Path: appearance.icons\n    Category: appearance\n    Kind: object\n    Description: Stepper icon overrides.\n\nComponent Capability:\n  - Path: appearance.icons.number\n    Category: appearance\n    Kind: string\n    Description: Icon for number state.\n\nComponent Capability:\n  - Path: appearance.icons.done\n    Category: appearance\n    Kind: string\n    Description: Icon for done state.\n\nComponent Capability:\n  - Path: appearance.icons.edit\n    Category: appearance\n    Kind: string\n    Description: Icon for edit state.\n\nComponent Capability:\n  - Path: appearance.icons.error\n    Category: appearance\n    Kind: string\n    Description: Icon for error state.\n\nComponent Capability:\n  - Path: appearance.iconsSet\n    Category: appearance\n    Kind: enum\n    Description: Icon set class name (Material Symbols).\n\nComponent Capability:\n  - Path: navigation\n    Category: navigation\n    Kind: object\n    Description: Footer navigation config.\n\nComponent Capability:\n  - Path: navigation.visible\n    Category: navigation\n    Kind: boolean\n    Description: Show navigation buttons.\n\nComponent Capability:\n  - Path: navigation.prevLabel\n    Category: navigation\n    Kind: string\n    Description: Previous button label.\n\nComponent Capability:\n  - Path: navigation.nextLabel\n    Category: navigation\n    Kind: string\n    Description: Next button label.\n\nComponent Capability:\n  - Path: navigation.prevIcon\n    Category: navigation\n    Kind: string\n    Description: Previous button icon.\n\nComponent Capability:\n  - Path: navigation.nextIcon\n    Category: navigation\n    Kind: string\n    Description: Next button icon.\n\nComponent Capability:\n  - Path: navigation.variant\n    Category: navigation\n    Kind: enum\n    Description: Button variant.\n\nComponent Capability:\n  - Path: navigation.color\n    Category: navigation\n    Kind: enum\n    Description: Button color.\n\nComponent Capability:\n  - Path: navigation.align\n    Category: navigation\n    Kind: enum\n    Description: Navigation alignment.\n\nComponent Capability:\n  - Path: steps\n    Category: steps\n    Kind: array\n    Description: Step definitions.\n\nComponent Capability:\n  - Path: steps[]\n    Category: steps\n    Kind: object\n    Description: Step definition.\n\nComponent Capability:\n  - Path: steps[].id\n    Category: steps\n    Kind: string\n    Description: Step id.\n\nComponent Capability:\n  - Path: steps[].label\n    Category: steps\n    Kind: string\n    Description: Step label.\n\nComponent Capability:\n  - Path: steps[].description\n    Category: steps\n    Kind: string\n    Description: Step description.\n\nComponent Capability:\n  - Path: steps[].optional\n    Category: steps\n    Kind: boolean\n    Description: Mark step as optional.\n\nComponent Capability:\n  - Path: steps[].editable\n    Category: steps\n    Kind: boolean\n    Description: Allow editing completed steps.\n\nComponent Capability:\n  - Path: steps[].completed\n    Category: steps\n    Kind: boolean\n    Description: Force completed state.\n\nComponent Capability:\n  - Path: steps[].hasError\n    Category: steps\n    Kind: boolean\n    Description: Force error state.\n\nComponent Capability:\n  - Path: steps[].stateIcon\n    Category: steps\n    Kind: string\n    Description: Custom state icon key.\n\nComponent Capability:\n  - Path: steps[].state\n    Category: steps\n    Kind: string\n    Description: Custom state name for matStepperIcon.\n\nComponent Capability:\n  - Path: steps[].errorMessage\n    Category: steps\n    Kind: string\n    Description: Error message shown in header.\n\nComponent Capability:\n  - Path: steps[].ariaLabel\n    Category: accessibility\n    Kind: string\n    Description: ARIA label for step header.\n\nComponent Capability:\n  - Path: steps[].ariaLabelledby\n    Category: accessibility\n    Kind: string\n    Description: ARIA labelledby for step header.\n\nComponent Capability:\n  - Path: steps[].form\n    Category: steps\n    Kind: object\n    Description: Optional Dynamic Form config for step.\n\nComponent Capability:\n  - Path: steps[].form.resourcePath\n    Category: steps\n    Kind: string\n    Description: Resource path for Dynamic Form.\n\nComponent Capability:\n  - Path: steps[].form.resourceId\n    Category: steps\n    Kind: string\n    Description: Resource id for Dynamic Form (string or number).\n\nComponent Capability:\n  - Path: steps[].form.mode\n    Category: steps\n    Kind: enum\n    Description: Form mode.\n\nComponent Capability:\n  - Path: steps[].form.config\n    Category: steps\n    Kind: object\n    Description: FormConfig for Dynamic Form.\n\nComponent Capability:\n  - Path: steps[].form.config.editorialContext\n    Category: steps\n    Kind: object\n    Description: Contexto editorial compartilhado entre blocos hospedados pelo Dynamic Form da etapa.\n\nComponent Capability:\n  - Path: steps[].form.config.formBlocksBefore\n    Category: steps\n    Kind: object\n    Description: RichContentDocument hospedado antes do formulario da etapa.\n\nComponent Capability:\n  - Path: steps[].form.config.formBlocksBeforeActions\n    Category: steps\n    Kind: object\n    Description: RichContentDocument hospedado depois das secoes e antes da area principal de acoes do formulario da etapa.\n\nComponent Capability:\n  - Path: steps[].form.config.formBlocksAfter\n    Category: steps\n    Kind: object\n    Description: RichContentDocument hospedado depois do formulario inteiro da etapa.\n\nComponent Capability:\n  - Path: steps[].form.schemaSource\n    Category: steps\n    Kind: enum\n    Description: Schema source for Dynamic Form.\n\nComponent Capability:\n  - Path: steps[].form.formId\n    Category: steps\n    Kind: string\n    Description: Form id for Dynamic Form.\n\nComponent Capability:\n  - Path: steps[].stepBlocksBeforeForm\n    Category: steps\n    Kind: object\n    Description: RichContentDocument rendered before the step form.",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/stepper-ai-capabilities.ts",
          "contentHash": "cdf98a4dc445e4222be862fc1c8506fbee069d3895646cd820c6c336ec97bdbd",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 2,
          "chunkKind": "capabilities",
          "content": "Component Capability:\n  - Path: steps[].stepBlocksAfterForm\n    Category: steps\n    Kind: object\n    Description: RichContentDocument rendered after the step form.\n\nComponent Capability:\n  - Path: steps[].widgets\n    Category: steps\n    Kind: array\n    Description: Advanced host-owned WidgetDefinition list rendered after canonical rich content.\n\nComponent Capability:\n  - Path: steps[].widgets[]\n    Category: steps\n    Kind: object\n    Description: Advanced WidgetDefinition item.\n\nComponent Capability:\n  - Path: steps[].widgets[].id\n    Category: steps\n    Kind: enum\n    Description: Component registry id for advanced widget.\n\nComponent Capability:\n  - Path: steps[].widgets[].inputs\n    Category: steps\n    Kind: object\n    Description: Inputs bound into the advanced widget instance.\n\nCapability Note:\n  - steps[] should be merged by id or label to avoid replacing all steps.\n\nCapability Note:\n  - steps[].form.config uses FormConfig (see form catalog) and may include sections/actions/fieldMetadata.\n\nCapability Note:\n  - steps[].form.config tambem pode usar a surface editorial do dynamic-form: formBlocksBefore, formBlocksBeforeActions, formBlocksAfter e editorialContext como RichContentDocument.\n\nCapability Note:\n  - Use steps[].stepBlocksBeforeForm and steps[].stepBlocksAfterForm for editorial step content; both are RichContentDocument surfaces rendered by @praxisui/rich-content.\n\nCapability Note:\n  - steps[].widgets is reserved for advanced embedded components that do not have a canonical rich-content representation.\n\nCapability Note:\n  - appearance.tokens is a free-form map; host may validate/sanitize.\n\nCapability Note:\n  - When editing steps[].form.config.fieldMetadata, use FieldMetadata base if no controlType catalog exists.",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/stepper-ai-capabilities.ts",
          "contentHash": "dbb070344571030a7fe971a8f29e06dbbd0aa9132426ec1c3222ad7f6d3741b5",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 3,
          "chunkKind": "authoring_manifest",
          "content": "{\"operationId\":\"step.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Add step Effects: append-unique. Add a review step after the documents step. Add another step with id review.\",\"scope\":\"global\",\"target\":{\"kind\":\"step\",\"resolver\":\"steps-array\",\"required\":false},\"inputContract\":{\"required\":[\"id\",\"label\"],\"properties\":[\"id\",\"label\",\"description\",\"optional\",\"editable\",\"completed\",\"hasError\",\"state\",\"stateIcon\",\"errorMessage\",\"ariaLabel\",\"ariaLabelledby\",\"form\",\"stepBlocksBeforeForm\",\"stepBlocksAfterForm\",\"widgets\"],\"semanticTerms\":[\"id\",\"label\",\"description\",\"optional\",\"editable\",\"completed\",\"hasError\",\"state\",\"stateIcon\",\"errorMessage\",\"ariaLabel\",\"ariaLabelledby\",\"form\",\"stepBlocksBeforeForm\",\"stepBlocksAfterForm\",\"widgets\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"steps[]\"],\"validators\":[{\"validatorId\":\"step-id-unique\",\"level\":\"error\",\"code\":\"PSTEP001\",\"description\":\"Step ids must be unique and stable within config.steps[].\"},{\"validatorId\":\"step-order-deterministic\",\"level\":\"error\",\"code\":\"PSTEP003\",\"description\":\"Step ordering must use stable ids, not transient array index as identity.\"},{\"validatorId\":\"step-content-valid\",\"level\":\"error\",\"code\":\"PSTEP004\",\"description\":\"Step content must remain valid Dynamic Form config, RichContentDocument or WidgetDefinition[] metadata.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-review-step\",\"request\":\"Add a review step after the documents step.\",\"operationId\":\"step.add\",\"params\":{\"id\":\"review\",\"label\":\"Review\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-duplicate-step-id\",\"request\":\"Add another step with id review.\",\"operationId\":\"step.add\",\"params\":{\"id\":\"review\",\"label\":\"Duplicate review\"},\"isPositive\":false}]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "a0461a9dc6dc4223f36b00eb007df8e575d1616316754e895d5645165b42946a",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 4,
          "chunkKind": "authoring_manifest",
          "content": "{\"operationId\":\"step.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remove step Effects: compile-domain-patch. Remove the documents step that contains an upload widget.\",\"scope\":\"layout\",\"target\":{\"kind\":\"step\",\"resolver\":\"step-by-id-or-label\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"replacementStepId\"],\"semanticTerms\":[\"replacementStepId\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"steps[]\",\"selectedIndex\"],\"validators\":[{\"validatorId\":\"step-exists\",\"level\":\"error\",\"code\":\"PSTEP002\",\"description\":\"Target step must exist before applying the operation.\"},{\"validatorId\":\"selected-step-removal-safe\",\"level\":\"error\",\"code\":\"PSTEP006\",\"description\":\"Removing the selected step requires a deterministic replacement selected index or explicit confirmation.\"},{\"validatorId\":\"step-content-removal-confirmed\",\"level\":\"error\",\"code\":\"PSTEP005\",\"description\":\"Removing a step with form, rich content or widgets is destructive and requires confirmation.\"}],\"preconditions\":[\"config-initialized\",\"target-step-exists\",\"confirmation-collected\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"confirm-remove-content-step\",\"request\":\"Remove the documents step that contains an upload widget.\",\"operationId\":\"step.remove\",\"target\":\"documents\",\"params\":{\"replacementStepId\":\"review\"},\"isPositive\":true}],\"negativeExamples\":[]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "1b1947cc902319a707453375d0fc5d7f30f85b449fc5208d9b36922dc721f19d",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 5,
          "chunkKind": "authoring_manifest",
          "content": "{\"operationId\":\"step.label.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set step label Effects: merge-by-key. Rename the profile step to Customer profile.\",\"scope\":\"layout\",\"target\":{\"kind\":\"stepLabel\",\"resolver\":\"step-by-id-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"label\"],\"properties\":[\"label\"],\"semanticTerms\":[\"label\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"steps[].label\"],\"validators\":[{\"validatorId\":\"step-exists\",\"level\":\"error\",\"code\":\"PSTEP002\",\"description\":\"Target step must exist before applying the operation.\"},{\"validatorId\":\"step-label-valid\",\"level\":\"error\",\"code\":\"PSTEP008\",\"description\":\"Step labels must be non-empty text values after localization/domain projection.\"}],\"preconditions\":[\"config-initialized\",\"target-step-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"rename-profile-step\",\"request\":\"Rename the profile step to Customer profile.\",\"operationId\":\"step.label.set\",\"target\":\"profile\",\"params\":{\"label\":\"Customer profile\"},\"isPositive\":true}],\"negativeExamples\":[]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "3e805388ff10749affb796b3a0c2fd829502d42f6d4e424caa16e11c5b320ec9",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 6,
          "chunkKind": "authoring_manifest",
          "content": "{\"operationId\":\"step.order.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Reorder steps Effects: compile-domain-patch. Move confirm before submit.\",\"scope\":\"layout\",\"target\":{\"kind\":\"step\",\"resolver\":\"step-by-id-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"beforeStepId\"],\"properties\":[\"beforeStepId\"],\"semanticTerms\":[\"beforeStepId\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"steps[]\",\"selectedIndex\"],\"validators\":[{\"validatorId\":\"step-exists\",\"level\":\"error\",\"code\":\"PSTEP002\",\"description\":\"Target step must exist before applying the operation.\"},{\"validatorId\":\"step-order-deterministic\",\"level\":\"error\",\"code\":\"PSTEP003\",\"description\":\"Step ordering must use stable ids, not transient array index as identity.\"},{\"validatorId\":\"selected-index-preserved\",\"level\":\"warning\",\"code\":\"PSTEP007\",\"description\":\"Reordering steps must preserve selected step identity and only recompute selectedIndex after resolution.\"}],\"preconditions\":[\"config-initialized\",\"target-step-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"move-confirm-before-submit\",\"request\":\"Move confirm before submit.\",\"operationId\":\"step.order.set\",\"target\":\"confirm\",\"params\":{\"beforeStepId\":\"submit\"},\"isPositive\":true}],\"negativeExamples\":[]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "5426e521ddad0c40bd015c97707cd778ed0c0122426470db41258cf136906dd6",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 7,
          "chunkKind": "authoring_manifest",
          "content": "{\"operationId\":\"step.optional.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set optional state Effects: merge-by-key. Make the upload step optional.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"completionRule\",\"resolver\":\"step-by-id-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"optional\"],\"properties\":[\"optional\"],\"semanticTerms\":[\"optional\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"steps[].optional\"],\"validators\":[{\"validatorId\":\"step-exists\",\"level\":\"error\",\"code\":\"PSTEP002\",\"description\":\"Target step must exist before applying the operation.\"},{\"validatorId\":\"completion-rule-compatible\",\"level\":\"error\",\"code\":\"PSTEP009\",\"description\":\"Optional, completed, hasError and errorMessage flags must remain compatible with Material stepper semantics.\"}],\"preconditions\":[\"config-initialized\",\"target-step-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"make-upload-optional\",\"request\":\"Make the upload step optional.\",\"operationId\":\"step.optional.set\",\"target\":\"upload\",\"params\":{\"optional\":true},\"isPositive\":true}],\"negativeExamples\":[]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "0a45c1f8c2788e5e806c2318622b5f578d2331d32cc3ddad69952f83b96de95c",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 8,
          "chunkKind": "authoring_manifest",
          "content": "{\"operationId\":\"step.completed.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set completed state Effects: merge-by-key.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"completionRule\",\"resolver\":\"step-by-id-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"completed\"],\"properties\":[\"completed\",\"hasError\",\"errorMessage\"],\"semanticTerms\":[\"completed\",\"hasError\",\"errorMessage\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"steps[].completed\",\"steps[].hasError\",\"steps[].errorMessage\"],\"validators\":[{\"validatorId\":\"step-exists\",\"level\":\"error\",\"code\":\"PSTEP002\",\"description\":\"Target step must exist before applying the operation.\"},{\"validatorId\":\"completion-rule-compatible\",\"level\":\"error\",\"code\":\"PSTEP009\",\"description\":\"Optional, completed, hasError and errorMessage flags must remain compatible with Material stepper semantics.\"},{\"validatorId\":\"linear-completion-safe\",\"level\":\"warning\",\"code\":\"PSTEP010\",\"description\":\"Forcing completion in linear mode should not bypass invalid Dynamic Form or server validation gates.\"}],\"preconditions\":[\"config-initialized\",\"target-step-exists\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "db914bdabd8b6e1e7c6f0755f9d2609881191d3c432d9153521265543a18b1fa",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 9,
          "chunkKind": "authoring_manifest",
          "content": "{\"operationId\":\"navigation.mode.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set navigation mode Effects: merge-object, set-value. Use linear navigation with Back and Continue labels.\",\"scope\":\"interaction\",\"target\":{\"kind\":\"navigation\",\"resolver\":\"stepper-navigation-config\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"linear\",\"visible\",\"prevLabel\",\"nextLabel\",\"prevIcon\",\"nextIcon\",\"variant\",\"color\",\"align\"],\"semanticTerms\":[\"linear\",\"visible\",\"prevLabel\",\"nextLabel\",\"prevIcon\",\"nextIcon\",\"variant\",\"color\",\"align\",\"basic\",\"flat\",\"stroked\",\"raised\",\"primary\",\"accent\",\"warn\",\"start\",\"center\",\"end\",\"space-between\"]},\"effects\":[\"merge-object\",\"set-value\"],\"affectedPaths\":[\"navigation.visible\",\"navigation.prevLabel\",\"navigation.nextLabel\",\"navigation.prevIcon\",\"navigation.nextIcon\",\"navigation.variant\",\"navigation.color\",\"navigation.align\",\"linear\"],\"validators\":[{\"validatorId\":\"navigation-values-valid\",\"level\":\"error\",\"code\":\"PSTEP011\",\"description\":\"Navigation labels, icons, variant, color and alignment must match StepperMetadata enums and runtime bindings.\"},{\"validatorId\":\"linear-navigation-valid\",\"level\":\"error\",\"code\":\"PSTEP012\",\"description\":\"Linear navigation depends on form validity and must not be replaced by host-local navigation rules.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PSTEP019\",\"description\":\"Settings Panel editor, runtime and registry projection must preserve step ids, order, navigation and validation intent.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"set-linear-navigation\",\"request\":\"Use linear navigation with Back and Continue labels.\",\"operationId\":\"navigation.mode.set\",\"params\":{\"linear\":true,\"prevLabel\":\"Back\",\"nextLabel\":\"Continue\"},\"isPositive\":true}],\"negativeExamples\":[]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "d6439dec5404befb9637c48d800aa968a74bdc1d452c1ecec4e47c275b81ada0",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 10,
          "chunkKind": "authoring_manifest",
          "content": "{\"operationId\":\"orientation.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set orientation Effects: set-value, set-value, set-value, set-value. Make the stepper vertical.\",\"scope\":\"layout\",\"target\":{\"kind\":\"orientation\",\"resolver\":\"stepper-layout-config\",\"required\":true},\"inputContract\":{\"required\":[\"orientation\"],\"properties\":[\"orientation\",\"headerPosition\",\"labelPosition\",\"density\"],\"semanticTerms\":[\"orientation\",\"headerPosition\",\"labelPosition\",\"density\",\"horizontal\",\"vertical\",\"top\",\"bottom\",\"end\",\"default\",\"comfortable\",\"compact\"]},\"effects\":[\"set-value\",\"set-value\",\"set-value\",\"set-value\"],\"affectedPaths\":[\"orientation\",\"headerPosition\",\"labelPosition\",\"density\"],\"validators\":[{\"validatorId\":\"orientation-values-valid\",\"level\":\"error\",\"code\":\"PSTEP013\",\"description\":\"Orientation, headerPosition, labelPosition and density values must match StepperMetadata enums.\"},{\"validatorId\":\"label-position-compatible\",\"level\":\"warning\",\"code\":\"PSTEP014\",\"description\":\"labelPosition only affects horizontal steppers and must round-trip without corrupting vertical layout.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PSTEP019\",\"description\":\"Settings Panel editor, runtime and registry projection must preserve step ids, order, navigation and validation intent.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"switch-vertical-layout\",\"request\":\"Make the stepper vertical.\",\"operationId\":\"orientation.set\",\"params\":{\"orientation\":\"vertical\",\"headerPosition\":\"top\"},\"isPositive\":true}],\"negativeExamples\":[]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "84f52b816909749fd735d0e5d5edae1628e5f37927831b7c10f801cfe033fd50",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 11,
          "chunkKind": "authoring_manifest",
          "content": "{\"operationId\":\"validation.rule.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Add validation rule Effects: compile-domain-patch. Require email before continuing from profile.\",\"scope\":\"rule\",\"target\":{\"kind\":\"validationGate\",\"resolver\":\"step-validation-by-id\",\"required\":true},\"inputContract\":{\"required\":[\"stepId\",\"rule\"],\"properties\":[\"stepId\",\"fieldName\",\"childComponentId\",\"rule\",\"message\",\"remote\"],\"semanticTerms\":[\"stepId\",\"fieldName\",\"childComponentId\",\"rule\",\"message\",\"remote\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"steps[].form.config\",\"steps[].form.config.sections\",\"steps[].form.config.fieldMetadata\",\"steps[].hasError\",\"steps[].errorMessage\"],\"validators\":[{\"validatorId\":\"step-exists\",\"level\":\"error\",\"code\":\"PSTEP002\",\"description\":\"Target step must exist before applying the operation.\"},{\"validatorId\":\"validation-rule-target-exists\",\"level\":\"error\",\"code\":\"PSTEP015\",\"description\":\"Validation rules must reference an existing field inside the step form or an existing child widget/component.\"},{\"validatorId\":\"validation-rule-compatible\",\"level\":\"error\",\"code\":\"PSTEP016\",\"description\":\"Validation rules must compile into Dynamic Form metadata or host serverValidate delegation without inventing a parallel stepper rule DSL.\"},{\"validatorId\":\"server-validation-delegated\",\"level\":\"info\",\"code\":\"PSTEP017\",\"description\":\"Remote validation remains delegated to the serverValidate input and is not implemented as hidden stepper metadata.\"}],\"preconditions\":[\"config-initialized\",\"target-step-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"require-email-on-profile\",\"request\":\"Require email before continuing from profile.\",\"operationId\":\"validation.rule.add\",\"target\":\"profile\",\"params\":{\"stepId\":\"profile\",\"fieldName\":\"email\",\"rule\":{\"required\":true},\"message\":\"Email is required\"},\"isPositive\":true}],\"negativeExamples\":[]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "54425e934ed6f82cfce7e21ff95a0a87586c76ec5bf89c49055144a0241dc4fe",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 12,
          "chunkKind": "authoring_manifest",
          "content": "{\"operationId\":\"step.content.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Set step content Effects: merge-by-key.\",\"scope\":\"layout\",\"target\":{\"kind\":\"stepContent\",\"resolver\":\"step-content-by-id\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"id\",\"label\",\"description\",\"optional\",\"editable\",\"completed\",\"hasError\",\"state\",\"stateIcon\",\"errorMessage\",\"form\",\"stepBlocksBeforeForm\",\"stepBlocksAfterForm\",\"widgets\"],\"semanticTerms\":[\"id\",\"label\",\"description\",\"optional\",\"editable\",\"completed\",\"hasError\",\"state\",\"stateIcon\",\"errorMessage\",\"form\",\"stepBlocksBeforeForm\",\"stepBlocksAfterForm\",\"widgets\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"steps[].form\",\"steps[].stepBlocksBeforeForm\",\"steps[].stepBlocksAfterForm\",\"steps[].widgets\"],\"validators\":[{\"validatorId\":\"step-exists\",\"level\":\"error\",\"code\":\"PSTEP002\",\"description\":\"Target step must exist before applying the operation.\"},{\"validatorId\":\"step-content-valid\",\"level\":\"error\",\"code\":\"PSTEP004\",\"description\":\"Step content must remain valid Dynamic Form config, RichContentDocument or WidgetDefinition[] metadata.\"},{\"validatorId\":\"nested-widget-contract-delegated\",\"level\":\"info\",\"code\":\"PSTEP018\",\"description\":\"Nested widget content remains governed by the child component contract and widgetEvent path delegation.\"}],\"preconditions\":[\"config-initialized\",\"target-step-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "991d5e0bf7aa6d1404b6d1db958b941dd6f1ce586fc31afb534a146727cb0f12",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 13,
          "chunkKind": "authoring_manifest",
          "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"identity\"}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "cb9550199c31c1585501df60abcaa660e61095cd0fcd3ae059c97a1a83cdf754",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 14,
          "chunkKind": "authoring_manifest",
          "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"config\",\"type\":\"StepperMetadata\",\"description\":\"Canonical multi-step flow configuration.\"},{\"name\":\"stepperId\",\"type\":\"string\",\"description\":\"Stable id used to derive stepper config persistence scope.\"},{\"name\":\"componentInstanceId\",\"type\":\"string\",\"description\":\"Optional instance discriminator for persistence scope.\"},{\"name\":\"selectedIndex\",\"type\":\"number\",\"description\":\"Selected step index, compatible with two-way binding.\"},{\"name\":\"serverValidate\",\"type\":\"function\",\"description\":\"Optional host-owned async validation gate for step progression.\"},{\"name\":\"stepperContext\",\"type\":\"Record<string, any>\",\"description\":\"Context passed to nested widgets and rich content.\"},{\"name\":\"enableCustomization\",\"type\":\"boolean\",\"description\":\"Enables Settings Panel authoring surfaces.\"}]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "35c638de6e59fbded5dd8eb964f6ddc37347762ef9432794788b547605acb6a7",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 15,
          "chunkKind": "authoring_manifest",
          "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"step\",\"resolver\":\"step-by-id-or-label\",\"description\":\"A step in config.steps[].\"},{\"kind\":\"stepLabel\",\"resolver\":\"step-by-id-or-label\",\"description\":\"The visible label of a step.\"},{\"kind\":\"stepContent\",\"resolver\":\"step-content-by-id\",\"description\":\"Dynamic form, rich content or advanced widgets hosted inside a step.\"},{\"kind\":\"navigation\",\"resolver\":\"stepper-navigation-config\",\"description\":\"Footer navigation labels, icons, variant, alignment and visibility.\"},{\"kind\":\"completionRule\",\"resolver\":\"step-by-id-or-label\",\"description\":\"Optional/completed/error state metadata for a step.\"},{\"kind\":\"validationGate\",\"resolver\":\"step-validation-by-id\",\"description\":\"Validation gate that controls linear navigation and remote validation delegation.\"},{\"kind\":\"orientation\",\"resolver\":\"stepper-layout-config\",\"description\":\"Stepper orientation, header position and label position.\"}]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "cc6becd0bb317cebbebaf62f0acaa26f24d035a44add20255fbb49c74f9ae4b5",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 16,
          "chunkKind": "authoring_manifest",
          "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"step.add\",\"title\":\"Add step\",\"scope\":\"global\",\"targetKind\":\"step\",\"target\":{\"kind\":\"step\",\"resolver\":\"steps-array\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"label\"],\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"optional\":{\"type\":\"boolean\"},\"editable\":{\"type\":\"boolean\"},\"completed\":{\"type\":\"boolean\"},\"hasError\":{\"type\":\"boolean\"},\"state\":{\"type\":\"string\"},\"stateIcon\":{\"type\":\"string\"},\"errorMessage\":{\"type\":\"string\"},\"ariaLabel\":{\"type\":\"string\"},\"ariaLabelledby\":{\"type\":\"string\"},\"form\":{\"type\":\"object\"},\"stepBlocksBeforeForm\":{\"type\":\"object\"},\"stepBlocksAfterForm\":{\"type\":\"object\"},\"widgets\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"steps[]\",\"key\":\"id\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"step-id-unique\",\"step-order-deterministic\",\"step-content-valid\"],\"affectedPaths\":[\"steps[]\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"step.remove\",\"title\":\"Remove step\",\"scope\":\"layout\",\"targetKind\":\"step\",\"target\":{\"kind\":\"step\",\"resolver\":\"step-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"replacementStepId\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"stepper-step-remove\",\"handlerContract\":{\"reads\":[\"steps[]\",\"selectedIndex\"],\"writes\":[\"steps[]\",\"selectedIndex\"],\"identityKeys\":[\"steps[].id\"],\"inputSchema\":{\"type\":\"object\",\"properties\":{\"replacementStepId\":{\"type\":\"string\"}}},\"failureModes\":[\"step-not-found\",\"replacement-step-not-found\",\"content-removal-not-confirmed\"],\"description\":\"Removes the target step by stable id and recomputes selectedIndex to preserve deterministic navigation state.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"step-exists\",\"selected-step-removal-safe\",\"step-content-removal-confirmed\"],\"affectedPaths\":[\"steps[]\",\"selectedIndex\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-step-exists\",\"confirmation-collected\"]},{\"operationId\":\"step.label.set\",\"title\":\"Set step label\",\"scope\":\"layout\",\"targetKind\":\"stepLabel\",\"target\":{\"kind\":\"stepLabel\",\"resolver\":\"step-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"label\"],\"properties\":{\"label\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"steps[]\",\"key\":\"id\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"step-exists\",\"step-label-valid\"],\"affectedPaths\":[\"steps[].label\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-step-exists\"]},{\"operationId\":\"step.order.set\",\"title\":\"Reorder steps\",\"scope\":\"layout\",\"targetKind\":\"step\",\"target\":{\"kind\":\"step\",\"resolver\":\"step-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"beforeStepId\"],\"properties\":{\"beforeStepId\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"stepper-step-reorder\",\"handlerContract\":{\"reads\":[\"steps[]\",\"selectedIndex\"],\"writes\":[\"steps[]\",\"selectedIndex\"],\"identityKeys\":[\"steps[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"beforeStepId\"],\"properties\":{\"beforeStepId\":{\"type\":\"string\"}}},\"failureModes\":[\"step-not-found\",\"before-step-not-found\",\"ambiguous-step-target\"],\"description\":\"Moves the target step before another stable step id and recomputes selectedIndex by preserving selected step identity.\"}}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"step-exists\",\"step-order-deterministic\",\"selected-index-preserved\"],\"affectedPaths\":[\"steps[]\",\"selectedIndex\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-step-exists\"]},{\"operationId\":\"step.optional.set\",\"title\":\"Set optional state\",\"scope\":\"interaction\",\"targetKind\":\"completionRule\",\"target\":{\"kind\":\"completionRule\",\"resolver\":\"step-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"optional\"],\"properties\":{\"optional\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"steps[]\",\"key\":\"id\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"step-exists\",\"completion-rule-compatible\"],\"affectedPaths\":[\"steps[].optional\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-step-exists\"]},{\"operationId\":\"step.completed.set\",\"title\":\"Set completed state\",\"scope\":\"interaction\",\"targetKind\":\"completionRule\",\"target\":{\"kind\":\"completionRule\",\"resolver\":\"step-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"completed\"],\"properties\":{\"completed\":{\"type\":\"boolean\"},\"hasError\":{\"type\":\"boolean\"},\"errorMessage\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"steps[]\",\"key\":\"id\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"step-exists\",\"completion-rule-compatible\",\"linear-completion-safe\"],\"affectedPaths\":[\"steps[].completed\",\"steps[].hasError\",\"steps[].errorMessage\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\",\"target-step-exists\"]},{\"operationId\":\"navigation.mode.set\",\"title\":\"Set navigation mode\",\"scope\":\"interaction\",\"targetKind\":\"navigation\",\"target\":{\"kind\":\"navigation\",\"resolver\":\"stepper-navigation-config\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{\"linear\":{\"type\":\"boolean\"},\"visible\":{\"type\":\"boolean\"},\"prevLabel\":{\"type\":\"string\"},\"nextLabel\":{\"type\":\"string\"},\"prevIcon\":{\"type\":\"string\"},\"nextIcon\":{\"type\":\"string\"},\"variant\":{\"enum\":[\"basic\",\"flat\",\"stroked\",\"raised\"]},\"color\":{\"enum\":[\"primary\",\"accent\",\"warn\"]},\"align\":{\"enum\":[\"start\",\"center\",\"end\",\"space-between\"]}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"navigation\"},{\"kind\":\"set-value\",\"path\":\"linear\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"navigation-values-valid\",\"linear-navigation-valid\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"navigation.visible\",\"navigation.prevLabel\",\"navigation.nextLabel\",\"navigation.prevIcon\",\"navigation.nextIcon\",\"navigation.variant\",\"navigation.color\",\"navigation.align\",\"linear\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"orientation.set\",\"title\":\"Set orientation\",\"scope\":\"layout\",\"targetKind\":\"orientation\",\"target\":{\"kind\":\"orientation\",\"resolver\":\"stepper-layout-config\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"orientation\"],\"properties\":{\"orientation\":{\"enum\":[\"horizontal\",\"vertical\"]},\"headerPosition\":{\"enum\":[\"top\",\"bottom\"]},\"labelPosition\":{\"enum\":[\"bottom\",\"end\"]},\"density\":{\"enum\":[\"default\",\"comfortable\",\"compact\"]}}},\"effects\":[{\"kind\":\"set-value\",\"path\":\"orientation\"},{\"kind\":\"set-value\",\"path\":\"headerPosition\"},{\"kind\":\"set-value\",\"path\":\"labelPosition\"},{\"kind\":\"set-value\",\"path\":\"density\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"orientation-values-valid\",\"label-position-compatible\",\"editor-runtime-round-trip\"],\"affectedPaths\":[\"orientation\",\"headerPosition\",\"labelPosition\",\"density\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]}]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "25e62c764bfc58c3437c64c65c6cad9d2eb3decef3ac90b16e86c89cd6eb064a",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 17,
          "chunkKind": "authoring_manifest",
          "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"validation.rule.add\",\"title\":\"Add validation rule\",\"scope\":\"rule\",\"targetKind\":\"validationGate\",\"target\":{\"kind\":\"validationGate\",\"resolver\":\"step-validation-by-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"stepId\",\"rule\"],\"properties\":{\"stepId\":{\"type\":\"string\"},\"fieldName\":{\"type\":\"string\"},\"childComponentId\":{\"type\":\"string\"},\"rule\":{\"type\":\"object\"},\"message\":{\"type\":\"string\"},\"remote\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"stepper-validation-rule-upsert\",\"handlerContract\":{\"reads\":[\"steps[]\",\"steps[].form\",\"steps[].form.config\",\"steps[].widgets\",\"linear\"],\"writes\":[\"steps[].form.config\",\"steps[].form.config.sections\",\"steps[].form.config.fieldMetadata\",\"steps[].hasError\",\"steps[].errorMessage\"],\"identityKeys\":[\"steps[].id\",\"steps[].form.formId\",\"steps[].widgets[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"stepId\",\"rule\"],\"properties\":{\"stepId\":{\"type\":\"string\"},\"fieldName\":{\"type\":\"string\"},\"childComponentId\":{\"type\":\"string\"},\"rule\":{\"type\":\"object\"},\"message\":{\"type\":\"string\"},\"remote\":{\"type\":\"boolean\"}}},\"failureModes\":[\"step-not-found\",\"validation-target-not-found\",\"dynamic-form-config-missing\",\"remote-validation-requires-host-serverValidate\"],\"description\":\"Projects a validation rule into the step dynamic-form config or delegates it to the host serverValidate gate without redefining child component contracts.\"}}],\"validators\":[\"step-exists\",\"validation-rule-target-exists\",\"validation-rule-compatible\",\"server-validation-delegated\"],\"destructive\":false,\"requiresConfirmation\":false,\"affectedPaths\":[\"steps[].form.config\",\"steps[].form.config.sections\",\"steps[].form.config.fieldMetadata\",\"steps[].hasError\",\"steps[].errorMessage\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-step-exists\"]},{\"operationId\":\"step.content.set\",\"title\":\"Set step content\",\"scope\":\"layout\",\"targetKind\":\"stepContent\",\"target\":{\"kind\":\"stepContent\",\"resolver\":\"step-content-by-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"id\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"optional\":{\"type\":\"boolean\"},\"editable\":{\"type\":\"boolean\"},\"completed\":{\"type\":\"boolean\"},\"hasError\":{\"type\":\"boolean\"},\"state\":{\"type\":\"string\"},\"stateIcon\":{\"type\":\"string\"},\"errorMessage\":{\"type\":\"string\"},\"form\":{\"type\":\"object\"},\"stepBlocksBeforeForm\":{\"type\":\"object\"},\"stepBlocksAfterForm\":{\"type\":\"object\"},\"widgets\":{\"type\":\"array\",\"items\":{\"type\":\"object\"}}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"steps[]\",\"key\":\"id\"}],\"destructive\":false,\"requiresConfirmation\":false,\"validators\":[\"step-exists\",\"step-content-valid\",\"nested-widget-contract-delegated\"],\"affectedPaths\":[\"steps[].form\",\"steps[].stepBlocksBeforeForm\",\"steps[].stepBlocksAfterForm\",\"steps[].widgets\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-step-exists\"]}]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "02efe578f9386975f4e9d86258b756d34478c8389ea1856a4c884ecaf6acbf01",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 18,
          "chunkKind": "authoring_manifest",
          "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"step-id-unique\",\"level\":\"error\",\"code\":\"PSTEP001\",\"description\":\"Step ids must be unique and stable within config.steps[].\"},{\"validatorId\":\"step-exists\",\"level\":\"error\",\"code\":\"PSTEP002\",\"description\":\"Target step must exist before applying the operation.\"},{\"validatorId\":\"step-order-deterministic\",\"level\":\"error\",\"code\":\"PSTEP003\",\"description\":\"Step ordering must use stable ids, not transient array index as identity.\"},{\"validatorId\":\"step-content-valid\",\"level\":\"error\",\"code\":\"PSTEP004\",\"description\":\"Step content must remain valid Dynamic Form config, RichContentDocument or WidgetDefinition[] metadata.\"},{\"validatorId\":\"step-content-removal-confirmed\",\"level\":\"error\",\"code\":\"PSTEP005\",\"description\":\"Removing a step with form, rich content or widgets is destructive and requires confirmation.\"},{\"validatorId\":\"selected-step-removal-safe\",\"level\":\"error\",\"code\":\"PSTEP006\",\"description\":\"Removing the selected step requires a deterministic replacement selected index or explicit confirmation.\"},{\"validatorId\":\"selected-index-preserved\",\"level\":\"warning\",\"code\":\"PSTEP007\",\"description\":\"Reordering steps must preserve selected step identity and only recompute selectedIndex after resolution.\"},{\"validatorId\":\"step-label-valid\",\"level\":\"error\",\"code\":\"PSTEP008\",\"description\":\"Step labels must be non-empty text values after localization/domain projection.\"},{\"validatorId\":\"completion-rule-compatible\",\"level\":\"error\",\"code\":\"PSTEP009\",\"description\":\"Optional, completed, hasError and errorMessage flags must remain compatible with Material stepper semantics.\"},{\"validatorId\":\"linear-completion-safe\",\"level\":\"warning\",\"code\":\"PSTEP010\",\"description\":\"Forcing completion in linear mode should not bypass invalid Dynamic Form or server validation gates.\"},{\"validatorId\":\"navigation-values-valid\",\"level\":\"error\",\"code\":\"PSTEP011\",\"description\":\"Navigation labels, icons, variant, color and alignment must match StepperMetadata enums and runtime bindings.\"},{\"validatorId\":\"linear-navigation-valid\",\"level\":\"error\",\"code\":\"PSTEP012\",\"description\":\"Linear navigation depends on form validity and must not be replaced by host-local navigation rules.\"},{\"validatorId\":\"orientation-values-valid\",\"level\":\"error\",\"code\":\"PSTEP013\",\"description\":\"Orientation, headerPosition, labelPosition and density values must match StepperMetadata enums.\"},{\"validatorId\":\"label-position-compatible\",\"level\":\"warning\",\"code\":\"PSTEP014\",\"description\":\"labelPosition only affects horizontal steppers and must round-trip without corrupting vertical layout.\"},{\"validatorId\":\"validation-rule-target-exists\",\"level\":\"error\",\"code\":\"PSTEP015\",\"description\":\"Validation rules must reference an existing field inside the step form or an existing child widget/component.\"},{\"validatorId\":\"validation-rule-compatible\",\"level\":\"error\",\"code\":\"PSTEP016\",\"description\":\"Validation rules must compile into Dynamic Form metadata or host serverValidate delegation without inventing a parallel stepper rule DSL.\"},{\"validatorId\":\"server-validation-delegated\",\"level\":\"info\",\"code\":\"PSTEP017\",\"description\":\"Remote validation remains delegated to the serverValidate input and is not implemented as hidden stepper metadata.\"},{\"validatorId\":\"nested-widget-contract-delegated\",\"level\":\"info\",\"code\":\"PSTEP018\",\"description\":\"Nested widget content remains governed by the child component contract and widgetEvent path delegation.\"},{\"validatorId\":\"editor-runtime-round-trip\",\"level\":\"error\",\"code\":\"PSTEP019\",\"description\":\"Settings Panel editor, runtime and registry projection must preserve step ids, order, navigation and validation intent.\"}]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "1e805883ecd759c2e32633dd1e432f8b7dc8ef0322a5952dd7a8377f65d48fbc",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 19,
          "chunkKind": "authoring_manifest",
          "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"Operations must preserve stable step ids; array index may be used only as a resolver fallback, never as canonical identity.\",\"Settings Panel editor, runtime persistence and registry projection must round-trip StepperMetadata without losing step ids, order or selectedIndex.\",\"Validation authoring must target Dynamic Form metadata or the host-owned serverValidate gate; the stepper manifest must not define a parallel validation DSL.\",\"Nested widgets remain delegated through WidgetDefinition and widgetEvent path enrichment instead of being redefined by the stepper contract.\",\"Removing a step with form, rich content or widgets requires explicit confirmation because it can delete nested authoring content.\"]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "3760b39055d2d9a52d0cc0e4304f906bd2b2d7792d30c0f369f4d9fc3d242b00",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 20,
          "chunkKind": "authoring_manifest",
          "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"add-review-step\",\"request\":\"Add a review step after the documents step.\",\"operationId\":\"step.add\",\"params\":{\"id\":\"review\",\"label\":\"Review\"},\"isPositive\":true},{\"id\":\"rename-profile-step\",\"request\":\"Rename the profile step to Customer profile.\",\"operationId\":\"step.label.set\",\"target\":\"profile\",\"params\":{\"label\":\"Customer profile\"},\"isPositive\":true},{\"id\":\"move-confirm-before-submit\",\"request\":\"Move confirm before submit.\",\"operationId\":\"step.order.set\",\"target\":\"confirm\",\"params\":{\"beforeStepId\":\"submit\"},\"isPositive\":true},{\"id\":\"make-upload-optional\",\"request\":\"Make the upload step optional.\",\"operationId\":\"step.optional.set\",\"target\":\"upload\",\"params\":{\"optional\":true},\"isPositive\":true},{\"id\":\"set-linear-navigation\",\"request\":\"Use linear navigation with Back and Continue labels.\",\"operationId\":\"navigation.mode.set\",\"params\":{\"linear\":true,\"prevLabel\":\"Back\",\"nextLabel\":\"Continue\"},\"isPositive\":true},{\"id\":\"switch-vertical-layout\",\"request\":\"Make the stepper vertical.\",\"operationId\":\"orientation.set\",\"params\":{\"orientation\":\"vertical\",\"headerPosition\":\"top\"},\"isPositive\":true},{\"id\":\"require-email-on-profile\",\"request\":\"Require email before continuing from profile.\",\"operationId\":\"validation.rule.add\",\"target\":\"profile\",\"params\":{\"stepId\":\"profile\",\"fieldName\":\"email\",\"rule\":{\"required\":true},\"message\":\"Email is required\"},\"isPositive\":true},{\"id\":\"reject-duplicate-step-id\",\"request\":\"Add another step with id review.\",\"operationId\":\"step.add\",\"params\":{\"id\":\"review\",\"label\":\"Duplicate review\"},\"isPositive\":false},{\"id\":\"confirm-remove-content-step\",\"request\":\"Remove the documents step that contains an upload widget.\",\"operationId\":\"step.remove\",\"target\":\"documents\",\"params\":{\"replacementStepId\":\"review\"},\"isPositive\":true}]}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
          "contentHash": "2b06c72a5a618d59424030c23688de517cfe5cb8cb12c7ae69f0d9fa826bc60a",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 21,
          "chunkKind": "context_pack",
          "content": "{\"componentContext\":{\"version\":\"v1\",\"optionsByPath\":{\"orientation\":{\"mode\":\"enum\",\"options\":[{\"value\":\"horizontal\",\"label\":\"Horizontal\"},{\"value\":\"vertical\",\"label\":\"Vertical\"}]},\"headerPosition\":{\"mode\":\"enum\",\"options\":[{\"value\":\"top\",\"label\":\"Top\"},{\"value\":\"bottom\",\"label\":\"Bottom\"}]},\"labelPosition\":{\"mode\":\"enum\",\"options\":[{\"value\":\"bottom\",\"label\":\"Bottom\"},{\"value\":\"end\",\"label\":\"End\"}]},\"density\":{\"mode\":\"enum\",\"options\":[{\"value\":\"default\",\"label\":\"Default\"},{\"value\":\"comfortable\",\"label\":\"Comfortable\"},{\"value\":\"compact\",\"label\":\"Compact\"}]},\"color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"}]},\"navigation.variant\":{\"mode\":\"enum\",\"options\":[{\"value\":\"basic\",\"label\":\"Basic\"},{\"value\":\"flat\",\"label\":\"Flat\"},{\"value\":\"stroked\",\"label\":\"Stroked\"},{\"value\":\"raised\",\"label\":\"Raised\"}]},\"navigation.align\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"end\",\"label\":\"End\"},{\"value\":\"space-between\",\"label\":\"Space between\"}]},\"navigation.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"}]},\"steps[].form.mode\":{\"mode\":\"enum\",\"options\":[{\"value\":\"create\",\"label\":\"Create\"},{\"value\":\"edit\",\"label\":\"Edit\"},{\"value\":\"view\",\"label\":\"View\"}]},\"steps[].form.schemaSource\":{\"mode\":\"enum\",\"options\":[{\"value\":\"resource\",\"label\":\"Resource\"},{\"value\":\"filter\",\"label\":\"Filter\"}]},\"appearance.iconsSet\":{\"mode\":\"enum\",\"options\":[{\"value\":\"material-symbols-outlined\",\"label\":\"Outlined\"},{\"value\":\"material-symbols-rounded\",\"label\":\"Rounded\"},{\"value\":\"material-symbols-sharp\",\"label\":\"Sharp\"}]}},\"actionCatalog\":[{\"id\":\"orientation.set\",\"intentExamples\":[\"orientation\",\"horizontal\",\"vertical\"],\"patchTemplate\":{\"orientation\":\"{{value}}\"}},{\"id\":\"headerPosition.set\",\"intentExamples\":[\"header position\",\"header\"],\"patchTemplate\":{\"headerPosition\":\"{{value}}\"}},{\"id\":\"labelPosition.set\",\"intentExamples\":[\"label position\",\"label align\"],\"patchTemplate\":{\"labelPosition\":\"{{value}}\"}},{\"id\":\"density.set\",\"intentExamples\":[\"density\",\"compact\",\"comfortable\"],\"patchTemplate\":{\"density\":\"{{value}}\"}},{\"id\":\"color.set\",\"intentExamples\":[\"color\",\"theme color\"],\"patchTemplate\":{\"color\":\"{{value}}\"}},{\"id\":\"linear.enable\",\"intentExamples\":[\"linear\",\"sequential\",\"require order\"],\"patchTemplate\":{\"linear\":true}},{\"id\":\"linear.disable\",\"intentExamples\":[\"non linear\",\"free navigation\"],\"patchTemplate\":{\"linear\":false}},{\"id\":\"selectedIndex.set\",\"intentExamples\":[\"select step\",\"active step\",\"selected index\"],\"patchTemplate\":{\"selectedIndex\":\"{{value}}\"}},{\"id\":\"navigation.visible.enable\",\"intentExamples\":[\"show navigation\",\"show buttons\"],\"patchTemplate\":{\"navigation\":{\"visible\":true}}},{\"id\":\"navigation.visible.disable\",\"intentExamples\":[\"hide navigation\",\"hide buttons\"],\"patchTemplate\":{\"navigation\":{\"visible\":false}}},{\"id\":\"navigation.labels.set\",\"intentExamples\":[\"next label\",\"previous label\",\"navigation labels\"],\"patchTemplate\":{\"navigation\":{\"prevLabel\":\"{{params.prev}}\",\"nextLabel\":\"{{params.next}}\"}}},{\"id\":\"step.add\",\"intentExamples\":[\"add step\",\"new step\",\"create step\"],\"patchTemplate\":{\"steps\":[{\"id\":\"{{target}}\",\"label\":\"{{value}}\"}]}},{\"id\":\"step.label.set\",\"intentExamples\":[\"rename step\",\"step label\"],\"patchTemplate\":{\"steps\":[{\"id\":\"{{target}}\",\"label\":\"{{value}}\"}]}},{\"id\":\"step.description.set\",\"intentExamples\":[\"step description\",\"description\"],\"patchTemplate\":{\"steps\":[{\"id\":\"{{target}}\",\"description\":\"{{value}}\"}]}},{\"id\":\"step.optional.enable\",\"intentExamples\":[\"optional step\",\"not required\"],\"patchTemplate\":{\"steps\":[{\"id\":\"{{target}}\",\"optional\":true}]}},{\"id\":\"step.optional.disable\",\"intentExamples\":[\"required step\"],\"patchTemplate\":{\"steps\":[{\"id\":\"{{target}}\",\"optional\":false}]}},{\"id\":\"step.completed.set\",\"intentExamples\":[\"mark completed\",\"completed step\"],\"patchTemplate\":{\"steps\":[{\"id\":\"{{target}}\",\"completed\":\"{{value}}\"}]}},{\"id\":\"step.error.set\",\"intentExamples\":[\"mark error\",\"step error\"],\"patchTemplate\":{\"steps\":[{\"id\":\"{{target}}\",\"hasError\":\"{{value}}\"}]}},{\"id\":\"step.form.resourcePath.set\",\"intentExamples\":[\"form resource\",\"resource path\",\"step form\"],\"patchTemplate\":{\"steps\":[{\"id\":\"{{target}}\",\"form\":{\"resourcePath\":\"{{value}}\"}}]}},{\"id\":\"step.form.mode.set\",\"intentExamples\":[\"form mode\",\"create mode\",\"edit mode\",\"view mode\"],\"patchTemplate\":{\"steps\":[{\"id\":\"{{target}}\",\"form\":{\"mode\":\"{{value}}\"}}]}},{\"id\":\"step.form.formId.set\",\"intentExamples\":[\"form id\",\"form reference\"],\"patchTemplate\":{\"steps\":[{\"id\":\"{{target}}\",\"form\":{\"formId\":\"{{value}}\"}}]}}],\"fieldResolvers\":{\"steps[]\":[\"id\",\"label\"]},\"hints\":[\"Use steps[].id or steps[].label as merge keys; avoid array indexes.\",\"Step form config merges by id; avoid replacing entire steps array.\",\"Selected index expects a zero-based number.\",\"DOC: Widget purpose: stepper with ordered steps and optional per-step forms.\",\"DOC: Host inputs: stepperId (required) and config (optional).\",\"DOC: When config is provided, steps[] should be present; each step requires label.\",\"DOC: Optional step.form embeds a dynamic form; use form.resourcePath + form.config as needed.\"]}}",
          "sourcePointer": "projects/praxis-stepper/src/lib/ai/stepper-context-pack.ts",
          "contentHash": "e713a30532d577b7641ae4cf0a430964c3391edab534eb560d80d54d1c768e7f",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 22,
          "chunkKind": "recipe",
          "content": "{\"_comment\":\"Wizard avançado com stepper e formulários dinâmicos (Acesso > Conta > Preferências).\",\"templateMeta\":{\"registryKey\":\"praxis-stepper\",\"variantId\":\"advanced-wizard\",\"useWhen\":\"Criar um wizard avançado de onboarding com conteúdo editorial e CTA sticky.\",\"examplePrompts\":[\"wizard avançado em três passos\",\"cadastro guiado com preferências\"]},\"id\":\"advanced-onboarding-wizard\",\"brand\":\"PRAXIS UI\",\"progress\":{\"variant\":\"line\",\"showLabels\":true,\"labelPosition\":\"bottom\"},\"cta\":{\"label\":\"Continuar\",\"action\":\"next\",\"secondaryLabel\":\"Voltar\",\"secondaryAction\":\"prev\",\"sticky\":true},\"preferences\":{\"stepId\":\"preferences\",\"storageKey\":\"praxis:advanced-wizard\",\"persistFields\":[\"novidadesProduto\",\"eventosConteudo\",\"recomendacoes\"]},\"theme\":{\"praxis-wizard-card-bg\":\"#fff7ef\",\"md-sys-color-surface\":\"#fff7ef\",\"md-sys-color-on-surface\":\"#33302e\",\"praxis-wizard-accent\":\"#0d7680\",\"praxis-wizard-border\":\"#cfcfcf\",\"md-sys-color-outline-variant\":\"#cfcfcf\",\"ft-font-head\":\"Georgia, \\\"Times New Roman\\\", serif\",\"ft-font-body\":\"\\\"Source Sans 3\\\", \\\"Segoe UI\\\", Arial, sans-serif\",\"ft-radius\":\"0\",\"ft-shadow\":\"none\",\"ft-header-border\":\"1px solid #cfcfcf\"},\"steps\":[{\"id\":\"access\",\"label\":\"Acesso\",\"title\":\"Crie sua conta\",\"subtitle\":\"Ative seu acesso em poucos passos e personalize a experiência desde o início.\",\"zones\":{\"intro\":[{\"type\":\"benefitsGrid\",\"title\":\"Por que se cadastrar?\",\"columns\":4,\"boxed\":true,\"items\":[{\"icon\":\"format_quote\",\"title\":\"Conteúdo relevante\",\"text\":\"Receba atualizações, novidades e materiais selecionados para o seu perfil.\"},{\"icon\":\"edit_note\",\"title\":\"Fluxo guiado\",\"text\":\"Conclua o cadastro com uma jornada simples, clara e orientada por etapas.\"},{\"icon\":\"bookmarks\",\"title\":\"Preferências salvas\",\"text\":\"Defina suas escolhas iniciais e retome o processo sem perder o progresso.\"},{\"icon\":\"mail\",\"title\":\"Comunicação sob controle\",\"text\":\"Escolha como deseja receber novidades, alertas e recomendações.\"}]}],\"footer\":[{\"type\":\"inlineNotice\",\"text\":\"Ao continuar, você concorda com os termos de uso e com a política de privacidade da plataforma.\"}]},\"cta\":{\"label\":\"Começar cadastro\",\"action\":\"next\"},\"form\":{\"config\":{\"sections\":[{\"id\":\"access-section\",\"rows\":[{\"columns\":[{\"fields\":[\"confirmAge\",\"receberNovidades\"]}]}]}],\"fieldMetadata\":[{\"name\":\"confirmAge\",\"label\":\"\",\"controlType\":\"checkbox\",\"required\":true,\"layout\":\"horizontal\",\"options\":[{\"label\":\"Confirmo que li e aceito os termos de uso e a política de privacidade.\",\"value\":true}]},{\"name\":\"receberNovidades\",\"label\":\"Receber novidades por e-mail\",\"controlType\":\"toggle\",\"defaultValue\":true,\"hint\":\"Você pode alterar essa preferência a qualquer momento nas configurações da conta.\"}],\"actions\":{\"submit\":{\"visible\":false,\"label\":\"Salvar\"},\"cancel\":{\"visible\":false,\"label\":\"Cancelar\"},\"reset\":{\"visible\":false,\"label\":\"Limpar\"}}}}},{\"id\":\"account\",\"label\":\"Conta\",\"title\":\"Configure seu acesso\",\"subtitle\":\"Esses dados serão usados para criar e proteger sua conta.\",\"zones\":{\"intro\":[{\"type\":\"inlineNotice\",\"text\":\"Use um e-mail válido para confirmar o cadastro e recuperar o acesso quando necessário.\",\"tone\":\"info\"}],\"footer\":[{\"type\":\"inlineNotice\",\"text\":\"Mensagens de segurança e comunicações operacionais continuam ativas mesmo se você desativar novidades.\"}]},\"form\":{\"config\":{\"sections\":[{\"id\":\"account-section\",\"rows\":[{\"columns\":[{\"fields\":[\"email\",\"password\"]},{\"fields\":[\"aceitaComunicacoes\"]}]}]}],\"fieldMetadata\":[{\"name\":\"email\",\"label\":\"E-mail\",\"controlType\":\"email\",\"required\":true,\"placeholder\":\"Digite seu e-mail\"},{\"name\":\"password\",\"label\":\"Senha\",\"controlType\":\"password\",\"required\":true,\"placeholder\":\"Crie uma senha\",\"hint\":\"Use 8 ou mais caracteres, combinando letras, números e símbolos.\",\"validators\":{\"minLength\":8},\"revealToggle\":{\"enabled\":true,\"style\":\"icon\",\"showLabel\":\"Mostrar senha\",\"hideLabel\":\"Ocultar senha\",\"ariaLabel\":\"Alternar visibilidade da senha\",\"iconShow\":\"visibility\",\"iconHide\":\"visibility_off\"}},{\"name\":\"aceitaComunicacoes\",\"label\":\"Receber comunicações da plataforma\",\"controlType\":\"toggle\",\"defaultValue\":true,\"hint\":\"Inclui novidades de produto, convites para eventos e conteúdos de apoio.\"}],\"actions\":{\"submit\":{\"visible\":false,\"label\":\"Salvar\"},\"cancel\":{\"visible\":false,\"label\":\"Cancelar\"},\"reset\":{\"visible\":false,\"label\":\"Limpar\"}}}}},{\"id\":\"preferences\",\"label\":\"Preferências\",\"title\":\"Personalize sua experiência\",\"subtitle\":\"Você pode alterar essas configurações a qualquer momento no painel da conta.\",\"description\":\"Escolha quais comunicações e recomendações fazem sentido para o seu contexto.\",\"zones\":{\"footer\":[{\"type\":\"divider\"},{\"type\":\"inlineNotice\",\"text\":\"Alertas de segurança e mensagens essenciais sobre a conta permanecem ativos para garantir a operação.\"}]},\"cta\":{\"label\":\"Concluir cadastro\",\"action\":\"submit\",\"secondaryLabel\":\"Voltar\",\"secondaryAction\":\"prev\"},\"form\":{\"config\":{\"sections\":[{\"id\":\"prefs-section\",\"rows\":[{\"columns\":[{\"fields\":[\"novidadesProduto\"]},{\"fields\":[\"eventosConteudo\"]},{\"fields\":[\"recomendacoes\"]}]}]}],\"fieldMetadata\":[{\"name\":\"novidadesProduto\",\"label\":\"Novidades de produto\",\"controlType\":\"toggle\",\"defaultValue\":true,\"hint\":\"Receba lançamentos, melhorias e comunicados importantes sobre a plataforma.\"},{\"name\":\"eventosConteudo\",\"label\":\"Eventos e conteúdos especiais\",\"controlType\":\"toggle\",\"defaultValue\":true,\"hint\":\"Seja avisado sobre webinars, materiais técnicos e convites para trilhas de capacitação.\"},{\"name\":\"recomendacoes\",\"label\":\"Recomendações personalizadas\",\"controlType\":\"toggle\",\"defaultValue\":false,\"hint\":\"Receba sugestões de recursos e exemplos com base nas suas preferências de uso.\"}],\"actions\":{\"submit\":{\"visible\":false,\"label\":\"Salvar\"},\"cancel\":{\"visible\":false,\"label\":\"Cancelar\"},\"reset\":{\"visible\":false,\"label\":\"Limpar\"}}}}}]}",
          "sourcePointer": "examples/ai-recipes/praxis-ft-wizard.json",
          "contentHash": "929310a34d60e5dafc1e088e5060a804e137c2d0dc4399d709fdb8314f67bc62",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        },
        {
          "chunkIndex": 23,
          "chunkKind": "recipe",
          "content": "{\"_comment\":\"Recipe for the current @praxisui/stepper contract. Use steps[].form for Dynamic Form steps, stepBlocksBeforeForm/stepBlocksAfterForm for editorial rich content, and steps[].widgets only for real nested runtime widgets.\",\"templateMeta\":{\"registryKey\":\"praxis-stepper\",\"variantId\":\"onboarding-workflow\",\"useWhen\":\"Create a guided multi-step workflow with forms, rich content, nested widgets and event bubbling.\",\"examplePrompts\":[\"create an employee onboarding stepper\",\"show a stepper with a form step, upload step and approval checklist\",\"configure praxis-stepper with nested widgets\"]},\"authoringGuidance\":[\"Use a stable stepperId for persistence and configuration editing.\",\"Use steps[].form.config for step-local Dynamic Form sections, fieldMetadata, validators and formRules.\",\"Use stepBlocksBeforeForm and stepBlocksAfterForm for copy, badges, notices and other editorial content.\",\"Use steps[].widgets only for runtime components such as praxis-files-upload or praxis-list.\",\"Do not use legacy steps[].content or icon-only fields as the source of runtime content.\"],\"config\":{\"orientation\":\"horizontal\",\"linear\":true,\"labelPosition\":\"bottom\",\"selectedIndex\":0,\"density\":\"comfortable\",\"appearance\":{\"preset\":\"ft-light\",\"icons\":{\"number\":\"radio_button_unchecked\",\"done\":\"check_circle\",\"edit\":\"edit_note\",\"error\":\"error\"}},\"navigation\":{\"visible\":true,\"prevLabel\":\"Back\",\"nextLabel\":\"Continue\",\"prevIcon\":\"arrow_back\",\"nextIcon\":\"arrow_forward\",\"variant\":\"stroked\",\"color\":\"primary\",\"align\":\"space-between\"},\"steps\":[{\"id\":\"employee-intake\",\"label\":\"Employee\",\"description\":\"Capture identity, assignment and workflow-only risk fields.\",\"editable\":true,\"stepBlocksBeforeForm\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"text\":\"The step owns its local Dynamic Form config. Backend metadata can replace this config later without changing the Stepper host template.\"},{\"type\":\"badge\",\"label\":\"form rules\"},{\"type\":\"badge\",\"label\":\"validators\"}]},\"form\":{\"mode\":\"create\",\"formId\":\"employee-onboarding-intake-form\",\"schemaSource\":\"resource\",\"config\":{\"metadata\":{\"name\":\"Employee onboarding intake\",\"version\":\"1.0.0\"},\"behavior\":{\"reactiveValidation\":true,\"reactiveValidationDebounceMs\":200},\"sections\":[{\"id\":\"identity\",\"title\":\"Identity\",\"description\":\"Candidate identity and contact data.\",\"appearance\":\"outlined\",\"rows\":[{\"id\":\"identity-row\",\"columns\":[{\"id\":\"identity-main\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"nomeCompleto\",\"email\"]},{\"id\":\"identity-contact\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"telefone\",\"dataNascimento\"]}]}]},{\"id\":\"assignment\",\"title\":\"Assignment\",\"description\":\"Initial role and payroll policy.\",\"appearance\":\"outlined\",\"rows\":[{\"id\":\"assignment-row\",\"columns\":[{\"id\":\"assignment-main\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"cargoId\",\"departamentoId\"]},{\"id\":\"assignment-payroll\",\"span\":{\"md\":6,\"lg\":6},\"fields\":[\"salario\",\"requiresSecurityReview\"]}]}]}],\"fieldMetadata\":[{\"name\":\"nomeCompleto\",\"label\":\"Nome Completo\",\"controlType\":\"input\",\"validators\":{\"required\":true,\"minLength\":3,\"maxLength\":160}},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"email\":true}},{\"name\":\"telefone\",\"label\":\"Telefone\",\"controlType\":\"phone\",\"validators\":{\"required\":true}},{\"name\":\"dataNascimento\",\"label\":\"Data de Nascimento\",\"controlType\":\"date\",\"validators\":{\"required\":true}},{\"name\":\"cargoId\",\"label\":\"Cargo\",\"controlType\":\"select\",\"validators\":{\"required\":true},\"options\":[{\"label\":\"Analista de Operacoes\",\"value\":\"analyst\"},{\"label\":\"Agente de Campo\",\"value\":\"field-agent\"},{\"label\":\"Diretor de P&D\",\"value\":\"director-rd\"}]},{\"name\":\"departamentoId\",\"label\":\"Departamento\",\"controlType\":\"select\",\"validators\":{\"required\":true},\"options\":[{\"label\":\"Operacoes\",\"value\":\"operations\"},{\"label\":\"Pesquisa\",\"value\":\"research\"},{\"label\":\"Seguranca\",\"value\":\"security\"}]},{\"name\":\"salario\",\"label\":\"Salario inicial\",\"controlType\":\"currency\",\"currencyCode\":\"BRL\",\"locale\":\"pt-BR\",\"validators\":{\"required\":true,\"min\":1800}},{\"name\":\"requiresSecurityReview\",\"label\":\"Requires security review\",\"controlType\":\"toggle\"}]}}},{\"id\":\"evidence\",\"label\":\"Evidence\",\"description\":\"Collect supporting files through a nested Files Upload widget.\",\"optional\":true,\"widgets\":[{\"id\":\"praxis-files-upload\",\"inputs\":{\"filesUploadId\":\"employee-onboarding-evidence\",\"baseUrl\":\"/api/files\",\"displayMode\":\"compact\",\"config\":{\"strategy\":\"direct\",\"ui\":{\"showDropzone\":true,\"showConflictPolicySelector\":true,\"showMetadataForm\":true,\"showProgress\":true,\"manualUpload\":true},\"limits\":{\"maxFileSizeBytes\":10485760,\"maxFilesPerBulk\":4,\"maxBulkSizeBytes\":31457280}}}}]},{\"id\":\"approval\",\"label\":\"Approval\",\"description\":\"Review completion criteria before sending the workflow to the host.\",\"widgets\":[{\"id\":\"praxis-list\",\"inputs\":{\"listId\":\"employee-onboarding-approval-checklist\",\"config\":{\"dataSource\":{\"data\":[{\"id\":1,\"title\":\"Identity fields validated\",\"owner\":\"People Ops\",\"status\":\"Required\",\"priority\":\"P0\"},{\"id\":2,\"title\":\"Evidence attached or waived\",\"owner\":\"Hiring Manager\",\"status\":\"Required\",\"priority\":\"P0\"},{\"id\":3,\"title\":\"Security review completed\",\"owner\":\"Security\",\"status\":\"Conditional\",\"priority\":\"P1\"}]},\"selection\":{\"mode\":\"multiple\",\"compareBy\":\"id\",\"return\":\"id\"},\"templating\":{\"leading\":{\"type\":\"icon\",\"expr\":\"task_alt\"},\"primary\":{\"type\":\"text\",\"expr\":\"${item.title}\"},\"secondary\":{\"type\":\"text\",\"expr\":\"${item.owner}\"},\"meta\":{\"type\":\"chip\",\"expr\":\"${item.priority}\",\"variant\":\"filled\"},\"trailing\":{\"type\":\"chip\",\"expr\":\"${item.status}\",\"variant\":\"outlined\"}}}}}]}]},\"outputs\":{\"selectionChange\":\"emit\",\"selectedIndexChange\":\"emit\",\"stepFormReady\":\"emit\",\"stepFormValueChange\":\"emit\"}}",
          "sourcePointer": "examples/ai-recipes/praxis-stepper.json",
          "contentHash": "3fa6981623085f56d3d418cf221e8bea5705cb70b3aeea1a53c7fc863653438c",
          "sourceKind": "component_definition",
          "sourceId": "praxis-stepper",
          "corpusVersion": "1.0.0"
        }
      ]
    }
  },
  "note": "Package-scoped Praxis component registry for source-free agent discovery. Use the canonical ingestion registry for cross-package aggregate analysis."
}
