@praxisui/stepper 9.0.0-beta.77 → 9.0.0-beta.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai/component-registry.json +95 -15
- package/package.json +9 -9
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-07-
|
|
3
|
+
"generatedAt": "2026-07-19T03:55:15.480Z",
|
|
4
4
|
"packageName": "@praxisui/stepper",
|
|
5
|
-
"packageVersion": "9.0.0-beta.
|
|
5
|
+
"packageVersion": "9.0.0-beta.78",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -2138,49 +2138,129 @@
|
|
|
2138
2138
|
{
|
|
2139
2139
|
"chunkIndex": 1,
|
|
2140
2140
|
"chunkKind": "capabilities",
|
|
2141
|
-
"content": "Component
|
|
2141
|
+
"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.",
|
|
2142
2142
|
"sourcePointer": "projects/praxis-stepper/src/lib/ai/stepper-ai-capabilities.ts",
|
|
2143
|
-
"contentHash": "
|
|
2143
|
+
"contentHash": "cdf98a4dc445e4222be862fc1c8506fbee069d3895646cd820c6c336ec97bdbd",
|
|
2144
2144
|
"sourceKind": "component_definition",
|
|
2145
2145
|
"sourceId": "praxis-stepper",
|
|
2146
2146
|
"corpusVersion": "1.0.0"
|
|
2147
2147
|
},
|
|
2148
2148
|
{
|
|
2149
2149
|
"chunkIndex": 2,
|
|
2150
|
+
"chunkKind": "capabilities",
|
|
2151
|
+
"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.",
|
|
2152
|
+
"sourcePointer": "projects/praxis-stepper/src/lib/ai/stepper-ai-capabilities.ts",
|
|
2153
|
+
"contentHash": "dbb070344571030a7fe971a8f29e06dbbd0aa9132426ec1c3222ad7f6d3741b5",
|
|
2154
|
+
"sourceKind": "component_definition",
|
|
2155
|
+
"sourceId": "praxis-stepper",
|
|
2156
|
+
"corpusVersion": "1.0.0"
|
|
2157
|
+
},
|
|
2158
|
+
{
|
|
2159
|
+
"chunkIndex": 3,
|
|
2150
2160
|
"chunkKind": "authoring_manifest",
|
|
2151
|
-
"content": "{\n \"schemaVersion\": \"1.0.0\",\n \"componentId\": \"praxis-stepper\",\n \"ownerPackage\": \"@praxisui/stepper\",\n \"configSchemaId\": \"StepperMetadata\",\n \"manifestVersion\": \"1.0.0\",\n \"runtimeInputs\": [\n {\n \"name\": \"config\",\n \"type\": \"StepperMetadata\",\n \"description\": \"Canonical multi-step flow configuration.\"\n },\n {\n \"name\": \"stepperId\",\n \"type\": \"string\",\n \"description\": \"Stable id used to derive stepper config persistence scope.\"\n },\n {\n \"name\": \"componentInstanceId\",\n \"type\": \"string\",\n \"description\": \"Optional instance discriminator for persistence scope.\"\n },\n {\n \"name\": \"selectedIndex\",\n \"type\": \"number\",\n \"description\": \"Selected step index, compatible with two-way binding.\"\n },\n {\n \"name\": \"serverValidate\",\n \"type\": \"function\",\n \"description\": \"Optional host-owned async validation gate for step progression.\"\n },\n {\n \"name\": \"stepperContext\",\n \"type\": \"Record<string, any>\",\n \"description\": \"Context passed to nested widgets and rich content.\"\n },\n {\n \"name\": \"enableCustomization\",\n \"type\": \"boolean\",\n \"description\": \"Enables Settings Panel authoring surfaces.\"\n }\n ],\n \"editableTargets\": [\n {\n \"kind\": \"step\",\n \"resolver\": \"step-by-id-or-label\",\n \"description\": \"A step in config.steps[].\"\n },\n {\n \"kind\": \"stepLabel\",\n \"resolver\": \"step-by-id-or-label\",\n \"description\": \"The visible label of a step.\"\n },\n {\n \"kind\": \"stepContent\",\n \"resolver\": \"step-content-by-id\",\n \"description\": \"Dynamic form, rich content or advanced widgets hosted inside a step.\"\n },\n {\n \"kind\": \"navigation\",\n \"resolver\": \"stepper-navigation-config\",\n \"description\": \"Footer navigation labels, icons, variant, alignment and visibility.\"\n },\n {\n \"kind\": \"completionRule\",\n \"resolver\": \"step-by-id-or-label\",\n \"description\": \"Optional/completed/error state metadata for a step.\"\n },\n {\n \"kind\": \"validationGate\",\n \"resolver\": \"step-validation-by-id\",\n \"description\": \"Validation gate that controls linear navigation and remote validation delegation.\"\n },\n {\n \"kind\": \"orientation\",\n \"resolver\": \"stepper-layout-config\",\n \"description\": \"Stepper orientation, header position and label position.\"\n }\n ],\n \"operations\": [\n {\n \"operationId\": \"step.add\",\n \"title\": \"Add step\",\n \"scope\": \"global\",\n \"targetKind\": \"step\",\n \"target\": {\n \"kind\": \"step\",\n \"resolver\": \"steps-array\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"label\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"optional\": {\n \"type\": \"boolean\"\n },\n \"editable\": {\n \"type\": \"boolean\"\n },\n \"completed\": {\n \"type\": \"boolean\"\n },\n \"hasError\": {\n \"type\": \"boolean\"\n },\n \"state\": {\n \"type\": \"string\"\n },\n \"stateIcon\": {\n \"type\": \"string\"\n },\n \"errorMessage\": {\n \"type\": \"string\"\n },\n \"ariaLabel\": {\n \"type\": \"string\"\n },\n \"ariaLabelledby\": {\n \"type\": \"string\"\n },\n \"form\": {\n \"type\": \"object\"\n },\n \"stepBlocksBeforeForm\": {\n \"type\": \"object\"\n },\n \"stepBlocksAfterForm\": {\n \"type\": \"object\"\n },\n \"widgets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"steps[]\",\n \"key\": \"id\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"step-id-unique\",\n \"step-order-deterministic\",\n \"step-content-valid\"\n ],\n \"affectedPaths\": [\n \"steps[]\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"step.remove\",\n \"title\": \"Remove step\",\n \"scope\": \"layout\",\n \"targetKind\": \"step\",\n \"target\": {\n \"kind\": \"step\",\n \"resolver\": \"step-by-id-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"replacementStepId\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"stepper-step-remove\",\n \"handlerContract\": {\n \"reads\": [\n \"steps[]\",\n \"selectedIndex\"\n ],\n \"writes\": [\n \"steps[]\",\n \"selectedIndex\"\n ],\n \"identityKeys\": [\n \"steps[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"replacementStepId\": {\n \"type\": \"string\"\n }\n }\n },\n \"failureModes\": [\n \"step-not-found\",\n \"replacement-step-not-found\",\n \"content-removal-not-confirmed\"\n ],\n \"description\": \"Removes the target step by stable id and recomputes selectedIndex to preserve deterministic navigation state.\"\n }\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"step-exists\",\n \"selected-step-removal-safe\",\n \"step-content-removal-confirmed\"\n ],\n \"affectedPaths\": [\n \"steps[]\",\n \"selectedIndex\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-step-exists\",\n \"confirmation-collected\"\n ]\n },\n {\n \"operationId\": \"step.label.set\",\n \"title\": \"Set step label\",\n \"scope\": \"layout\",\n \"targetKind\": \"stepLabel\",\n \"target\": {\n \"kind\": \"stepLabel\",\n \"resolver\": \"step-by-id-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"label\"\n ],\n \"properties\": {\n \"label\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"steps[]\",\n \"key\": \"id\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"step-exists\",\n \"step-label-valid\"\n ],\n \"affectedPaths\": [\n \"steps[].label\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-step-exists\"\n ]\n },\n {\n \"operationId\": \"step.order.set\",\n \"title\": \"Reorder steps\",\n \"scope\": \"layout\",\n \"targetKind\": \"step\",\n \"target\": {\n \"kind\": \"step\",\n \"resolver\": \"step-by-id-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"beforeStepId\"\n ],\n \"properties\": {\n \"beforeStepId\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"stepper-step-reorder\",\n \"handlerContract\": {\n \"reads\": [\n \"steps[]\",\n \"selectedIndex\"\n ],\n \"writes\": [\n \"steps[]\",\n \"selectedIndex\"\n ],\n \"identityKeys\": [\n \"steps[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"beforeStepId\"\n ],\n \"properties\": {\n \"beforeStepId\": {\n \"type\": \"string\"\n }\n }\n },\n \"failureModes\": [\n \"step-not-found\",\n \"before-step-not-found\",\n \"ambiguous-step-target\"\n ],\n \"description\": \"Moves the target step before another stable step id and recomputes selectedIndex by preserving selected step identity.\"\n }\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"step-exists\",\n \"step-order-deterministic\",\n \"selected-index-preserved\"\n ],\n \"affectedPaths\": [\n \"steps[]\",\n \"selectedIndex\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-step-exists\"\n ]\n },\n {\n \"operationId\": \"step.optional.set\",\n \"title\": \"Set optional state\",\n \"scope\": \"interaction\",\n \"targetKind\": \"completionRule\",\n \"target\": {\n \"kind\": \"completionRule\",\n \"resolver\": \"step-by-id-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"optional\"\n ],\n \"properties\": {\n \"optional\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"steps[]\",\n \"key\": \"id\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"step-exists\",\n \"completion-rule-compatible\"\n ],\n \"affectedPaths\": [\n \"steps[].optional\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-step-exists\"\n ]\n },\n {\n \"operationId\": \"step.completed.set\",\n \"title\": \"Set completed state\",\n \"scope\": \"interaction\",\n \"targetKind\": \"completionRule\",\n \"target\": {\n \"kind\": \"completionRule\",\n \"resolver\": \"step-by-id-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"completed\"\n ],\n \"properties\": {\n \"completed\": {\n \"type\": \"boolean\"\n },\n \"hasError\": {\n \"type\": \"boolean\"\n },\n \"errorMessage\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"steps[]\",\n \"key\": \"id\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"step-exists\",\n \"completion-rule-compatible\",\n \"linear-completion-safe\"\n ],\n \"affectedPaths\": [\n \"steps[].completed\",\n \"steps[].hasError\",\n \"steps[].errorMessage\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-step-exists\"\n ]\n },\n {\n \"operationId\": \"navigation.mode.set\",\n \"title\": \"Set navigation mode\",\n \"scope\": \"interaction\",\n \"targetKind\": \"navigation\",\n \"target\": {\n \"kind\": \"navigation\",\n \"resolver\": \"stepper-navigation-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"linear\": {\n \"type\": \"boolean\"\n },\n \"visible\": {\n \"type\": \"boolean\"\n },\n \"prevLabel\": {\n \"type\": \"string\"\n },\n \"nextLabel\": {\n \"type\": \"string\"\n },\n \"prevIcon\": {\n \"type\": \"string\"\n },\n \"nextIcon\": {\n \"type\": \"string\"\n },\n \"variant\": {\n \"enum\": [\n \"basic\",\n \"flat\",\n \"stroked\",\n \"raised\"\n ]\n },\n \"color\": {\n \"enum\": [\n \"primary\",\n \"accent\",\n \"warn\"\n ]\n },\n \"align\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\",\n \"space-between\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"navigation\"\n },\n {\n \"kind\": \"set-value\",\n \"path\": \"linear\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"navigation-values-valid\",\n \"linear-navigation-valid\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"navigation.visible\",\n \"navigation.prevLabel\",\n \"navigation.nextLabel\",\n \"navigation.prevIcon\",\n \"navigation.nextIcon\",\n \"navigation.variant\",\n \"navigation.color\",\n \"navigation.align\",\n \"linear\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"orientation.set\",\n \"title\": \"Set orientation\",\n \"scope\": \"layout\",\n \"targetKind\": \"orientation\",\n \"target\": {\n \"kind\": \"orientation\",\n \"resolver\": \"stepper-layout-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"orientation\"\n ],\n \"properties\": {\n \"orientation\": {\n \"enum\": [\n \"horizontal\",\n \"vertical\"\n ]\n },\n \"headerPosition\": {\n \"enum\": [\n \"top\",\n \"bottom\"\n ]\n },\n \"labelPosition\": {\n \"enum\": [\n \"bottom\",\n \"end\"\n ]\n },\n \"density\": {\n \"enum\": [\n \"default\",\n \"comfortable\",\n \"compact\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"orientation\"\n },\n {\n \"kind\": \"set-value\",\n \"path\": \"headerPosition\"\n },\n {\n \"kind\": \"set-value\",\n \"path\": \"labelPosition\"\n },\n {\n \"kind\": \"set-value\",\n \"path\": \"density\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"orientation-values-valid\",\n \"label-position-compatible\",\n \"editor-runtime-round-trip\"\n ],\n \"affectedPaths\": [\n \"orientation\",\n \"headerPosition\",\n \"labelPosition\",\n \"density\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"validation.rule.add\",\n \"title\": \"Add validation rule\",\n \"scope\": \"rule\",\n \"targetKind\": \"validationGate\",\n \"target\": {\n \"kind\": \"validationGate\",\n \"resolver\": \"step-validation-by-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"stepId\",\n \"rule\"\n ],\n \"properties\": {\n \"stepId\": {\n \"type\": \"string\"\n },\n \"fieldName\": {\n \"type\": \"string\"\n },\n \"childComponentId\": {\n \"type\": \"string\"\n },\n \"rule\": {\n \"type\": \"object\"\n },\n \"message\": {\n \"type\": \"string\"\n },\n \"remote\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"stepper-validation-rule-upsert\",\n \"handlerContract\": {\n \"reads\": [\n \"steps[]\",\n \"steps[].form\",\n \"steps[].form.config\",\n \"steps[].widgets\",\n \"linear\"\n ],\n \"writes\": [\n \"steps[].form.config\",\n \"steps[].form.config.sections\",\n \"steps[].form.config.fieldMetadata\",\n \"steps[].hasError\",\n \"steps[].errorMessage\"\n ],\n \"identityKeys\": [\n \"steps[].id\",\n \"steps[].form.formId\",\n \"steps[].widgets[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"stepId\",\n \"rule\"\n ],\n \"properties\": {\n \"stepId\": {\n \"type\": \"string\"\n },\n \"fieldName\": {\n \"type\": \"string\"\n },\n \"childComponentId\": {\n \"type\": \"string\"\n },\n \"rule\": {\n \"type\": \"object\"\n },\n \"message\": {\n \"type\": \"string\"\n },\n \"remote\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"failureModes\": [\n \"step-not-found\",\n \"validation-target-not-found\",\n \"dynamic-form-config-missing\",\n \"remote-validation-requires-host-serverValidate\"\n ],\n \"description\": \"Projects a validation rule into the step dynamic-form config or delegates it to the host serverValidate gate without redefining child component contracts.\"\n }\n }\n ],\n \"validators\": [\n \"step-exists\",\n \"validation-rule-target-exists\",\n \"validation-rule-compatible\",\n \"server-validation-delegated\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"affectedPaths\": [\n \"steps[].form.config\",\n \"steps[].form.config.sections\",\n \"steps[].form.config.fieldMetadata\",\n \"steps[].hasError\",\n \"steps[].errorMessage\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-step-exists\"\n ]\n },\n {\n \"operationId\": \"step.content.set\",\n \"title\": \"Set step content\",\n \"scope\": \"layout\",\n \"targetKind\": \"stepContent\",\n \"target\": {\n \"kind\": \"stepContent\",\n \"resolver\": \"step-content-by-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"optional\": {\n \"type\": \"boolean\"\n },\n \"editable\": {\n \"type\": \"boolean\"\n },\n \"completed\": {\n \"type\": \"boolean\"\n },\n \"hasError\": {\n \"type\": \"boolean\"\n },\n \"state\": {\n \"type\": \"string\"\n },\n \"stateIcon\": {\n \"type\": \"string\"\n },\n \"errorMessage\": {\n \"type\": \"string\"\n },\n \"form\": {\n \"type\": \"object\"\n },\n \"stepBlocksBeforeForm\": {\n \"type\": \"object\"\n },\n \"stepBlocksAfterForm\": {\n \"type\": \"object\"\n },\n \"widgets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\"\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"steps[]\",\n \"key\": \"id\"\n }\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false,\n \"validators\": [\n \"step-exists\",\n \"step-content-valid\",\n \"nested-widget-contract-delegated\"\n ],\n \"affectedPaths\": [\n \"steps[].form\",\n \"steps[].stepBlocksBeforeForm\",\n \"steps[].stepBlocksAfterForm\",\n \"steps[].widgets\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-step-exists\"\n ]\n }\n ],\n \"validators\": [\n {\n \"validatorId\": \"step-id-unique\",\n \"level\": \"error\",\n \"code\": \"PSTEP001\",\n \"description\": \"Step ids must be unique and stable within config.steps[].\"\n },\n {\n \"validatorId\": \"step-exists\",\n \"level\": \"error\",\n \"code\": \"PSTEP002\",\n \"description\": \"Target step must exist before applying the operation.\"\n },\n {\n \"validatorId\": \"step-order-deterministic\",\n \"level\": \"error\",\n \"code\": \"PSTEP003\",\n \"description\": \"Step ordering must use stable ids, not transient array index as identity.\"\n },\n {\n \"validatorId\": \"step-content-valid\",\n \"level\": \"error\",\n \"code\": \"PSTEP004\",\n \"description\": \"Step content must remain valid Dynamic Form config, RichContentDocument or WidgetDefinition[] metadata.\"\n },\n {\n \"validatorId\": \"step-content-removal-confirmed\",\n \"level\": \"error\",\n \"code\": \"PSTEP005\",\n \"description\": \"Removing a step with form, rich content or widgets is destructive and requires confirmation.\"\n },\n {\n \"validatorId\": \"selected-step-removal-safe\",\n \"level\": \"error\",\n \"code\": \"PSTEP006\",\n \"description\": \"Removing the selected step requires a deterministic replacement selected index or explicit confirmation.\"\n },\n {\n \"validatorId\": \"selected-index-preserved\",\n \"level\": \"warning\",\n \"code\": \"PSTEP007\",\n \"description\": \"Reordering steps must preserve selected step identity and only recompute selectedIndex after resolution.\"\n },\n {\n \"validatorId\": \"step-label-valid\",\n \"level\": \"error\",\n \"code\": \"PSTEP008\",\n \"description\": \"Step labels must be non-empty text values after localization/domain projection.\"\n },\n {\n \"validatorId\": \"completion-rule-compatible\",\n \"level\": \"error\",\n \"code\": \"PSTEP009\",\n \"description\": \"Optional, completed, hasError and errorMessage flags must remain compatible with Material stepper semantics.\"\n },\n {\n \"validatorId\": \"linear-completion-safe\",\n \"level\": \"warning\",\n \"code\": \"PSTEP010\",\n \"description\": \"Forcing completion in linear mode should not bypass invalid Dynamic Form or server validation gates.\"\n },\n {\n \"validatorId\": \"navigation-values-valid\",\n \"level\": \"error\",\n \"code\": \"PSTEP011\",\n \"description\": \"Navigation labels, icons, variant, color and alignment must match StepperMetadata enums and runtime bindings.\"\n },\n {\n \"validatorId\": \"linear-navigation-valid\",\n \"level\": \"error\",\n \"code\": \"PSTEP012\",\n \"description\": \"Linear navigation depends on form validity and must not be replaced by host-local navigation rules.\"\n },\n {\n \"validatorId\": \"orientation-values-valid\",\n \"level\": \"error\",\n \"code\": \"PSTEP013\",\n \"description\": \"Orientation, headerPosition, labelPosition and density values must match StepperMetadata enums.\"\n },\n {\n \"validatorId\": \"label-position-compatible\",\n \"level\": \"warning\",\n \"code\": \"PSTEP014\",\n \"description\": \"labelPosition only affects horizontal steppers and must round-trip without corrupting vertical layout.\"\n },\n {\n \"validatorId\": \"validation-rule-target-exists\",\n \"level\": \"error\",\n \"code\": \"PSTEP015\",\n \"description\": \"Validation rules must reference an existing field inside the step form or an existing child widget/component.\"\n },\n {\n \"validatorId\": \"validation-rule-compatible\",\n \"level\": \"error\",\n \"code\": \"PSTEP016\",\n \"description\": \"Validation rules must compile into Dynamic Form metadata or host serverValidate delegation without inventing a parallel stepper rule DSL.\"\n },\n {\n \"validatorId\": \"server-validation-delegated\",\n \"level\": \"info\",\n \"code\": \"PSTEP017\",\n \"description\": \"Remote validation remains delegated to the serverValidate input and is not implemented as hidden stepper metadata.\"\n },\n {\n \"validatorId\": \"nested-widget-contract-delegated\",\n \"level\": \"info\",\n \"code\": \"PSTEP018\",\n \"description\": \"Nested widget content remains governed by the child component contract and widgetEvent path delegation.\"\n },\n {\n \"validatorId\": \"editor-runtime-round-trip\",\n \"level\": \"error\",\n \"code\": \"PSTEP019\",\n \"description\": \"Settings Panel editor, runtime and registry projection must preserve step ids, order, navigation and validation intent.\"\n }\n ],\n \"roundTripRequirements\": [\n \"Operations must preserve stable step ids; array index may be used only as a resolver fallback, never as canonical identity.\",\n \"Settings Panel editor, runtime persistence and registry projection must round-trip StepperMetadata without losing step ids, order or selectedIndex.\",\n \"Validation authoring must target Dynamic Form metadata or the host-owned serverValidate gate; the stepper manifest must not define a parallel validation DSL.\",\n \"Nested widgets remain delegated through WidgetDefinition and widgetEvent path enrichment instead of being redefined by the stepper contract.\",\n \"Removing a step with form, rich content or widgets requires explicit confirmation because it can delete nested authoring content.\"\n ],\n \"examples\": [\n {\n \"id\": \"add-review-step\",\n \"request\": \"Add a review step after the documents step.\",\n \"operationId\": \"step.add\",\n \"params\": {\n \"id\": \"review\",\n \"label\": \"Review\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"rename-profile-step\",\n \"request\": \"Rename the profile step to Customer profile.\",\n \"operationId\": \"step.label.set\",\n \"target\": \"profile\",\n \"params\": {\n \"label\": \"Customer profile\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"move-confirm-before-submit\",\n \"request\": \"Move confirm before submit.\",\n \"operationId\": \"step.order.set\",\n \"target\": \"confirm\",\n \"params\": {\n \"beforeStepId\": \"submit\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"make-upload-optional\",\n \"request\": \"Make the upload step optional.\",\n \"operationId\": \"step.optional.set\",\n \"target\": \"upload\",\n \"params\": {\n \"optional\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-linear-navigation\",\n \"request\": \"Use linear navigation with Back and Continue labels.\",\n \"operationId\": \"navigation.mode.set\",\n \"params\": {\n \"linear\": true,\n \"prevLabel\": \"Back\",\n \"nextLabel\": \"Continue\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"switch-vertical-layout\",\n \"request\": \"Make the stepper vertical.\",\n \"operationId\": \"orientation.set\",\n \"params\": {\n \"orientation\": \"vertical\",\n \"headerPosition\": \"top\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"require-email-on-profile\",\n \"request\": \"Require email before continuing from profile.\",\n \"operationId\": \"validation.rule.add\",\n \"target\": \"profile\",\n \"params\": {\n \"stepId\": \"profile\",\n \"fieldName\": \"email\",\n \"rule\": {\n \"required\": true\n },\n \"message\": \"Email is required\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"reject-duplicate-step-id\",\n \"request\": \"Add another step with id review.\",\n \"operationId\": \"step.add\",\n \"params\": {\n \"id\": \"review\",\n \"label\": \"Duplicate review\"\n },\n \"isPositive\": false\n },\n {\n \"id\": \"confirm-remove-content-step\",\n \"request\": \"Remove the documents step that contains an upload widget.\",\n \"operationId\": \"step.remove\",\n \"target\": \"documents\",\n \"params\": {\n \"replacementStepId\": \"review\"\n },\n \"isPositive\": true\n }\n ]\n}",
|
|
2161
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-stepper\",\"ownerPackage\":\"@praxisui/stepper\",\"configSchemaId\":\"StepperMetadata\",\"chunkSection\":\"identity\"}",
|
|
2152
2162
|
"sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
|
|
2153
|
-
"contentHash": "
|
|
2163
|
+
"contentHash": "cb9550199c31c1585501df60abcaa660e61095cd0fcd3ae059c97a1a83cdf754",
|
|
2154
2164
|
"sourceKind": "component_definition",
|
|
2155
2165
|
"sourceId": "praxis-stepper",
|
|
2156
2166
|
"corpusVersion": "1.0.0"
|
|
2157
2167
|
},
|
|
2158
2168
|
{
|
|
2159
|
-
"chunkIndex":
|
|
2169
|
+
"chunkIndex": 4,
|
|
2170
|
+
"chunkKind": "authoring_manifest",
|
|
2171
|
+
"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.\"}]}",
|
|
2172
|
+
"sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
|
|
2173
|
+
"contentHash": "35c638de6e59fbded5dd8eb964f6ddc37347762ef9432794788b547605acb6a7",
|
|
2174
|
+
"sourceKind": "component_definition",
|
|
2175
|
+
"sourceId": "praxis-stepper",
|
|
2176
|
+
"corpusVersion": "1.0.0"
|
|
2177
|
+
},
|
|
2178
|
+
{
|
|
2179
|
+
"chunkIndex": 5,
|
|
2180
|
+
"chunkKind": "authoring_manifest",
|
|
2181
|
+
"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.\"}]}",
|
|
2182
|
+
"sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
|
|
2183
|
+
"contentHash": "cc6becd0bb317cebbebaf62f0acaa26f24d035a44add20255fbb49c74f9ae4b5",
|
|
2184
|
+
"sourceKind": "component_definition",
|
|
2185
|
+
"sourceId": "praxis-stepper",
|
|
2186
|
+
"corpusVersion": "1.0.0"
|
|
2187
|
+
},
|
|
2188
|
+
{
|
|
2189
|
+
"chunkIndex": 6,
|
|
2190
|
+
"chunkKind": "authoring_manifest",
|
|
2191
|
+
"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\"]}]}",
|
|
2192
|
+
"sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
|
|
2193
|
+
"contentHash": "25e62c764bfc58c3437c64c65c6cad9d2eb3decef3ac90b16e86c89cd6eb064a",
|
|
2194
|
+
"sourceKind": "component_definition",
|
|
2195
|
+
"sourceId": "praxis-stepper",
|
|
2196
|
+
"corpusVersion": "1.0.0"
|
|
2197
|
+
},
|
|
2198
|
+
{
|
|
2199
|
+
"chunkIndex": 7,
|
|
2200
|
+
"chunkKind": "authoring_manifest",
|
|
2201
|
+
"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\"]}]}",
|
|
2202
|
+
"sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
|
|
2203
|
+
"contentHash": "02efe578f9386975f4e9d86258b756d34478c8389ea1856a4c884ecaf6acbf01",
|
|
2204
|
+
"sourceKind": "component_definition",
|
|
2205
|
+
"sourceId": "praxis-stepper",
|
|
2206
|
+
"corpusVersion": "1.0.0"
|
|
2207
|
+
},
|
|
2208
|
+
{
|
|
2209
|
+
"chunkIndex": 8,
|
|
2210
|
+
"chunkKind": "authoring_manifest",
|
|
2211
|
+
"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.\"}]}",
|
|
2212
|
+
"sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
|
|
2213
|
+
"contentHash": "1e805883ecd759c2e32633dd1e432f8b7dc8ef0322a5952dd7a8377f65d48fbc",
|
|
2214
|
+
"sourceKind": "component_definition",
|
|
2215
|
+
"sourceId": "praxis-stepper",
|
|
2216
|
+
"corpusVersion": "1.0.0"
|
|
2217
|
+
},
|
|
2218
|
+
{
|
|
2219
|
+
"chunkIndex": 9,
|
|
2220
|
+
"chunkKind": "authoring_manifest",
|
|
2221
|
+
"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.\"]}",
|
|
2222
|
+
"sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
|
|
2223
|
+
"contentHash": "3760b39055d2d9a52d0cc0e4304f906bd2b2d7792d30c0f369f4d9fc3d242b00",
|
|
2224
|
+
"sourceKind": "component_definition",
|
|
2225
|
+
"sourceId": "praxis-stepper",
|
|
2226
|
+
"corpusVersion": "1.0.0"
|
|
2227
|
+
},
|
|
2228
|
+
{
|
|
2229
|
+
"chunkIndex": 10,
|
|
2230
|
+
"chunkKind": "authoring_manifest",
|
|
2231
|
+
"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}]}",
|
|
2232
|
+
"sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
|
|
2233
|
+
"contentHash": "2b06c72a5a618d59424030c23688de517cfe5cb8cb12c7ae69f0d9fa826bc60a",
|
|
2234
|
+
"sourceKind": "component_definition",
|
|
2235
|
+
"sourceId": "praxis-stepper",
|
|
2236
|
+
"corpusVersion": "1.0.0"
|
|
2237
|
+
},
|
|
2238
|
+
{
|
|
2239
|
+
"chunkIndex": 11,
|
|
2160
2240
|
"chunkKind": "context_pack",
|
|
2161
|
-
"content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"optionsByPath\": {\n \"orientation\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"horizontal\",\n \"label\": \"Horizontal\"\n },\n {\n \"value\": \"vertical\",\n \"label\": \"Vertical\"\n }\n ]\n },\n \"headerPosition\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"top\",\n \"label\": \"Top\"\n },\n {\n \"value\": \"bottom\",\n \"label\": \"Bottom\"\n }\n ]\n },\n \"labelPosition\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"bottom\",\n \"label\": \"Bottom\"\n },\n {\n \"value\": \"end\",\n \"label\": \"End\"\n }\n ]\n },\n \"density\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"default\",\n \"label\": \"Default\"\n },\n {\n \"value\": \"comfortable\",\n \"label\": \"Comfortable\"\n },\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n }\n ]\n },\n \"color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"navigation.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"basic\",\n \"label\": \"Basic\"\n },\n {\n \"value\": \"flat\",\n \"label\": \"Flat\"\n },\n {\n \"value\": \"stroked\",\n \"label\": \"Stroked\"\n },\n {\n \"value\": \"raised\",\n \"label\": \"Raised\"\n }\n ]\n },\n \"navigation.align\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"end\",\n \"label\": \"End\"\n },\n {\n \"value\": \"space-between\",\n \"label\": \"Space between\"\n }\n ]\n },\n \"navigation.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"steps[].form.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"create\",\n \"label\": \"Create\"\n },\n {\n \"value\": \"edit\",\n \"label\": \"Edit\"\n },\n {\n \"value\": \"view\",\n \"label\": \"View\"\n }\n ]\n },\n \"steps[].form.schemaSource\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"resource\",\n \"label\": \"Resource\"\n },\n {\n \"value\": \"filter\",\n \"label\": \"Filter\"\n }\n ]\n },\n \"appearance.iconsSet\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"material-symbols-outlined\",\n \"label\": \"Outlined\"\n },\n {\n \"value\": \"material-symbols-rounded\",\n \"label\": \"Rounded\"\n },\n {\n \"value\": \"material-symbols-sharp\",\n \"label\": \"Sharp\"\n }\n ]\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"orientation.set\",\n \"intentExamples\": [\n \"orientation\",\n \"horizontal\",\n \"vertical\"\n ],\n \"patchTemplate\": {\n \"orientation\": \"{{value}}\"\n }\n },\n {\n \"id\": \"headerPosition.set\",\n \"intentExamples\": [\n \"header position\",\n \"header\"\n ],\n \"patchTemplate\": {\n \"headerPosition\": \"{{value}}\"\n }\n },\n {\n \"id\": \"labelPosition.set\",\n \"intentExamples\": [\n \"label position\",\n \"label align\"\n ],\n \"patchTemplate\": {\n \"labelPosition\": \"{{value}}\"\n }\n },\n {\n \"id\": \"density.set\",\n \"intentExamples\": [\n \"density\",\n \"compact\",\n \"comfortable\"\n ],\n \"patchTemplate\": {\n \"density\": \"{{value}}\"\n }\n },\n {\n \"id\": \"color.set\",\n \"intentExamples\": [\n \"color\",\n \"theme color\"\n ],\n \"patchTemplate\": {\n \"color\": \"{{value}}\"\n }\n },\n {\n \"id\": \"linear.enable\",\n \"intentExamples\": [\n \"linear\",\n \"sequential\",\n \"require order\"\n ],\n \"patchTemplate\": {\n \"linear\": true\n }\n },\n {\n \"id\": \"linear.disable\",\n \"intentExamples\": [\n \"non linear\",\n \"free navigation\"\n ],\n \"patchTemplate\": {\n \"linear\": false\n }\n },\n {\n \"id\": \"selectedIndex.set\",\n \"intentExamples\": [\n \"select step\",\n \"active step\",\n \"selected index\"\n ],\n \"patchTemplate\": {\n \"selectedIndex\": \"{{value}}\"\n }\n },\n {\n \"id\": \"navigation.visible.enable\",\n \"intentExamples\": [\n \"show navigation\",\n \"show buttons\"\n ],\n \"patchTemplate\": {\n \"navigation\": {\n \"visible\": true\n }\n }\n },\n {\n \"id\": \"navigation.visible.disable\",\n \"intentExamples\": [\n \"hide navigation\",\n \"hide buttons\"\n ],\n \"patchTemplate\": {\n \"navigation\": {\n \"visible\": false\n }\n }\n },\n {\n \"id\": \"navigation.labels.set\",\n \"intentExamples\": [\n \"next label\",\n \"previous label\",\n \"navigation labels\"\n ],\n \"patchTemplate\": {\n \"navigation\": {\n \"prevLabel\": \"{{params.prev}}\",\n \"nextLabel\": \"{{params.next}}\"\n }\n }\n },\n {\n \"id\": \"step.add\",\n \"intentExamples\": [\n \"add step\",\n \"new step\",\n \"create step\"\n ],\n \"patchTemplate\": {\n \"steps\": [\n {\n \"id\": \"{{target}}\",\n \"label\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"step.label.set\",\n \"intentExamples\": [\n \"rename step\",\n \"step label\"\n ],\n \"patchTemplate\": {\n \"steps\": [\n {\n \"id\": \"{{target}}\",\n \"label\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"step.description.set\",\n \"intentExamples\": [\n \"step description\",\n \"description\"\n ],\n \"patchTemplate\": {\n \"steps\": [\n {\n \"id\": \"{{target}}\",\n \"description\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"step.optional.enable\",\n \"intentExamples\": [\n \"optional step\",\n \"not required\"\n ],\n \"patchTemplate\": {\n \"steps\": [\n {\n \"id\": \"{{target}}\",\n \"optional\": true\n }\n ]\n }\n },\n {\n \"id\": \"step.optional.disable\",\n \"intentExamples\": [\n \"required step\"\n ],\n \"patchTemplate\": {\n \"steps\": [\n {\n \"id\": \"{{target}}\",\n \"optional\": false\n }\n ]\n }\n },\n {\n \"id\": \"step.completed.set\",\n \"intentExamples\": [\n \"mark completed\",\n \"completed step\"\n ],\n \"patchTemplate\": {\n \"steps\": [\n {\n \"id\": \"{{target}}\",\n \"completed\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"step.error.set\",\n \"intentExamples\": [\n \"mark error\",\n \"step error\"\n ],\n \"patchTemplate\": {\n \"steps\": [\n {\n \"id\": \"{{target}}\",\n \"hasError\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"step.form.resourcePath.set\",\n \"intentExamples\": [\n \"form resource\",\n \"resource path\",\n \"step form\"\n ],\n \"patchTemplate\": {\n \"steps\": [\n {\n \"id\": \"{{target}}\",\n \"form\": {\n \"resourcePath\": \"{{value}}\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"step.form.mode.set\",\n \"intentExamples\": [\n \"form mode\",\n \"create mode\",\n \"edit mode\",\n \"view mode\"\n ],\n \"patchTemplate\": {\n \"steps\": [\n {\n \"id\": \"{{target}}\",\n \"form\": {\n \"mode\": \"{{value}}\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"step.form.formId.set\",\n \"intentExamples\": [\n \"form id\",\n \"form reference\"\n ],\n \"patchTemplate\": {\n \"steps\": [\n {\n \"id\": \"{{target}}\",\n \"form\": {\n \"formId\": \"{{value}}\"\n }\n }\n ]\n }\n }\n ],\n \"fieldResolvers\": {\n \"steps[]\": [\n \"id\",\n \"label\"\n ]\n },\n \"hints\": [\n \"Use steps[].id or steps[].label as merge keys; avoid array indexes.\",\n \"Step form config merges by id; avoid replacing entire steps array.\",\n \"Selected index expects a zero-based number.\",\n \"DOC: Widget purpose: stepper with ordered steps and optional per-step forms.\",\n \"DOC: Host inputs: stepperId (required) and config (optional).\",\n \"DOC: When config is provided, steps[] should be present; each step requires label.\",\n \"DOC: Optional step.form embeds a dynamic form; use form.resourcePath + form.config as needed.\"\n ]\n }\n}",
|
|
2241
|
+
"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.\"]}}",
|
|
2162
2242
|
"sourcePointer": "projects/praxis-stepper/src/lib/ai/stepper-context-pack.ts",
|
|
2163
|
-
"contentHash": "
|
|
2243
|
+
"contentHash": "e713a30532d577b7641ae4cf0a430964c3391edab534eb560d80d54d1c768e7f",
|
|
2164
2244
|
"sourceKind": "component_definition",
|
|
2165
2245
|
"sourceId": "praxis-stepper",
|
|
2166
2246
|
"corpusVersion": "1.0.0"
|
|
2167
2247
|
},
|
|
2168
2248
|
{
|
|
2169
|
-
"chunkIndex":
|
|
2249
|
+
"chunkIndex": 12,
|
|
2170
2250
|
"chunkKind": "recipe",
|
|
2171
|
-
"content": "{\n \"_comment\": \"Wizard avançado com stepper e formulários dinâmicos (Acesso > Conta > Preferências).\",\n \"templateMeta\": {\n \"registryKey\": \"praxis-stepper\",\n \"variantId\": \"advanced-wizard\",\n \"useWhen\": \"Criar um wizard avançado de onboarding com conteúdo editorial e CTA sticky.\",\n \"examplePrompts\": [\n \"wizard avançado em três passos\",\n \"cadastro guiado com preferências\"\n ]\n },\n \"id\": \"advanced-onboarding-wizard\",\n \"brand\": \"PRAXIS UI\",\n \"progress\": {\n \"variant\": \"line\",\n \"showLabels\": true,\n \"labelPosition\": \"bottom\"\n },\n \"cta\": {\n \"label\": \"Continuar\",\n \"action\": \"next\",\n \"secondaryLabel\": \"Voltar\",\n \"secondaryAction\": \"prev\",\n \"sticky\": true\n },\n \"preferences\": {\n \"stepId\": \"preferences\",\n \"storageKey\": \"praxis:advanced-wizard\",\n \"persistFields\": [\"novidadesProduto\", \"eventosConteudo\", \"recomendacoes\"]\n },\n \"theme\": {\n \"praxis-wizard-card-bg\": \"#fff7ef\",\n \"md-sys-color-surface\": \"#fff7ef\",\n \"md-sys-color-on-surface\": \"#33302e\",\n \"praxis-wizard-accent\": \"#0d7680\",\n \"praxis-wizard-border\": \"#cfcfcf\",\n \"md-sys-color-outline-variant\": \"#cfcfcf\",\n \"ft-font-head\": \"Georgia, \\\"Times New Roman\\\", serif\",\n \"ft-font-body\": \"\\\"Source Sans 3\\\", \\\"Segoe UI\\\", Arial, sans-serif\",\n \"ft-radius\": \"0\",\n \"ft-shadow\": \"none\",\n \"ft-header-border\": \"1px solid #cfcfcf\"\n },\n \"steps\": [\n {\n \"id\": \"access\",\n \"label\": \"Acesso\",\n \"title\": \"Crie sua conta\",\n \"subtitle\": \"Ative seu acesso em poucos passos e personalize a experiência desde o início.\",\n \"zones\": {\n \"intro\": [\n {\n \"type\": \"benefitsGrid\",\n \"title\": \"Por que se cadastrar?\",\n \"columns\": 4,\n \"boxed\": true,\n \"items\": [\n {\n \"icon\": \"format_quote\",\n \"title\": \"Conteúdo relevante\",\n \"text\": \"Receba atualizações, novidades e materiais selecionados para o seu perfil.\"\n },\n {\n \"icon\": \"edit_note\",\n \"title\": \"Fluxo guiado\",\n \"text\": \"Conclua o cadastro com uma jornada simples, clara e orientada por etapas.\"\n },\n {\n \"icon\": \"bookmarks\",\n \"title\": \"Preferências salvas\",\n \"text\": \"Defina suas escolhas iniciais e retome o processo sem perder o progresso.\"\n },\n {\n \"icon\": \"mail\",\n \"title\": \"Comunicação sob controle\",\n \"text\": \"Escolha como deseja receber novidades, alertas e recomendações.\"\n }\n ]\n }\n ],\n \"footer\": [\n {\n \"type\": \"inlineNotice\",\n \"text\": \"Ao continuar, você concorda com os termos de uso e com a política de privacidade da plataforma.\"\n }\n ]\n },\n \"cta\": {\n \"label\": \"Começar cadastro\",\n \"action\": \"next\"\n },\n \"form\": {\n \"config\": {\n \"sections\": [\n {\n \"id\": \"access-section\",\n \"rows\": [\n {\n \"columns\": [\n {\n \"fields\": [\"confirmAge\", \"receberNovidades\"]\n }\n ]\n }\n ]\n }\n ],\n \"fieldMetadata\": [\n {\n \"name\": \"confirmAge\",\n \"label\": \"\",\n \"controlType\": \"checkbox\",\n \"required\": true,\n \"layout\": \"horizontal\",\n \"options\": [\n {\n \"label\": \"Confirmo que li e aceito os termos de uso e a política de privacidade.\",\n \"value\": true\n }\n ]\n },\n {\n \"name\": \"receberNovidades\",\n \"label\": \"Receber novidades por e-mail\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"Você pode alterar essa preferência a qualquer momento nas configurações da conta.\"\n }\n ],\n \"actions\": {\n \"submit\": { \"visible\": false, \"label\": \"Salvar\" },\n \"cancel\": { \"visible\": false, \"label\": \"Cancelar\" },\n \"reset\": { \"visible\": false, \"label\": \"Limpar\" }\n }\n }\n }\n },\n {\n \"id\": \"account\",\n \"label\": \"Conta\",\n \"title\": \"Configure seu acesso\",\n \"subtitle\": \"Esses dados serão usados para criar e proteger sua conta.\",\n \"zones\": {\n \"intro\": [\n {\n \"type\": \"inlineNotice\",\n \"text\": \"Use um e-mail válido para confirmar o cadastro e recuperar o acesso quando necessário.\",\n \"tone\": \"info\"\n }\n ],\n \"footer\": [\n {\n \"type\": \"inlineNotice\",\n \"text\": \"Mensagens de segurança e comunicações operacionais continuam ativas mesmo se você desativar novidades.\"\n }\n ]\n },\n \"form\": {\n \"config\": {\n \"sections\": [\n {\n \"id\": \"account-section\",\n \"rows\": [\n {\n \"columns\": [\n { \"fields\": [\"email\", \"password\"] },\n { \"fields\": [\"aceitaComunicacoes\"] }\n ]\n }\n ]\n }\n ],\n \"fieldMetadata\": [\n {\n \"name\": \"email\",\n \"label\": \"E-mail\",\n \"controlType\": \"email\",\n \"required\": true,\n \"placeholder\": \"Digite seu e-mail\"\n },\n {\n \"name\": \"password\",\n \"label\": \"Senha\",\n \"controlType\": \"password\",\n \"required\": true,\n \"placeholder\": \"Crie uma senha\",\n \"hint\": \"Use 8 ou mais caracteres, combinando letras, números e símbolos.\",\n \"validators\": {\n \"minLength\": 8\n },\n \"revealToggle\": {\n \"enabled\": true,\n \"style\": \"icon\",\n \"showLabel\": \"Mostrar senha\",\n \"hideLabel\": \"Ocultar senha\",\n \"ariaLabel\": \"Alternar visibilidade da senha\",\n \"iconShow\": \"visibility\",\n \"iconHide\": \"visibility_off\"\n }\n },\n {\n \"name\": \"aceitaComunicacoes\",\n \"label\": \"Receber comunicações da plataforma\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"Inclui novidades de produto, convites para eventos e conteúdos de apoio.\"\n }\n ],\n \"actions\": {\n \"submit\": { \"visible\": false, \"label\": \"Salvar\" },\n \"cancel\": { \"visible\": false, \"label\": \"Cancelar\" },\n \"reset\": { \"visible\": false, \"label\": \"Limpar\" }\n }\n }\n }\n },\n {\n \"id\": \"preferences\",\n \"label\": \"Preferências\",\n \"title\": \"Personalize sua experiência\",\n \"subtitle\": \"Você pode alterar essas configurações a qualquer momento no painel da conta.\",\n \"description\": \"Escolha quais comunicações e recomendações fazem sentido para o seu contexto.\",\n \"zones\": {\n \"footer\": [\n {\n \"type\": \"divider\"\n },\n {\n \"type\": \"inlineNotice\",\n \"text\": \"Alertas de segurança e mensagens essenciais sobre a conta permanecem ativos para garantir a operação.\"\n }\n ]\n },\n \"cta\": {\n \"label\": \"Concluir cadastro\",\n \"action\": \"submit\",\n \"secondaryLabel\": \"Voltar\",\n \"secondaryAction\": \"prev\"\n },\n \"form\": {\n \"config\": {\n \"sections\": [\n {\n \"id\": \"prefs-section\",\n \"rows\": [\n {\n \"columns\": [\n { \"fields\": [\"novidadesProduto\"] },\n { \"fields\": [\"eventosConteudo\"] },\n { \"fields\": [\"recomendacoes\"] }\n ]\n }\n ]\n }\n ],\n \"fieldMetadata\": [\n {\n \"name\": \"novidadesProduto\",\n \"label\": \"Novidades de produto\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"Receba lançamentos, melhorias e comunicados importantes sobre a plataforma.\"\n },\n {\n \"name\": \"eventosConteudo\",\n \"label\": \"Eventos e conteúdos especiais\",\n \"controlType\": \"toggle\",\n \"defaultValue\": true,\n \"hint\": \"Seja avisado sobre webinars, materiais técnicos e convites para trilhas de capacitação.\"\n },\n {\n \"name\": \"recomendacoes\",\n \"label\": \"Recomendações personalizadas\",\n \"controlType\": \"toggle\",\n \"defaultValue\": false,\n \"hint\": \"Receba sugestões de recursos e exemplos com base nas suas preferências de uso.\"\n }\n ],\n \"actions\": {\n \"submit\": { \"visible\": false, \"label\": \"Salvar\" },\n \"cancel\": { \"visible\": false, \"label\": \"Cancelar\" },\n \"reset\": { \"visible\": false, \"label\": \"Limpar\" }\n }\n }\n }\n }\n ]\n}\n",
|
|
2251
|
+
"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\"}}}}}]}",
|
|
2172
2252
|
"sourcePointer": "examples/ai-recipes/praxis-ft-wizard.json",
|
|
2173
|
-
"contentHash": "
|
|
2253
|
+
"contentHash": "929310a34d60e5dafc1e088e5060a804e137c2d0dc4399d709fdb8314f67bc62",
|
|
2174
2254
|
"sourceKind": "component_definition",
|
|
2175
2255
|
"sourceId": "praxis-stepper",
|
|
2176
2256
|
"corpusVersion": "1.0.0"
|
|
2177
2257
|
},
|
|
2178
2258
|
{
|
|
2179
|
-
"chunkIndex":
|
|
2259
|
+
"chunkIndex": 13,
|
|
2180
2260
|
"chunkKind": "recipe",
|
|
2181
|
-
"content": "{\n \"_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.\",\n \"templateMeta\": {\n \"registryKey\": \"praxis-stepper\",\n \"variantId\": \"onboarding-workflow\",\n \"useWhen\": \"Create a guided multi-step workflow with forms, rich content, nested widgets and event bubbling.\",\n \"examplePrompts\": [\n \"create an employee onboarding stepper\",\n \"show a stepper with a form step, upload step and approval checklist\",\n \"configure praxis-stepper with nested widgets\"\n ]\n },\n \"authoringGuidance\": [\n \"Use a stable stepperId for persistence and configuration editing.\",\n \"Use steps[].form.config for step-local Dynamic Form sections, fieldMetadata, validators and formRules.\",\n \"Use stepBlocksBeforeForm and stepBlocksAfterForm for copy, badges, notices and other editorial content.\",\n \"Use steps[].widgets only for runtime components such as praxis-files-upload or praxis-list.\",\n \"Do not use legacy steps[].content or icon-only fields as the source of runtime content.\"\n ],\n \"config\": {\n \"orientation\": \"horizontal\",\n \"linear\": true,\n \"labelPosition\": \"bottom\",\n \"selectedIndex\": 0,\n \"density\": \"comfortable\",\n \"appearance\": {\n \"preset\": \"ft-light\",\n \"icons\": {\n \"number\": \"radio_button_unchecked\",\n \"done\": \"check_circle\",\n \"edit\": \"edit_note\",\n \"error\": \"error\"\n }\n },\n \"navigation\": {\n \"visible\": true,\n \"prevLabel\": \"Back\",\n \"nextLabel\": \"Continue\",\n \"prevIcon\": \"arrow_back\",\n \"nextIcon\": \"arrow_forward\",\n \"variant\": \"stroked\",\n \"color\": \"primary\",\n \"align\": \"space-between\"\n },\n \"steps\": [\n {\n \"id\": \"employee-intake\",\n \"label\": \"Employee\",\n \"description\": \"Capture identity, assignment and workflow-only risk fields.\",\n \"editable\": true,\n \"stepBlocksBeforeForm\": {\n \"kind\": \"praxis.rich-content\",\n \"version\": \"1.0.0\",\n \"nodes\": [\n {\n \"type\": \"text\",\n \"text\": \"The step owns its local Dynamic Form config. Backend metadata can replace this config later without changing the Stepper host template.\"\n },\n { \"type\": \"badge\", \"label\": \"form rules\" },\n { \"type\": \"badge\", \"label\": \"validators\" }\n ]\n },\n \"form\": {\n \"mode\": \"create\",\n \"formId\": \"employee-onboarding-intake-form\",\n \"schemaSource\": \"resource\",\n \"config\": {\n \"metadata\": {\n \"name\": \"Employee onboarding intake\",\n \"version\": \"1.0.0\"\n },\n \"behavior\": {\n \"reactiveValidation\": true,\n \"reactiveValidationDebounceMs\": 200\n },\n \"sections\": [\n {\n \"id\": \"identity\",\n \"title\": \"Identity\",\n \"description\": \"Candidate identity and contact data.\",\n \"appearance\": \"outlined\",\n \"rows\": [\n {\n \"id\": \"identity-row\",\n \"columns\": [\n { \"id\": \"identity-main\", \"span\": { \"md\": 6, \"lg\": 6 }, \"fields\": [\"nomeCompleto\", \"email\"] },\n { \"id\": \"identity-contact\", \"span\": { \"md\": 6, \"lg\": 6 }, \"fields\": [\"telefone\", \"dataNascimento\"] }\n ]\n }\n ]\n },\n {\n \"id\": \"assignment\",\n \"title\": \"Assignment\",\n \"description\": \"Initial role and payroll policy.\",\n \"appearance\": \"outlined\",\n \"rows\": [\n {\n \"id\": \"assignment-row\",\n \"columns\": [\n { \"id\": \"assignment-main\", \"span\": { \"md\": 6, \"lg\": 6 }, \"fields\": [\"cargoId\", \"departamentoId\"] },\n { \"id\": \"assignment-payroll\", \"span\": { \"md\": 6, \"lg\": 6 }, \"fields\": [\"salario\", \"requiresSecurityReview\"] }\n ]\n }\n ]\n }\n ],\n \"fieldMetadata\": [\n {\n \"name\": \"nomeCompleto\",\n \"label\": \"Nome Completo\",\n \"controlType\": \"input\",\n \"validators\": { \"required\": true, \"minLength\": 3, \"maxLength\": 160 }\n },\n {\n \"name\": \"email\",\n \"label\": \"Email\",\n \"controlType\": \"email\",\n \"validators\": { \"required\": true, \"email\": true }\n },\n {\n \"name\": \"telefone\",\n \"label\": \"Telefone\",\n \"controlType\": \"phone\",\n \"validators\": { \"required\": true }\n },\n {\n \"name\": \"dataNascimento\",\n \"label\": \"Data de Nascimento\",\n \"controlType\": \"date\",\n \"validators\": { \"required\": true }\n },\n {\n \"name\": \"cargoId\",\n \"label\": \"Cargo\",\n \"controlType\": \"select\",\n \"validators\": { \"required\": true },\n \"options\": [\n { \"label\": \"Analista de Operacoes\", \"value\": \"analyst\" },\n { \"label\": \"Agente de Campo\", \"value\": \"field-agent\" },\n { \"label\": \"Diretor de P&D\", \"value\": \"director-rd\" }\n ]\n },\n {\n \"name\": \"departamentoId\",\n \"label\": \"Departamento\",\n \"controlType\": \"select\",\n \"validators\": { \"required\": true },\n \"options\": [\n { \"label\": \"Operacoes\", \"value\": \"operations\" },\n { \"label\": \"Pesquisa\", \"value\": \"research\" },\n { \"label\": \"Seguranca\", \"value\": \"security\" }\n ]\n },\n {\n \"name\": \"salario\",\n \"label\": \"Salario inicial\",\n \"controlType\": \"currency\",\n \"currencyCode\": \"BRL\",\n \"locale\": \"pt-BR\",\n \"validators\": { \"required\": true, \"min\": 1800 }\n },\n {\n \"name\": \"requiresSecurityReview\",\n \"label\": \"Requires security review\",\n \"controlType\": \"toggle\"\n }\n ]\n }\n }\n },\n {\n \"id\": \"evidence\",\n \"label\": \"Evidence\",\n \"description\": \"Collect supporting files through a nested Files Upload widget.\",\n \"optional\": true,\n \"widgets\": [\n {\n \"id\": \"praxis-files-upload\",\n \"inputs\": {\n \"filesUploadId\": \"employee-onboarding-evidence\",\n \"baseUrl\": \"/api/files\",\n \"displayMode\": \"compact\",\n \"config\": {\n \"strategy\": \"direct\",\n \"ui\": {\n \"showDropzone\": true,\n \"showConflictPolicySelector\": true,\n \"showMetadataForm\": true,\n \"showProgress\": true,\n \"manualUpload\": true\n },\n \"limits\": {\n \"maxFileSizeBytes\": 10485760,\n \"maxFilesPerBulk\": 4,\n \"maxBulkSizeBytes\": 31457280\n }\n }\n }\n }\n ]\n },\n {\n \"id\": \"approval\",\n \"label\": \"Approval\",\n \"description\": \"Review completion criteria before sending the workflow to the host.\",\n \"widgets\": [\n {\n \"id\": \"praxis-list\",\n \"inputs\": {\n \"listId\": \"employee-onboarding-approval-checklist\",\n \"config\": {\n \"dataSource\": {\n \"data\": [\n { \"id\": 1, \"title\": \"Identity fields validated\", \"owner\": \"People Ops\", \"status\": \"Required\", \"priority\": \"P0\" },\n { \"id\": 2, \"title\": \"Evidence attached or waived\", \"owner\": \"Hiring Manager\", \"status\": \"Required\", \"priority\": \"P0\" },\n { \"id\": 3, \"title\": \"Security review completed\", \"owner\": \"Security\", \"status\": \"Conditional\", \"priority\": \"P1\" }\n ]\n },\n \"selection\": {\n \"mode\": \"multiple\",\n \"compareBy\": \"id\",\n \"return\": \"id\"\n },\n \"templating\": {\n \"leading\": { \"type\": \"icon\", \"expr\": \"task_alt\" },\n \"primary\": { \"type\": \"text\", \"expr\": \"${item.title}\" },\n \"secondary\": { \"type\": \"text\", \"expr\": \"${item.owner}\" },\n \"meta\": { \"type\": \"chip\", \"expr\": \"${item.priority}\", \"variant\": \"filled\" },\n \"trailing\": { \"type\": \"chip\", \"expr\": \"${item.status}\", \"variant\": \"outlined\" }\n }\n }\n }\n }\n ]\n }\n ]\n },\n \"outputs\": {\n \"selectionChange\": \"emit\",\n \"selectedIndexChange\": \"emit\",\n \"stepFormReady\": \"emit\",\n \"stepFormValueChange\": \"emit\"\n }\n}\n",
|
|
2261
|
+
"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\"}}",
|
|
2182
2262
|
"sourcePointer": "examples/ai-recipes/praxis-stepper.json",
|
|
2183
|
-
"contentHash": "
|
|
2263
|
+
"contentHash": "3fa6981623085f56d3d418cf221e8bea5705cb70b3aeea1a53c7fc863653438c",
|
|
2184
2264
|
"sourceKind": "component_definition",
|
|
2185
2265
|
"sourceId": "praxis-stepper",
|
|
2186
2266
|
"corpusVersion": "1.0.0"
|
package/package.json
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/stepper",
|
|
3
|
-
"version": "9.0.0-beta.
|
|
3
|
+
"version": "9.0.0-beta.78",
|
|
4
4
|
"description": "Stepper workflows for Praxis UI with integrated forms, lists, uploads and page builder support.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
7
7
|
"@angular/core": "^21.0.0",
|
|
8
8
|
"@angular/material": "^21.0.0",
|
|
9
9
|
"@angular/cdk": "^21.0.0",
|
|
10
|
-
"@praxisui/core": "^9.0.0-beta.
|
|
11
|
-
"@praxisui/dynamic-form": "^9.0.0-beta.
|
|
12
|
-
"@praxisui/rich-content": "^9.0.0-beta.
|
|
13
|
-
"@praxisui/settings-panel": "^9.0.0-beta.
|
|
14
|
-
"@praxisui/list": "^9.0.0-beta.
|
|
15
|
-
"@praxisui/files-upload": "^9.0.0-beta.
|
|
16
|
-
"@praxisui/page-builder": "^9.0.0-beta.
|
|
10
|
+
"@praxisui/core": "^9.0.0-beta.78",
|
|
11
|
+
"@praxisui/dynamic-form": "^9.0.0-beta.78",
|
|
12
|
+
"@praxisui/rich-content": "^9.0.0-beta.78",
|
|
13
|
+
"@praxisui/settings-panel": "^9.0.0-beta.78",
|
|
14
|
+
"@praxisui/list": "^9.0.0-beta.78",
|
|
15
|
+
"@praxisui/files-upload": "^9.0.0-beta.78",
|
|
16
|
+
"@praxisui/page-builder": "^9.0.0-beta.78",
|
|
17
17
|
"@angular/forms": "^21.0.0",
|
|
18
18
|
"@angular/router": "^21.0.0",
|
|
19
|
-
"@praxisui/ai": "^9.0.0-beta.
|
|
19
|
+
"@praxisui/ai": "^9.0.0-beta.78",
|
|
20
20
|
"rxjs": "~7.8.0"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|