@praxisui/stepper 9.0.0-beta.70 → 9.0.0-beta.72
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 +99 -25
- 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-12T00:55:35.176Z",
|
|
4
4
|
"packageName": "@praxisui/stepper",
|
|
5
|
-
"packageVersion": "9.0.0-beta.
|
|
5
|
+
"packageVersion": "9.0.0-beta.72",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -14,89 +14,113 @@
|
|
|
14
14
|
{
|
|
15
15
|
"name": "stepperId",
|
|
16
16
|
"type": "string",
|
|
17
|
-
"required": false
|
|
17
|
+
"required": false,
|
|
18
|
+
"description": "Identificador para persistência (obrigatório)",
|
|
19
|
+
"label": "ID do Stepper"
|
|
18
20
|
},
|
|
19
21
|
{
|
|
20
22
|
"name": "componentInstanceId",
|
|
21
23
|
"type": "string",
|
|
22
|
-
"required": false
|
|
24
|
+
"required": false,
|
|
25
|
+
"description": "Identificador opcional para múltiplas instâncias na mesma rota",
|
|
26
|
+
"label": "ID da instância"
|
|
23
27
|
},
|
|
24
28
|
{
|
|
25
29
|
"name": "config",
|
|
26
30
|
"type": "StepperMetadata",
|
|
27
|
-
"required": false
|
|
31
|
+
"required": false,
|
|
32
|
+
"description": "Configuração JSON com passos, aparência, densidade, classes CSS e navegação",
|
|
33
|
+
"label": "Configuração"
|
|
28
34
|
},
|
|
29
35
|
{
|
|
30
36
|
"name": "selectedIndex",
|
|
31
37
|
"type": "number",
|
|
32
|
-
"required": false
|
|
38
|
+
"required": false,
|
|
39
|
+
"label": "[(selectedIndex)] Índice selecionado"
|
|
33
40
|
},
|
|
34
41
|
{
|
|
35
42
|
"name": "selectedIndexInput",
|
|
36
43
|
"type": "number",
|
|
37
|
-
"required": false
|
|
44
|
+
"required": false,
|
|
45
|
+
"label": "Índice selecionado (legacy)"
|
|
38
46
|
},
|
|
39
47
|
{
|
|
40
48
|
"name": "disableRippleInput",
|
|
41
49
|
"type": "boolean",
|
|
42
|
-
"required": false
|
|
50
|
+
"required": false,
|
|
51
|
+
"label": "Desabilitar ripple",
|
|
52
|
+
"default": false
|
|
43
53
|
},
|
|
44
54
|
{
|
|
45
55
|
"name": "enableCustomization",
|
|
46
56
|
"type": "boolean",
|
|
47
|
-
"required": false
|
|
57
|
+
"required": false,
|
|
58
|
+
"description": "Exibe controles de customização e assistente AI no runtime",
|
|
59
|
+
"label": "Modo de customização",
|
|
60
|
+
"default": false
|
|
48
61
|
},
|
|
49
62
|
{
|
|
50
63
|
"name": "labelPosition",
|
|
51
64
|
"type": "'bottom' | 'end'",
|
|
52
|
-
"required": false
|
|
65
|
+
"required": false,
|
|
66
|
+
"label": "Posição do rótulo (horizontal)"
|
|
53
67
|
},
|
|
54
68
|
{
|
|
55
69
|
"name": "color",
|
|
56
70
|
"type": "ThemePalette",
|
|
57
|
-
"required": false
|
|
71
|
+
"required": false,
|
|
72
|
+
"label": "Cor (M2)"
|
|
58
73
|
},
|
|
59
74
|
{
|
|
60
75
|
"name": "serverValidate",
|
|
61
76
|
"type": "(args) => Promise<{ ok: boolean; fieldErrors?: Record<string,string[]>; formErrors?: string[] }>",
|
|
62
|
-
"required": false
|
|
77
|
+
"required": false,
|
|
78
|
+
"label": "Validação remota (opt-in)"
|
|
63
79
|
},
|
|
64
80
|
{
|
|
65
81
|
"name": "stepperContext",
|
|
66
82
|
"type": "Record<string, any>",
|
|
67
|
-
"required": false
|
|
83
|
+
"required": false,
|
|
84
|
+
"description": "Contexto compartilhado para widgets internos",
|
|
85
|
+
"label": "Contexto"
|
|
68
86
|
}
|
|
69
87
|
],
|
|
70
88
|
"outputs": [
|
|
71
89
|
{
|
|
72
90
|
"name": "selectionChange",
|
|
73
91
|
"type": "any",
|
|
74
|
-
"required": false
|
|
92
|
+
"required": false,
|
|
93
|
+
"label": "Troca de seleção"
|
|
75
94
|
},
|
|
76
95
|
{
|
|
77
96
|
"name": "selectedIndexChange",
|
|
78
97
|
"type": "number",
|
|
79
|
-
"required": false
|
|
98
|
+
"required": false,
|
|
99
|
+
"label": "Índice selecionado (change)"
|
|
80
100
|
},
|
|
81
101
|
{
|
|
82
102
|
"name": "animationDone",
|
|
83
103
|
"type": "void",
|
|
84
|
-
"required": false
|
|
104
|
+
"required": false,
|
|
105
|
+
"label": "Animação concluída"
|
|
85
106
|
},
|
|
86
107
|
{
|
|
87
108
|
"name": "widgetEvent",
|
|
88
109
|
"type": "WidgetEventEnvelope",
|
|
89
|
-
"required": false
|
|
110
|
+
"required": false,
|
|
111
|
+
"label": "Evento interno"
|
|
90
112
|
},
|
|
91
113
|
{
|
|
92
114
|
"name": "stepFormReady",
|
|
93
115
|
"type": "{ stepId?: string; stepIndex: number; event: FormReadyEvent }",
|
|
94
|
-
"required": false
|
|
116
|
+
"required": false,
|
|
117
|
+
"label": "Form ready (por etapa)"
|
|
95
118
|
},
|
|
96
119
|
{
|
|
97
120
|
"name": "stepFormValueChange",
|
|
98
121
|
"type": "{ stepId?: string; stepIndex: number; event: FormValueChangeEvent }",
|
|
99
|
-
"required": false
|
|
122
|
+
"required": false,
|
|
123
|
+
"label": "Form value change (por etapa)"
|
|
100
124
|
}
|
|
101
125
|
],
|
|
102
126
|
"configSchemaId": null,
|
|
@@ -116,6 +140,56 @@
|
|
|
116
140
|
"minCols": 4,
|
|
117
141
|
"minRows": 4
|
|
118
142
|
},
|
|
143
|
+
"actions": [
|
|
144
|
+
{
|
|
145
|
+
"id": "select-step",
|
|
146
|
+
"label": "Selecionar etapa",
|
|
147
|
+
"icon": "flag",
|
|
148
|
+
"description": "Emite alteração do índice selecionado",
|
|
149
|
+
"emit": "selectedIndexChange",
|
|
150
|
+
"payloadSchema": {
|
|
151
|
+
"type": "number",
|
|
152
|
+
"example": 0
|
|
153
|
+
},
|
|
154
|
+
"scope": "any"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"id": "step-change",
|
|
158
|
+
"label": "Troca de etapa",
|
|
159
|
+
"icon": "swap_vert",
|
|
160
|
+
"description": "Emite evento ao trocar de etapa",
|
|
161
|
+
"emit": "selectionChange",
|
|
162
|
+
"payloadSchema": {
|
|
163
|
+
"type": "object",
|
|
164
|
+
"properties": {
|
|
165
|
+
"selectedIndex": {
|
|
166
|
+
"type": "number",
|
|
167
|
+
"description": "Índice selecionado"
|
|
168
|
+
},
|
|
169
|
+
"previouslySelectedIndex": {
|
|
170
|
+
"type": "number",
|
|
171
|
+
"description": "Índice anterior"
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"required": [
|
|
175
|
+
"selectedIndex"
|
|
176
|
+
],
|
|
177
|
+
"example": {
|
|
178
|
+
"selectedIndex": 1,
|
|
179
|
+
"previouslySelectedIndex": 0
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"scope": "any"
|
|
183
|
+
}
|
|
184
|
+
],
|
|
185
|
+
"configEditor": {
|
|
186
|
+
"component": "[ref:PraxisStepperWidgetConfigEditor]",
|
|
187
|
+
"title": "Configure stepper"
|
|
188
|
+
},
|
|
189
|
+
"authoringManifestRef": {
|
|
190
|
+
"componentId": "praxis-stepper",
|
|
191
|
+
"source": "PRAXIS_STEPPER_AUTHORING_MANIFEST"
|
|
192
|
+
},
|
|
119
193
|
"source": "projects/praxis-stepper/src/lib/praxis-stepper.metadata.ts",
|
|
120
194
|
"exportName": "PRAXIS_STEPPER_COMPONENT_METADATA",
|
|
121
195
|
"componentCapabilities": [
|
|
@@ -2055,7 +2129,7 @@
|
|
|
2055
2129
|
"chunkIndex": 0,
|
|
2056
2130
|
"chunkKind": "summary",
|
|
2057
2131
|
"content": "Component ID: praxis-stepper\nSelector: praxis-stepper\nFriendly Name: Praxis Stepper\nDescription: Stepper configurável (horizontal/vertical/linear) com passos e conteúdo dinâmico.\nLib/Package: @praxisui/stepper\nTags: widget, container, stepper, configurable\nInputs:\n - stepperId (string)\n - componentInstanceId (string)\n - config (StepperMetadata)\n - selectedIndex (number)\n - selectedIndexInput (number)\n - disableRippleInput (boolean)\n - enableCustomization (boolean)\n - labelPosition ('bottom' | 'end')\n - color (ThemePalette)\n - serverValidate ((args) => Promise<{ ok: boolean; fieldErrors?: Record<string,string[]>; formErrors?: string[] }>)\n - stepperContext (Record<string, any>)\nOutputs:\n - selectionChange (any)\n - selectedIndexChange (number)\n - animationDone (void)\n - widgetEvent (WidgetEventEnvelope)\n - stepFormReady ({ stepId?: string; stepIndex: number; event: FormReadyEvent })\n - stepFormValueChange ({ stepId?: string; stepIndex: number; event: FormValueChangeEvent })\n",
|
|
2058
|
-
"sourcePointer": "
|
|
2132
|
+
"sourcePointer": "projects/praxis-stepper/src/lib/praxis-stepper.metadata.ts",
|
|
2059
2133
|
"contentHash": "d753191bcc0a9e88df19ce2d3becb8dbc928e8c22db0d488dcfcdde2381c8e79",
|
|
2060
2134
|
"sourceKind": "component_definition",
|
|
2061
2135
|
"sourceId": "praxis-stepper",
|
|
@@ -2065,7 +2139,7 @@
|
|
|
2065
2139
|
"chunkIndex": 1,
|
|
2066
2140
|
"chunkKind": "capabilities",
|
|
2067
2141
|
"content": "Component Capabilities:\n - Path: orientation\n Category: layout\n Kind: enum\n Description: Orientation of the stepper.\n - Path: linear\n Category: behavior\n Kind: boolean\n Description: Require sequential completion of steps.\n - Path: headerPosition\n Category: layout\n Kind: enum\n Description: Header position (vertical only).\n - Path: labelPosition\n Category: layout\n Kind: enum\n Description: Label position for horizontal stepper.\n - Path: color\n Category: appearance\n Kind: enum\n Description: Material color palette.\n - Path: disableRipple\n Category: behavior\n Kind: boolean\n Description: Disable ripple for headers.\n - Path: animationDuration\n Category: behavior\n Kind: string\n Description: Animation duration, e.g. 300ms.\n - Path: selectedIndex\n Category: behavior\n Kind: number\n Description: Current step index.\n - Path: density\n Category: appearance\n Kind: enum\n Description: Density preset.\n - Path: stepperClass\n Category: appearance\n Kind: string\n Description: CSS class for stepper root.\n - Path: headerClass\n Category: appearance\n Kind: string\n Description: CSS class for header.\n - Path: contentClass\n Category: appearance\n Kind: string\n Description: CSS class for content area.\n - Path: appearance\n Category: appearance\n Kind: object\n Description: Appearance settings.\n - Path: appearance.themeClass\n Category: appearance\n Kind: string\n Description: Theme CSS class for root.\n - Path: appearance.tokens\n Category: appearance\n Kind: object\n Description: Token map for theme overrides.\n - Path: appearance.tokens.[token]\n Category: appearance\n Kind: string\n Description: Token value (CSS value or var).\n - Path: appearance.icons\n Category: appearance\n Kind: object\n Description: Stepper icon overrides.\n - Path: appearance.icons.number\n Category: appearance\n Kind: string\n Description: Icon for number state.\n - Path: appearance.icons.done\n Category: appearance\n Kind: string\n Description: Icon for done state.\n - Path: appearance.icons.edit\n Category: appearance\n Kind: string\n Description: Icon for edit state.\n - Path: appearance.icons.error\n Category: appearance\n Kind: string\n Description: Icon for error state.\n - Path: appearance.iconsSet\n Category: appearance\n Kind: enum\n Description: Icon set class name (Material Symbols).\n - Path: navigation\n Category: navigation\n Kind: object\n Description: Footer navigation config.\n - Path: navigation.visible\n Category: navigation\n Kind: boolean\n Description: Show navigation buttons.\n - Path: navigation.prevLabel\n Category: navigation\n Kind: string\n Description: Previous button label.\n - Path: navigation.nextLabel\n Category: navigation\n Kind: string\n Description: Next button label.\n - Path: navigation.prevIcon\n Category: navigation\n Kind: string\n Description: Previous button icon.\n - Path: navigation.nextIcon\n Category: navigation\n Kind: string\n Description: Next button icon.\n - Path: navigation.variant\n Category: navigation\n Kind: enum\n Description: Button variant.\n - Path: navigation.color\n Category: navigation\n Kind: enum\n Description: Button color.\n - Path: navigation.align\n Category: navigation\n Kind: enum\n Description: Navigation alignment.\n - Path: steps\n Category: steps\n Kind: array\n Description: Step definitions.\n - Path: steps[]\n Category: steps\n Kind: object\n Description: Step definition.\n - Path: steps[].id\n Category: steps\n Kind: string\n Description: Step id.\n - Path: steps[].label\n Category: steps\n Kind: string\n Description: Step label.\n - Path: steps[].description\n Category: steps\n Kind: string\n Description: Step description.\n - Path: steps[].optional\n Category: steps\n Kind: boolean\n Description: Mark step as optional.\n - Path: steps[].editable\n Category: steps\n Kind: boolean\n Description: Allow editing completed steps.\n - Path: steps[].completed\n Category: steps\n Kind: boolean\n Description: Force completed state.\n - Path: steps[].hasError\n Category: steps\n Kind: boolean\n Description: Force error state.\n - Path: steps[].stateIcon\n Category: steps\n Kind: string\n Description: Custom state icon key.\n - Path: steps[].state\n Category: steps\n Kind: string\n Description: Custom state name for matStepperIcon.\n - Path: steps[].errorMessage\n Category: steps\n Kind: string\n Description: Error message shown in header.\n - Path: steps[].ariaLabel\n Category: accessibility\n Kind: string\n Description: ARIA label for step header.\n - Path: steps[].ariaLabelledby\n Category: accessibility\n Kind: string\n Description: ARIA labelledby for step header.\n - Path: steps[].form\n Category: steps\n Kind: object\n Description: Optional Dynamic Form config for step.\n - Path: steps[].form.resourcePath\n Category: steps\n Kind: string\n Description: Resource path for Dynamic Form.\n - Path: steps[].form.resourceId\n Category: steps\n Kind: string\n Description: Resource id for Dynamic Form (string or number).\n - Path: steps[].form.mode\n Category: steps\n Kind: enum\n Description: Form mode.\n - Path: steps[].form.config\n Category: steps\n Kind: object\n Description: FormConfig for Dynamic Form.\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 - Path: steps[].form.config.formBlocksBefore\n Category: steps\n Kind: object\n Description: RichContentDocument hospedado antes do formulario da etapa.\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 - Path: steps[].form.config.formBlocksAfter\n Category: steps\n Kind: object\n Description: RichContentDocument hospedado depois do formulario inteiro da etapa.\n - Path: steps[].form.schemaSource\n Category: steps\n Kind: enum\n Description: Schema source for Dynamic Form.\n - Path: steps[].form.formId\n Category: steps\n Kind: string\n Description: Form id for Dynamic Form.\n - Path: steps[].stepBlocksBeforeForm\n Category: steps\n Kind: object\n Description: RichContentDocument rendered before the step form.\n - Path: steps[].stepBlocksAfterForm\n Category: steps\n Kind: object\n Description: RichContentDocument rendered after the step form.\n - Path: steps[].widgets\n Category: steps\n Kind: array\n Description: Advanced host-owned WidgetDefinition list rendered after canonical rich content.\n - Path: steps[].widgets[]\n Category: steps\n Kind: object\n Description: Advanced WidgetDefinition item.\n - Path: steps[].widgets[].id\n Category: steps\n Kind: enum\n Description: Component registry id for advanced widget.\n - Path: steps[].widgets[].inputs\n Category: steps\n Kind: object\n Description: Inputs bound into the advanced widget instance.\nCapability Notes:\n - steps[] should be merged by id or label to avoid replacing all steps.\n - steps[].form.config uses FormConfig (see form catalog) and may include sections/actions/fieldMetadata.\n - steps[].form.config tambem pode usar a surface editorial do dynamic-form: formBlocksBefore, formBlocksBeforeActions, formBlocksAfter e editorialContext como RichContentDocument.\n - Use steps[].stepBlocksBeforeForm and steps[].stepBlocksAfterForm for editorial step content; both are RichContentDocument surfaces rendered by @praxisui/rich-content.\n - steps[].widgets is reserved for advanced embedded components that do not have a canonical rich-content representation.\n - appearance.tokens is a free-form map; host may validate/sanitize.\n - When editing steps[].form.config.fieldMetadata, use FieldMetadata base if no controlType catalog exists.\n",
|
|
2068
|
-
"sourcePointer": "
|
|
2142
|
+
"sourcePointer": "projects/praxis-stepper/src/lib/ai/stepper-ai-capabilities.ts",
|
|
2069
2143
|
"contentHash": "b54dccb3bc67e250cbe279708f7a01617fe1c9f4742fee36c092541ddebc0d8a",
|
|
2070
2144
|
"sourceKind": "component_definition",
|
|
2071
2145
|
"sourceId": "praxis-stepper",
|
|
@@ -2075,7 +2149,7 @@
|
|
|
2075
2149
|
"chunkIndex": 2,
|
|
2076
2150
|
"chunkKind": "authoring_manifest",
|
|
2077
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}",
|
|
2078
|
-
"sourcePointer": "
|
|
2152
|
+
"sourcePointer": "projects/praxis-stepper/src/lib/ai/praxis-stepper-authoring-manifest.ts",
|
|
2079
2153
|
"contentHash": "383c96e0499ae3e38eaa0cbe599351de5be83ca5bdf0daaf3d8558a88c848eed",
|
|
2080
2154
|
"sourceKind": "component_definition",
|
|
2081
2155
|
"sourceId": "praxis-stepper",
|
|
@@ -2085,7 +2159,7 @@
|
|
|
2085
2159
|
"chunkIndex": 3,
|
|
2086
2160
|
"chunkKind": "context_pack",
|
|
2087
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}",
|
|
2088
|
-
"sourcePointer": "
|
|
2162
|
+
"sourcePointer": "projects/praxis-stepper/src/lib/ai/stepper-context-pack.ts",
|
|
2089
2163
|
"contentHash": "a4d489c116c40e41705d3031a094689eb1fe872a7e774abc93f5800ab8acdcdb",
|
|
2090
2164
|
"sourceKind": "component_definition",
|
|
2091
2165
|
"sourceId": "praxis-stepper",
|
|
@@ -2095,7 +2169,7 @@
|
|
|
2095
2169
|
"chunkIndex": 4,
|
|
2096
2170
|
"chunkKind": "recipe",
|
|
2097
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",
|
|
2098
|
-
"sourcePointer": "
|
|
2172
|
+
"sourcePointer": "examples/ai-recipes/praxis-ft-wizard.json",
|
|
2099
2173
|
"contentHash": "711201cf1f1729a1081b69e8276d5b0f25b562f41e4ac449f412dbe74aa23d2e",
|
|
2100
2174
|
"sourceKind": "component_definition",
|
|
2101
2175
|
"sourceId": "praxis-stepper",
|
|
@@ -2105,7 +2179,7 @@
|
|
|
2105
2179
|
"chunkIndex": 5,
|
|
2106
2180
|
"chunkKind": "recipe",
|
|
2107
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",
|
|
2108
|
-
"sourcePointer": "
|
|
2182
|
+
"sourcePointer": "examples/ai-recipes/praxis-stepper.json",
|
|
2109
2183
|
"contentHash": "82b7552fd91871031da3faf7a73dd2cee5bee5c4167275350eb0aaf9a380ef44",
|
|
2110
2184
|
"sourceKind": "component_definition",
|
|
2111
2185
|
"sourceId": "praxis-stepper",
|
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.72",
|
|
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.72",
|
|
11
|
+
"@praxisui/dynamic-form": "^9.0.0-beta.72",
|
|
12
|
+
"@praxisui/rich-content": "^9.0.0-beta.72",
|
|
13
|
+
"@praxisui/settings-panel": "^9.0.0-beta.72",
|
|
14
|
+
"@praxisui/list": "^9.0.0-beta.72",
|
|
15
|
+
"@praxisui/files-upload": "^9.0.0-beta.72",
|
|
16
|
+
"@praxisui/page-builder": "^9.0.0-beta.72",
|
|
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.72",
|
|
20
20
|
"rxjs": "~7.8.0"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|