@praxisui/dynamic-form 9.0.0-beta.86 → 9.0.0-beta.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-07-22T03:01:56.888Z",
3
+ "generatedAt": "2026-07-23T02:50:28.389Z",
4
4
  "packageName": "@praxisui/dynamic-form",
5
- "packageVersion": "9.0.0-beta.86",
5
+ "packageVersion": "9.0.0-beta.88",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 2,
@@ -8782,6 +8782,286 @@
8782
8782
  {
8783
8783
  "chunkIndex": 13,
8784
8784
  "chunkKind": "authoring_manifest",
8785
+ "content": "{\"operationId\":\"field.label.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Alterar rótulo do campo Effects: merge-by-key. Mudar o label do campo email para \\\"E-mail Corporativo\\\" Alterar o label do campo \\\"campoInexistente\\\" Salvar e reabrir o formulário editado sem drift de configuração\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"label\"],\"properties\":[\"label\"],\"semanticTerms\":[\"label\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].label\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"relabel-schema-backed-field\",\"request\":\"Mudar o label do campo email para \\\"E-mail Corporativo\\\"\",\"operationId\":\"field.label.set\",\"target\":\"email\",\"params\":{\"label\":\"E-mail Corporativo\"},\"isPositive\":true},{\"id\":\"round-trip-no-drift\",\"request\":\"Salvar e reabrir o formulário editado sem drift de configuração\",\"operationId\":\"field.label.set\",\"target\":\"nome\",\"params\":{\"label\":\"Nome Completo\"},\"isPositive\":true}],\"negativeExamples\":[{\"id\":\"reject-unknown-field\",\"request\":\"Alterar o label do campo \\\"campoInexistente\\\"\",\"operationId\":\"field.label.set\",\"target\":\"campoInexistente\",\"params\":{\"label\":\"Novo Label\"},\"isPositive\":false}]}",
8786
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8787
+ "contentHash": "1069339e236ddf0e138f8ea226eb412aa27f22a3909ea4bd5be6052a50e81b96",
8788
+ "sourceKind": "component_definition",
8789
+ "sourceId": "praxis-dynamic-form",
8790
+ "corpusVersion": "1.0.0"
8791
+ },
8792
+ {
8793
+ "chunkIndex": 14,
8794
+ "chunkKind": "authoring_manifest",
8795
+ "content": "{\"operationId\":\"field.placeholder.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Alterar placeholder do campo Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"placeholder\"],\"properties\":[\"placeholder\"],\"semanticTerms\":[\"placeholder\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].placeholder\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8796
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8797
+ "contentHash": "0477b01a94c782a5be21fc24b52e8b288ec412f2646691c573533f6c39102453",
8798
+ "sourceKind": "component_definition",
8799
+ "sourceId": "praxis-dynamic-form",
8800
+ "corpusVersion": "1.0.0"
8801
+ },
8802
+ {
8803
+ "chunkIndex": 15,
8804
+ "chunkKind": "authoring_manifest",
8805
+ "content": "{\"operationId\":\"field.required.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir obrigatoriedade Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"required\"],\"properties\":[\"required\"],\"semanticTerms\":[\"required\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].required\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8806
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8807
+ "contentHash": "768cbb12edcd84769b9995ebcca6e2b1226331718ac400f3d1b4896d1047afb8",
8808
+ "sourceKind": "component_definition",
8809
+ "sourceId": "praxis-dynamic-form",
8810
+ "corpusVersion": "1.0.0"
8811
+ },
8812
+ {
8813
+ "chunkIndex": 16,
8814
+ "chunkKind": "authoring_manifest",
8815
+ "content": "{\"operationId\":\"field.readOnly.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir campo como somente leitura Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"readOnly\"],\"properties\":[\"readOnly\"],\"semanticTerms\":[\"readOnly\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].readOnly\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8816
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8817
+ "contentHash": "23cfa0be804bec4f8505e91380050ad5868850885f8b339bdcb108f95d80f255",
8818
+ "sourceKind": "component_definition",
8819
+ "sourceId": "praxis-dynamic-form",
8820
+ "corpusVersion": "1.0.0"
8821
+ },
8822
+ {
8823
+ "chunkIndex": 17,
8824
+ "chunkKind": "authoring_manifest",
8825
+ "content": "{\"operationId\":\"field.disabled.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir campo como desabilitado Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"disabled\"],\"properties\":[\"disabled\"],\"semanticTerms\":[\"disabled\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].disabled\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8826
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8827
+ "contentHash": "eab18684cd79e203cd89384fe62259ba3b6c878a46098b5c02f9d7489bc3ce1b",
8828
+ "sourceKind": "component_definition",
8829
+ "sourceId": "praxis-dynamic-form",
8830
+ "corpusVersion": "1.0.0"
8831
+ },
8832
+ {
8833
+ "chunkIndex": 18,
8834
+ "chunkKind": "authoring_manifest",
8835
+ "content": "{\"operationId\":\"field.hidden.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir visibilidade inicial Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"hidden\"],\"properties\":[\"hidden\"],\"semanticTerms\":[\"hidden\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].hidden\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8836
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8837
+ "contentHash": "fd7ccc9b3d68fc706573927a9fd094bb17e67f81ff799b31de12aa6a051b6680",
8838
+ "sourceKind": "component_definition",
8839
+ "sourceId": "praxis-dynamic-form",
8840
+ "corpusVersion": "1.0.0"
8841
+ },
8842
+ {
8843
+ "chunkIndex": 19,
8844
+ "chunkKind": "authoring_manifest",
8845
+ "content": "{\"operationId\":\"field.controlType.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Alterar tipo de controle Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"controlType\"],\"properties\":[\"controlType\"],\"semanticTerms\":[\"controlType\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].controlType\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"control-type-compatible\",\"level\":\"error\",\"code\":\"DF017\",\"description\":\"O tipo de controle deve ser compatível com o tipo de dado do campo.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8846
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8847
+ "contentHash": "9c2027118cfb59e275c3a3908b111cbb08f11711c644cd42473c759b2b49f6a3",
8848
+ "sourceKind": "component_definition",
8849
+ "sourceId": "praxis-dynamic-form",
8850
+ "corpusVersion": "1.0.0"
8851
+ },
8852
+ {
8853
+ "chunkIndex": 20,
8854
+ "chunkKind": "authoring_manifest",
8855
+ "content": "{\"operationId\":\"field.optionSource.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir fonte de opções do campo Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"optionSource\"],\"properties\":[\"optionSource\"],\"semanticTerms\":[\"optionSource\",\"optionSource.key\",\"optionSource.type\",\"optionSource.resourcePath\",\"optionSource.valuePropertyPath\",\"optionSource.labelPropertyPath\",\"optionSource.dependsOn\",\"optionSource.dependencyFilterMap\",\"optionSource.includeIds\",\"optionSource.capabilities\",\"optionSource.display\",\"optionSource.selectionPolicy\",\"RESOURCE_ENTITY\",\"DISTINCT_DIMENSION\",\"CATEGORICAL_BUCKET\",\"LIGHT_LOOKUP\",\"STATIC_CANONICAL\",\"optionSource.capabilities.filter\",\"optionSource.capabilities.byIds\",\"optionSource.capabilities.detail\",\"optionSource.capabilities.create\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].optionSource\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"option-source-valid\",\"level\":\"error\",\"code\":\"DF018\",\"description\":\"A fonte de opções deve ser válida para o tipo de controle especificado.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-remote-binding\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8856
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8857
+ "contentHash": "c52dc52f97d5cdffe0d45b52e1d6eaed231dfc5089695487e31484374a0d87ad",
8858
+ "sourceKind": "component_definition",
8859
+ "sourceId": "praxis-dynamic-form",
8860
+ "corpusVersion": "1.0.0"
8861
+ },
8862
+ {
8863
+ "chunkIndex": 21,
8864
+ "chunkKind": "authoring_manifest",
8865
+ "content": "{\"operationId\":\"field.local.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar campo local Effects: append-unique. Adicionar campo auxiliar local \\\"notasInternas\\\" que não deve aparecer no payload de envio\",\"scope\":\"global\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"required\":false},\"inputContract\":{\"required\":[\"name\",\"label\",\"controlType\",\"source\"],\"properties\":[\"name\",\"label\",\"controlType\",\"source\",\"transient\",\"submitPolicy\"],\"semanticTerms\":[\"name\",\"label\",\"controlType\",\"source\",\"transient\",\"submitPolicy\",\"local\",\"omit\",\"include\",\"includeWhenDirty\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"fieldMetadata[]\"],\"validators\":[{\"validatorId\":\"field-name-unique\",\"level\":\"error\",\"code\":\"DF002\",\"description\":\"Nomes de campos devem ser únicos em fieldMetadata.\"},{\"validatorId\":\"local-schema-name-no-collision\",\"level\":\"error\",\"code\":\"DF006\",\"description\":\"Nome de campo local não pode colidir com campo schema-backed existente.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-local-transient-field\",\"request\":\"Adicionar campo auxiliar local \\\"notasInternas\\\" que não deve aparecer no payload de envio\",\"operationId\":\"field.local.add\",\"params\":{\"name\":\"notasInternas\",\"label\":\"Notas Internas\",\"controlType\":\"textarea\",\"source\":\"local\",\"transient\":true,\"submitPolicy\":\"omit\"},\"isPositive\":true}],\"negativeExamples\":[]}",
8866
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8867
+ "contentHash": "a6d619acb7a1b7d9f88eccc62930c09c29ed07b11f1a15d8661608d90a26505b",
8868
+ "sourceKind": "component_definition",
8869
+ "sourceId": "praxis-dynamic-form",
8870
+ "corpusVersion": "1.0.0"
8871
+ },
8872
+ {
8873
+ "chunkIndex": 22,
8874
+ "chunkKind": "authoring_manifest",
8875
+ "content": "{\"operationId\":\"field.local.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remover campo local Effects: remove-by-key, compile-domain-patch. Remover o campo auxiliar \\\"notasInternas\\\"\",\"scope\":\"field\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[],\"semanticTerms\":[]},\"effects\":[\"remove-by-key\",\"compile-domain-patch\"],\"affectedPaths\":[\"fieldMetadata[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"field-is-local\",\"level\":\"error\",\"code\":\"DF007\",\"description\":\"Operação restrita a campos locais (source:\\\"local\\\"). Campo schema-backed não pode ser removido ou ter submitPolicy alterada.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"require-confirmation-remove-field\",\"request\":\"Remover o campo auxiliar \\\"notasInternas\\\"\",\"operationId\":\"field.local.remove\",\"target\":\"notasInternas\",\"isPositive\":true}],\"negativeExamples\":[]}",
8876
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8877
+ "contentHash": "9b82aaa0a0ad6f25806e2d38501217f01e1436cf9badcefabbbba03f97e9e0a5",
8878
+ "sourceKind": "component_definition",
8879
+ "sourceId": "praxis-dynamic-form",
8880
+ "corpusVersion": "1.0.0"
8881
+ },
8882
+ {
8883
+ "chunkIndex": 23,
8884
+ "chunkKind": "authoring_manifest",
8885
+ "content": "{\"operationId\":\"field.submitPolicy.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Definir política de submissão do campo Effects: merge-by-key.\",\"scope\":\"field\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"required\":true},\"inputContract\":{\"required\":[\"submitPolicy\"],\"properties\":[\"submitPolicy\"],\"semanticTerms\":[\"submitPolicy\",\"omit\",\"include\",\"includeWhenDirty\"]},\"effects\":[\"merge-by-key\"],\"affectedPaths\":[\"fieldMetadata[].submitPolicy\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"field-is-local\",\"level\":\"error\",\"code\":\"DF007\",\"description\":\"Operação restrita a campos locais (source:\\\"local\\\"). Campo schema-backed não pode ser removido ou ter submitPolicy alterada.\"},{\"validatorId\":\"editor-round-trip-preserve\",\"level\":\"error\",\"code\":\"DF019\",\"description\":\"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8886
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8887
+ "contentHash": "7690f4f549ed630eaf9949071478c574e74087391fb10c420532dee7d89631a5",
8888
+ "sourceKind": "component_definition",
8889
+ "sourceId": "praxis-dynamic-form",
8890
+ "corpusVersion": "1.0.0"
8891
+ },
8892
+ {
8893
+ "chunkIndex": 24,
8894
+ "chunkKind": "authoring_manifest",
8895
+ "content": "{\"operationId\":\"layout.section.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar nova seção Effects: append-unique.\",\"scope\":\"global\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"required\":false},\"inputContract\":{\"required\":[\"id\",\"title\"],\"properties\":[\"id\",\"title\",\"icon\",\"collapsible\"],\"semanticTerms\":[\"id\",\"title\",\"icon\",\"collapsible\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"sections[]\"],\"validators\":[{\"validatorId\":\"section-id-unique\",\"level\":\"error\",\"code\":\"DF003\",\"description\":\"IDs de seções devem ser únicos em sections[].\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8896
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8897
+ "contentHash": "b510d3b6b7c943230ac724f5b5d5fb06f35779d15f18298c042aa661abcd2687",
8898
+ "sourceKind": "component_definition",
8899
+ "sourceId": "praxis-dynamic-form",
8900
+ "corpusVersion": "1.0.0"
8901
+ },
8902
+ {
8903
+ "chunkIndex": 25,
8904
+ "chunkKind": "authoring_manifest",
8905
+ "content": "{\"operationId\":\"layout.section.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remover seção Effects: remove-by-key, compile-domain-patch. Remover a seção \\\"Dados Adicionais\\\"\",\"scope\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[],\"semanticTerms\":[]},\"effects\":[\"remove-by-key\",\"compile-domain-patch\"],\"affectedPaths\":[\"sections[]\",\"sections[].rows[]\",\"sections[].rows[].columns[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"validators\":[{\"validatorId\":\"section-exists\",\"level\":\"error\",\"code\":\"DF004\",\"description\":\"A seção alvo deve existir em sections[].\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"require-confirmation-remove-section\",\"request\":\"Remover a seção \\\"Dados Adicionais\\\"\",\"operationId\":\"layout.section.remove\",\"target\":\"secao-dados-adicionais\",\"isPositive\":true}],\"negativeExamples\":[]}",
8906
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8907
+ "contentHash": "97bc049b32c236e90d60881989deba5b228e50574e3e7eb4198dcf8b4eb94f0e",
8908
+ "sourceKind": "component_definition",
8909
+ "sourceId": "praxis-dynamic-form",
8910
+ "corpusVersion": "1.0.0"
8911
+ },
8912
+ {
8913
+ "chunkIndex": 26,
8914
+ "chunkKind": "authoring_manifest",
8915
+ "content": "{\"operationId\":\"layout.row.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar linha numa seção Effects: append-unique.\",\"scope\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"required\":true},\"inputContract\":{\"required\":[\"id\"],\"properties\":[\"id\",\"columns\"],\"semanticTerms\":[\"id\",\"columns\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"sections[].rows[]\"],\"validators\":[{\"validatorId\":\"section-exists\",\"level\":\"error\",\"code\":\"DF004\",\"description\":\"A seção alvo deve existir em sections[].\"},{\"validatorId\":\"row-id-unique-in-section\",\"level\":\"error\",\"code\":\"DF015\",\"description\":\"O id da nova linha deve ser único dentro da seção alvo.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8916
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8917
+ "contentHash": "54c57565b20a4a12904c37e7fc13d9a0654e82802c93cfd25fbd116facd20822",
8918
+ "sourceKind": "component_definition",
8919
+ "sourceId": "praxis-dynamic-form",
8920
+ "corpusVersion": "1.0.0"
8921
+ },
8922
+ {
8923
+ "chunkIndex": 27,
8924
+ "chunkKind": "authoring_manifest",
8925
+ "content": "{\"operationId\":\"layout.column.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar coluna numa linha Effects: append-unique.\",\"scope\":\"row\",\"target\":{\"kind\":\"row\",\"resolver\":\"row-by-id-in-section\",\"required\":true},\"inputContract\":{\"required\":[\"id\"],\"properties\":[\"id\",\"span\"],\"semanticTerms\":[\"id\",\"span\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"sections[].rows[].columns[]\"],\"validators\":[{\"validatorId\":\"row-exists\",\"level\":\"error\",\"code\":\"DF014\",\"description\":\"A linha alvo deve existir na seção especificada.\"},{\"validatorId\":\"column-id-unique-in-row\",\"level\":\"error\",\"code\":\"DF016\",\"description\":\"O id da nova coluna deve ser único dentro da linha alvo.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8926
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8927
+ "contentHash": "390cfeda1b33f8c0a9c11323a15bc14985ab5bc5fea1006695198b768a99f7a8",
8928
+ "sourceKind": "component_definition",
8929
+ "sourceId": "praxis-dynamic-form",
8930
+ "corpusVersion": "1.0.0"
8931
+ },
8932
+ {
8933
+ "chunkIndex": 28,
8934
+ "chunkKind": "authoring_manifest",
8935
+ "content": "{\"operationId\":\"layout.field.move\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Mover campo no layout Effects: compile-domain-patch. Mover campo telefone para a primeira coluna da seção de contato\",\"scope\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"required\":true},\"inputContract\":{\"required\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\",\"index\"],\"semanticTerms\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\",\"index\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"layout-target-exists\",\"level\":\"error\",\"code\":\"DF012\",\"description\":\"A seção/linha/coluna de destino devem existir antes de mover o campo.\"},{\"validatorId\":\"no-index-as-identity\",\"level\":\"error\",\"code\":\"DF013\",\"description\":\"Operações de layout não devem usar índice de array como identidade canônica; use IDs estáveis.\"},{\"validatorId\":\"field-exists-in-layout\",\"level\":\"warning\",\"code\":\"DF005\",\"description\":\"Campo definido em fieldMetadata mas ausente no layout.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"move-field-to-column\",\"request\":\"Mover campo telefone para a primeira coluna da seção de contato\",\"operationId\":\"layout.field.move\",\"target\":\"telefone\",\"params\":{\"targetSectionId\":\"secao-contato\",\"targetRowId\":\"row-1\",\"targetColumnId\":\"col-1\"},\"isPositive\":true}],\"negativeExamples\":[]}",
8936
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8937
+ "contentHash": "150a29951f572a6ee723dd760a9c58ee792e3fb450835c58ed3b000256f341cc",
8938
+ "sourceKind": "component_definition",
8939
+ "sourceId": "praxis-dynamic-form",
8940
+ "corpusVersion": "1.0.0"
8941
+ },
8942
+ {
8943
+ "chunkIndex": 29,
8944
+ "chunkKind": "authoring_manifest",
8945
+ "content": "{\"operationId\":\"layout.visualBlock.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar bloco visual Effects: compile-domain-patch. Adicionar um aviso visual antes dos campos de contato\",\"scope\":\"column\",\"target\":{\"kind\":\"column\",\"resolver\":\"column-by-id-in-row\",\"required\":true},\"inputContract\":{\"required\":[\"id\",\"document\"],\"properties\":[\"id\",\"document\",\"layout\",\"rootClassName\",\"index\"],\"semanticTerms\":[\"id\",\"document\",\"layout\",\"rootClassName\",\"index\",\"document.kind\",\"document.version\",\"document.nodes\",\"block\",\"inline\",\"praxis.rich-content\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"validators\":[{\"validatorId\":\"layout-target-exists\",\"level\":\"error\",\"code\":\"DF012\",\"description\":\"A seção/linha/coluna de destino devem existir antes de mover o campo.\"},{\"validatorId\":\"visual-block-id-unique\",\"level\":\"error\",\"code\":\"DF021\",\"description\":\"IDs de blocos visuais devem ser unicos entre os itens de layout do formulario.\"},{\"validatorId\":\"rich-content-document-valid\",\"level\":\"error\",\"code\":\"DF022\",\"description\":\"O document do bloco visual deve seguir o contrato RichContentDocument canonico.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-visual-block\",\"request\":\"Adicionar um aviso visual antes dos campos de contato\",\"operationId\":\"layout.visualBlock.add\",\"target\":\"col-contato\",\"params\":{\"id\":\"aviso-contato\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"text\":\"Confira os dados antes de salvar.\"}]},\"layout\":\"block\"},\"isPositive\":true}],\"negativeExamples\":[]}",
8946
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8947
+ "contentHash": "e07ba18ac5af464456827c23c580456501bf2e6c389f8cf51a47e31bd602637c",
8948
+ "sourceKind": "component_definition",
8949
+ "sourceId": "praxis-dynamic-form",
8950
+ "corpusVersion": "1.0.0"
8951
+ },
8952
+ {
8953
+ "chunkIndex": 30,
8954
+ "chunkKind": "authoring_manifest",
8955
+ "content": "{\"operationId\":\"layout.visualBlock.update\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Atualizar bloco visual Effects: compile-domain-patch.\",\"scope\":\"layout\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[\"document\",\"layout\",\"rootClassName\"],\"semanticTerms\":[\"document\",\"layout\",\"rootClassName\",\"document.kind\",\"document.version\",\"document.nodes\",\"block\",\"inline\",\"praxis.rich-content\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"validators\":[{\"validatorId\":\"visual-block-exists\",\"level\":\"error\",\"code\":\"DF020\",\"description\":\"O bloco visual alvo deve existir como item kind:\\\"richContent\\\" em sections[].rows[].columns[].items[].\"},{\"validatorId\":\"rich-content-document-valid\",\"level\":\"error\",\"code\":\"DF022\",\"description\":\"O document do bloco visual deve seguir o contrato RichContentDocument canonico.\"},{\"validatorId\":\"editor-round-trip-preserve\",\"level\":\"error\",\"code\":\"DF019\",\"description\":\"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8956
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8957
+ "contentHash": "bbf4bb87bf03170168dca18f787cdf0996cc7e6c6dbfc5e28c5c753f340beb6f",
8958
+ "sourceKind": "component_definition",
8959
+ "sourceId": "praxis-dynamic-form",
8960
+ "corpusVersion": "1.0.0"
8961
+ },
8962
+ {
8963
+ "chunkIndex": 31,
8964
+ "chunkKind": "authoring_manifest",
8965
+ "content": "{\"operationId\":\"layout.visualBlock.move\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Mover bloco visual Effects: compile-domain-patch. Mover o aviso visual para a segunda coluna da secao de contato\",\"scope\":\"layout\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"required\":true},\"inputContract\":{\"required\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\",\"index\"],\"semanticTerms\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\",\"index\"]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"validators\":[{\"validatorId\":\"visual-block-exists\",\"level\":\"error\",\"code\":\"DF020\",\"description\":\"O bloco visual alvo deve existir como item kind:\\\"richContent\\\" em sections[].rows[].columns[].items[].\"},{\"validatorId\":\"layout-target-exists\",\"level\":\"error\",\"code\":\"DF012\",\"description\":\"A seção/linha/coluna de destino devem existir antes de mover o campo.\"},{\"validatorId\":\"no-index-as-identity\",\"level\":\"error\",\"code\":\"DF013\",\"description\":\"Operações de layout não devem usar índice de array como identidade canônica; use IDs estáveis.\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"move-visual-block\",\"request\":\"Mover o aviso visual para a segunda coluna da secao de contato\",\"operationId\":\"layout.visualBlock.move\",\"target\":\"aviso-contato\",\"params\":{\"targetSectionId\":\"secao-contato\",\"targetRowId\":\"row-1\",\"targetColumnId\":\"col-2\"},\"isPositive\":true}],\"negativeExamples\":[]}",
8966
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8967
+ "contentHash": "21110bbb3d65f1324014244526a643e0905ad48788628305539c1ed351409486",
8968
+ "sourceKind": "component_definition",
8969
+ "sourceId": "praxis-dynamic-form",
8970
+ "corpusVersion": "1.0.0"
8971
+ },
8972
+ {
8973
+ "chunkIndex": 32,
8974
+ "chunkKind": "authoring_manifest",
8975
+ "content": "{\"operationId\":\"layout.visualBlock.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remover bloco visual Effects: compile-domain-patch.\",\"scope\":\"layout\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[],\"semanticTerms\":[]},\"effects\":[\"compile-domain-patch\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"validators\":[{\"validatorId\":\"visual-block-exists\",\"level\":\"error\",\"code\":\"DF020\",\"description\":\"O bloco visual alvo deve existir como item kind:\\\"richContent\\\" em sections[].rows[].columns[].items[].\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8976
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8977
+ "contentHash": "7e0c83bf9eafbe7c8e67e661e65f5237cd58b5662eb3cbb9d0dce2d4669379ce",
8978
+ "sourceKind": "component_definition",
8979
+ "sourceId": "praxis-dynamic-form",
8980
+ "corpusVersion": "1.0.0"
8981
+ },
8982
+ {
8983
+ "chunkIndex": 33,
8984
+ "chunkKind": "authoring_manifest",
8985
+ "content": "{\"operationId\":\"rule.visibility.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar regra de visibilidade Effects: append-unique. Ocultar o campo cpf quando o tipo de pessoa for jurídica\",\"scope\":\"global\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"required\":false},\"inputContract\":{\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"metadata\"],\"properties\":[\"id\",\"name\",\"type\",\"targetType\",\"targets\",\"condition\",\"metadata\"],\"semanticTerms\":[\"id\",\"name\",\"type\",\"targetType\",\"targets\",\"condition\",\"metadata\",\"visibility\",\"field\",\"section\",\"row\",\"column\",\"action\",\"visualBlock\",\"metadata.origin\",\"metadata.reviewStatus\",\"llm\",\"pending\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"formRules[]\"],\"validators\":[{\"validatorId\":\"rule-id-unique\",\"level\":\"error\",\"code\":\"DF008\",\"description\":\"IDs de regras devem ser únicos em formRules[].\"},{\"validatorId\":\"rule-target-refs-exist\",\"level\":\"error\",\"code\":\"DF010\",\"description\":\"Todos os targets da regra devem referenciar campos, seções, ações ou blocos visuais existentes.\"},{\"validatorId\":\"json-logic-valid\",\"level\":\"error\",\"code\":\"DF011\",\"description\":\"A expressão JsonLogic deve ser um AST válido (suporte canônico à spec JsonLogic).\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-visibility-rule\",\"request\":\"Ocultar o campo cpf quando o tipo de pessoa for jurídica\",\"operationId\":\"rule.visibility.add\",\"params\":{\"id\":\"ocultar-cpf-pj\",\"name\":\"Ocultar CPF para PJ\",\"targetType\":\"field\",\"targets\":[\"cpf\"],\"condition\":{\"==\":[{\"var\":\"tipoPessoa\"},\"juridica\"]}},\"isPositive\":true}],\"negativeExamples\":[]}",
8986
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8987
+ "contentHash": "7bfba2157490565149c01e705da2e9b21aea211df6cdeccafa7ad961e340431a",
8988
+ "sourceKind": "component_definition",
8989
+ "sourceId": "praxis-dynamic-form",
8990
+ "corpusVersion": "1.0.0"
8991
+ },
8992
+ {
8993
+ "chunkIndex": 34,
8994
+ "chunkKind": "authoring_manifest",
8995
+ "content": "{\"operationId\":\"rule.validation.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar regra de validação Effects: append-unique.\",\"scope\":\"global\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"required\":false},\"inputContract\":{\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"message\",\"metadata\"],\"properties\":[\"id\",\"name\",\"type\",\"targetType\",\"targets\",\"condition\",\"message\",\"level\",\"metadata\"],\"semanticTerms\":[\"id\",\"name\",\"type\",\"targetType\",\"targets\",\"condition\",\"message\",\"level\",\"metadata\",\"validation\",\"field\",\"section\",\"row\",\"column\",\"action\",\"visualBlock\",\"error\",\"warning\",\"metadata.origin\",\"metadata.reviewStatus\",\"llm\",\"pending\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"formRules[]\"],\"validators\":[{\"validatorId\":\"rule-id-unique\",\"level\":\"error\",\"code\":\"DF008\",\"description\":\"IDs de regras devem ser únicos em formRules[].\"},{\"validatorId\":\"rule-target-refs-exist\",\"level\":\"error\",\"code\":\"DF010\",\"description\":\"Todos os targets da regra devem referenciar campos, seções, ações ou blocos visuais existentes.\"},{\"validatorId\":\"json-logic-valid\",\"level\":\"error\",\"code\":\"DF011\",\"description\":\"A expressão JsonLogic deve ser um AST válido (suporte canônico à spec JsonLogic).\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
8996
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8997
+ "contentHash": "110e0c2816de7abcc55ce2a520c8984032de19b1bf187284cefbf0efe5029e6b",
8998
+ "sourceKind": "component_definition",
8999
+ "sourceId": "praxis-dynamic-form",
9000
+ "corpusVersion": "1.0.0"
9001
+ },
9002
+ {
9003
+ "chunkIndex": 35,
9004
+ "chunkKind": "authoring_manifest",
9005
+ "content": "{\"operationId\":\"rule.computedValue.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Adicionar regra de valor calculado Effects: append-unique. Calcular idade a partir da data de nascimento e limpar quando a data estiver vazia\",\"scope\":\"global\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"required\":false},\"inputContract\":{\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"value\",\"metadata\"],\"properties\":[\"id\",\"name\",\"type\",\"targetType\",\"targets\",\"condition\",\"value\",\"valueWhenFalse\",\"metadata\"],\"semanticTerms\":[\"id\",\"name\",\"type\",\"targetType\",\"targets\",\"condition\",\"value\",\"valueWhenFalse\",\"metadata\",\"computedValue\",\"field\",\"value.expression\",\"value.literal\",\"valueWhenFalse.expression\",\"valueWhenFalse.literal\",\"metadata.origin\",\"metadata.reviewStatus\",\"llm\",\"pending\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"formRules[]\"],\"validators\":[{\"validatorId\":\"rule-id-unique\",\"level\":\"error\",\"code\":\"DF008\",\"description\":\"IDs de regras devem ser únicos em formRules[].\"},{\"validatorId\":\"rule-target-refs-exist\",\"level\":\"error\",\"code\":\"DF010\",\"description\":\"Todos os targets da regra devem referenciar campos, seções, ações ou blocos visuais existentes.\"},{\"validatorId\":\"json-logic-valid\",\"level\":\"error\",\"code\":\"DF011\",\"description\":\"A expressão JsonLogic deve ser um AST válido (suporte canônico à spec JsonLogic).\"},{\"validatorId\":\"computed-value-envelope-valid\",\"level\":\"error\",\"code\":\"DF023\",\"description\":\"Valores calculados devem usar envelope explícito e fechado, exatamente { expression: <JsonLogic> } ou exatamente { literal: <valor> }; objetos literais sem envelope ou envelopes com chaves extras são ambíguos.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-computed-value-rule\",\"request\":\"Calcular idade a partir da data de nascimento e limpar quando a data estiver vazia\",\"operationId\":\"rule.computedValue.add\",\"params\":{\"id\":\"birth-date-computes-age\",\"name\":\"Calcular idade\",\"type\":\"computedValue\",\"targetType\":\"field\",\"targets\":[\"age\"],\"condition\":{\"!\":[{\"isBlank\":[{\"var\":\"birthDate\"}]}]},\"value\":{\"expression\":{\"yearsSince\":[{\"var\":\"birthDate\"}]}},\"valueWhenFalse\":{},\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"}},\"isPositive\":true}],\"negativeExamples\":[]}",
9006
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9007
+ "contentHash": "cca61e9b3a9a34d256349d84acc44846d1a648d40944cfb26b714b7df7020db1",
9008
+ "sourceKind": "component_definition",
9009
+ "sourceId": "praxis-dynamic-form",
9010
+ "corpusVersion": "1.0.0"
9011
+ },
9012
+ {
9013
+ "chunkIndex": 36,
9014
+ "chunkKind": "authoring_manifest",
9015
+ "content": "{\"operationId\":\"rule.visualBlockGuidance.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Materializar orientação visual derivada Effects: append-unique. Materializar no aviso visual a decisao governada que exige aprovacao de compliance para fornecedor com risco critico\",\"scope\":\"global\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"required\":false},\"inputContract\":{\"required\":[\"id\",\"type\",\"targetType\",\"targets\",\"condition\",\"properties\",\"metadata\"],\"properties\":[\"id\",\"name\",\"description\",\"type\",\"targetType\",\"context\",\"targets\",\"condition\",\"properties\",\"propertiesWhenFalse\",\"metadata\"],\"semanticTerms\":[\"id\",\"name\",\"description\",\"type\",\"targetType\",\"context\",\"targets\",\"condition\",\"properties\",\"propertiesWhenFalse\",\"metadata\",\"visualBlockGuidance\",\"visualBlock\",\"notification\",\"style\",\"properties.visible\",\"properties.hidden\",\"properties.layout\",\"properties.className\",\"properties.rootClassName\",\"properties.style\",\"properties.text\",\"properties.title\",\"properties.message\",\"properties.textNodeId\",\"properties.titleNodeId\",\"properties.messageNodeId\",\"propertiesWhenFalse.visible\",\"propertiesWhenFalse.hidden\",\"propertiesWhenFalse.layout\",\"propertiesWhenFalse.className\",\"propertiesWhenFalse.rootClassName\",\"propertiesWhenFalse.style\",\"propertiesWhenFalse.text\",\"propertiesWhenFalse.title\",\"propertiesWhenFalse.message\",\"propertiesWhenFalse.textNodeId\",\"propertiesWhenFalse.titleNodeId\",\"propertiesWhenFalse.messageNodeId\",\"metadata.origin\",\"metadata.reviewStatus\",\"block\",\"inline\",\"llm\",\"pending\"]},\"effects\":[\"append-unique\"],\"affectedPaths\":[\"formRules[]\"],\"validators\":[{\"validatorId\":\"rule-id-unique\",\"level\":\"error\",\"code\":\"DF008\",\"description\":\"IDs de regras devem ser únicos em formRules[].\"},{\"validatorId\":\"visual-block-exists\",\"level\":\"error\",\"code\":\"DF020\",\"description\":\"O bloco visual alvo deve existir como item kind:\\\"richContent\\\" em sections[].rows[].columns[].items[].\"},{\"validatorId\":\"json-logic-valid\",\"level\":\"error\",\"code\":\"DF011\",\"description\":\"A expressão JsonLogic deve ser um AST válido (suporte canônico à spec JsonLogic).\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"visual-only\",\"presentationAffordances\":[],\"positiveExamples\":[{\"id\":\"add-visual-block-guidance-rule\",\"request\":\"Materializar no aviso visual a decisao governada que exige aprovacao de compliance para fornecedor com risco critico\",\"operationId\":\"rule.visualBlockGuidance.add\",\"params\":{\"id\":\"supplier-risk-guidance\",\"name\":\"Supplier risk guidance\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"targets\":[\"supplier-risk-notice\"],\"condition\":{\"===\":[{\"var\":\"riscoFornecedor\"},\"critico\"]},\"properties\":{\"message\":\"Fornecedor critico exige aprovacao de compliance antes de emitir o pedido.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--critical\"},\"propertiesWhenFalse\":{\"message\":\"Fornecedor sem bloqueios criticos para este pedido.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--neutral\"},\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"}},\"isPositive\":true}],\"negativeExamples\":[]}",
9016
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9017
+ "contentHash": "37e2212da7ed1a5b190ba5b342dfb6e6e0ddf1acedae2b29e754327a4481a4ff",
9018
+ "sourceKind": "component_definition",
9019
+ "sourceId": "praxis-dynamic-form",
9020
+ "corpusVersion": "1.0.0"
9021
+ },
9022
+ {
9023
+ "chunkIndex": 37,
9024
+ "chunkKind": "authoring_manifest",
9025
+ "content": "{\"operationId\":\"rule.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Remover regra Effects: remove-by-key.\",\"scope\":\"rule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"required\":true},\"inputContract\":{\"required\":[],\"properties\":[],\"semanticTerms\":[]},\"effects\":[\"remove-by-key\"],\"affectedPaths\":[\"formRules[]\"],\"validators\":[{\"validatorId\":\"rule-exists\",\"level\":\"error\",\"code\":\"DF009\",\"description\":\"A regra alvo deve existir em formRules[].\"}],\"preconditions\":[\"config-initialized\",\"target-exists\"],\"submissionImpact\":\"affects-schema-backed-data\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
9026
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9027
+ "contentHash": "fcaffdd1b20a6a3a7c69b16579e246363b6ffaf47e8441fb3e783694f09b52c8",
9028
+ "sourceKind": "component_definition",
9029
+ "sourceId": "praxis-dynamic-form",
9030
+ "corpusVersion": "1.0.0"
9031
+ },
9032
+ {
9033
+ "chunkIndex": 38,
9034
+ "chunkKind": "authoring_manifest",
9035
+ "content": "{\"operationId\":\"action.submit.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configurar botão de envio Effects: merge-object.\",\"scope\":\"global\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"label\",\"icon\",\"visible\",\"color\"],\"semanticTerms\":[\"label\",\"icon\",\"visible\",\"color\",\"primary\",\"accent\",\"warn\",\"basic\"]},\"effects\":[\"merge-object\"],\"affectedPaths\":[\"actions.submit\"],\"validators\":[{\"validatorId\":\"editor-round-trip-preserve\",\"level\":\"error\",\"code\":\"DF019\",\"description\":\"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"affects-submission\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
9036
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9037
+ "contentHash": "006445ac4a1120167679449bb2d27b56437d48b665bd95d6c644cb39ff44cebb",
9038
+ "sourceKind": "component_definition",
9039
+ "sourceId": "praxis-dynamic-form",
9040
+ "corpusVersion": "1.0.0"
9041
+ },
9042
+ {
9043
+ "chunkIndex": 39,
9044
+ "chunkKind": "authoring_manifest",
9045
+ "content": "{\"operationId\":\"action.cancel.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configurar botão de cancelar Effects: merge-object.\",\"scope\":\"global\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"label\",\"icon\",\"visible\",\"color\",\"navigateTo\"],\"semanticTerms\":[\"label\",\"icon\",\"visible\",\"color\",\"navigateTo\",\"primary\",\"accent\",\"warn\",\"basic\"]},\"effects\":[\"merge-object\"],\"affectedPaths\":[\"actions.cancel\"],\"validators\":[{\"validatorId\":\"editor-round-trip-preserve\",\"level\":\"error\",\"code\":\"DF019\",\"description\":\"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
9046
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9047
+ "contentHash": "3dc79ee3d575906777697268de0dfca7d12fc6d8b8e88f51d84513cd627c02d9",
9048
+ "sourceKind": "component_definition",
9049
+ "sourceId": "praxis-dynamic-form",
9050
+ "corpusVersion": "1.0.0"
9051
+ },
9052
+ {
9053
+ "chunkIndex": 40,
9054
+ "chunkKind": "authoring_manifest",
9055
+ "content": "{\"operationId\":\"action.reset.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operation_card\",\"semanticSummary\":\"Configurar botão de reset Effects: merge-object.\",\"scope\":\"global\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"required\":false},\"inputContract\":{\"required\":[],\"properties\":[\"label\",\"icon\",\"visible\",\"color\",\"confirmBeforeReset\"],\"semanticTerms\":[\"label\",\"icon\",\"visible\",\"color\",\"confirmBeforeReset\",\"primary\",\"accent\",\"warn\",\"basic\"]},\"effects\":[\"merge-object\"],\"affectedPaths\":[\"actions.reset\"],\"validators\":[{\"validatorId\":\"editor-round-trip-preserve\",\"level\":\"error\",\"code\":\"DF019\",\"description\":\"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"}],\"preconditions\":[\"config-initialized\"],\"submissionImpact\":\"config-only\",\"presentationAffordances\":[],\"positiveExamples\":[],\"negativeExamples\":[]}",
9056
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9057
+ "contentHash": "e681f2d9c4ea4f1a58b5126a9c0d369507da74d658a9550c8545724cd6859487",
9058
+ "sourceKind": "component_definition",
9059
+ "sourceId": "praxis-dynamic-form",
9060
+ "corpusVersion": "1.0.0"
9061
+ },
9062
+ {
9063
+ "chunkIndex": 41,
9064
+ "chunkKind": "authoring_manifest",
8785
9065
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"identity\"}",
8786
9066
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8787
9067
  "contentHash": "9b87db909a9f1436c70294714f19e567b1e83df02c306bba28f6f25f9e8252db",
@@ -8790,7 +9070,7 @@
8790
9070
  "corpusVersion": "1.0.0"
8791
9071
  },
8792
9072
  {
8793
- "chunkIndex": 14,
9073
+ "chunkIndex": 42,
8794
9074
  "chunkKind": "authoring_manifest",
8795
9075
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"showAiAssistant\",\"type\":\"boolean\",\"description\":\"Mostra os gatilhos do copiloto semantico Praxis\"},{\"name\":\"config\",\"type\":\"FormConfig\",\"description\":\"Configuração do formulário; sections é opcional em forms schema-driven e não deve ser criado como array vazio apenas para satisfazer TypeScript.\"},{\"name\":\"resourcePath\",\"type\":\"string\",\"description\":\"Caminho do recurso (API)\"},{\"name\":\"readUrl\",\"type\":\"string\",\"description\":\"Endpoint canonico de leitura para surfaces VIEW/READ_PROJECTION\"},{\"name\":\"mode\",\"type\":\"string\",\"allowedValues\":[\"create\",\"edit\",\"view\"],\"description\":\"Modo de operação\"},{\"name\":\"generatedLayoutPreset\",\"type\":\"string\",\"allowedValues\":[\"default\",\"compactPresentation\"],\"description\":\"Preset usado apenas ao gerar a configuracao inicial a partir de metadata/schema; nao reprocessa layouts persistidos ou autorados.\"},{\"name\":\"layoutPolicy\",\"type\":\"DynamicFormLayoutPolicy\",\"description\":\"Politica opt-in para layout schema-driven transient. Use source=schema apenas quando o backend schema for a fonte canonica do agrupamento; use detailSummary para seleção de campos e densidade responsiva do resumo read-only compacto sem FormConfig.sections locais. Quando o resumo precisar vencer x-ui.width publicado para outras surfaces, use detailSummary.widthPrecedence=summary.\"},{\"name\":\"fieldIconPolicy\",\"type\":\"string\",\"allowedValues\":[\"all\",\"presentation-only\",\"none\"],\"description\":\"Politica visual do host para icones prefix/suffix de campos vindos da metadata. Use presentation-only para manter icones decorativos em apresentacao e ocultar em controles tradicionais.\"},{\"name\":\"enableCustomization\",\"type\":\"boolean\",\"description\":\"Habilita edição visual\"}]}",
8796
9076
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
@@ -8800,7 +9080,7 @@
8800
9080
  "corpusVersion": "1.0.0"
8801
9081
  },
8802
9082
  {
8803
- "chunkIndex": 15,
9083
+ "chunkIndex": 43,
8804
9084
  "chunkKind": "authoring_manifest",
8805
9085
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"description\":\"Campos do formulário (metadados schema-backed ou local; use para ops de propriedade)\"},{\"kind\":\"schemaBackedField\",\"resolver\":\"field-by-name-or-label\",\"description\":\"Campos com origem no schema do backend; não removíveis via authoring\"},{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"description\":\"Campos locais com source:\\\"local\\\"; adicionados/removidos via authoring\"},{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"description\":\"Seções de layout identificadas por id estável\"},{\"kind\":\"row\",\"resolver\":\"row-by-id-in-section\",\"description\":\"Linhas dentro de seções, identificadas por id estável\"},{\"kind\":\"column\",\"resolver\":\"column-by-id-in-row\",\"description\":\"Colunas dentro de linhas, identificadas por id estável\"},{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"description\":\"Blocos visuais richContent em sections[].rows[].columns[].items[]; não participam do payload de submissão\"},{\"kind\":\"layoutPlacement\",\"resolver\":\"layout-placement-by-field\",\"description\":\"Posicionamento de campo no layout; target para ops de reposicionamento\"},{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"description\":\"Ações da toolbar (submit, cancel, reset)\"},{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"description\":\"Regras de visibilidade e validação\"},{\"kind\":\"message\",\"resolver\":\"message-by-id\",\"description\":\"Mensagens inline do formulário (info, warning, error); ops em desenvolvimento\"}]}",
8806
9086
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
@@ -8810,7 +9090,7 @@
8810
9090
  "corpusVersion": "1.0.0"
8811
9091
  },
8812
9092
  {
8813
- "chunkIndex": 16,
9093
+ "chunkIndex": 44,
8814
9094
  "chunkKind": "authoring_manifest",
8815
9095
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"field.label.set\",\"title\":\"Alterar rótulo do campo\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"label\"],\"properties\":{\"label\":{\"type\":\"string\",\"minLength\":1}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].label\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.placeholder.set\",\"title\":\"Alterar placeholder do campo\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"placeholder\"],\"properties\":{\"placeholder\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].placeholder\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.required.set\",\"title\":\"Definir obrigatoriedade\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"required\"],\"properties\":{\"required\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].required\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.readOnly.set\",\"title\":\"Definir campo como somente leitura\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"readOnly\"],\"properties\":{\"readOnly\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].readOnly\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.disabled.set\",\"title\":\"Definir campo como desabilitado\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"disabled\"],\"properties\":{\"disabled\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].disabled\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.hidden.set\",\"title\":\"Definir visibilidade inicial\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"hidden\"],\"properties\":{\"hidden\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].hidden\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.controlType.set\",\"title\":\"Alterar tipo de controle\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"controlType\"],\"properties\":{\"controlType\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"field-exists\",\"control-type-compatible\"],\"affectedPaths\":[\"fieldMetadata[].controlType\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.optionSource.set\",\"title\":\"Definir fonte de opções do campo\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"optionSource\"],\"properties\":{\"optionSource\":{\"type\":\"object\",\"required\":[\"key\",\"type\",\"resourcePath\"],\"properties\":{\"key\":{\"type\":\"string\"},\"type\":{\"enum\":[\"RESOURCE_ENTITY\",\"DISTINCT_DIMENSION\",\"CATEGORICAL_BUCKET\",\"LIGHT_LOOKUP\",\"STATIC_CANONICAL\"]},\"resourcePath\":{\"type\":\"string\"},\"valuePropertyPath\":{\"type\":\"string\"},\"labelPropertyPath\":{\"type\":\"string\"},\"dependsOn\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"dependencyFilterMap\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}},\"includeIds\":{\"type\":\"boolean\"},\"capabilities\":{\"type\":\"object\",\"properties\":{\"filter\":{\"type\":\"boolean\"},\"byIds\":{\"type\":\"boolean\"},\"detail\":{\"type\":\"boolean\"},\"create\":{\"type\":\"boolean\"}}},\"display\":{\"type\":\"object\"},\"selectionPolicy\":{\"type\":\"object\"}}}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\",\"option-source-valid\"],\"affectedPaths\":[\"fieldMetadata[].optionSource\"],\"submissionImpact\":\"affects-remote-binding\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.local.add\",\"title\":\"Adicionar campo local\",\"scope\":\"global\",\"targetKind\":\"localField\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"name\",\"label\",\"controlType\",\"source\"],\"properties\":{\"name\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"controlType\":{\"type\":\"string\"},\"source\":{\"const\":\"local\",\"description\":\"Obrigatório. Discriminador que distingue campos locais de schema-backed.\"},\"transient\":{\"type\":\"boolean\",\"default\":false,\"description\":\"Se true, o valor não persiste entre navegações.\"},\"submitPolicy\":{\"enum\":[\"omit\",\"include\",\"includeWhenDirty\"],\"default\":\"omit\"}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-name-unique\",\"local-schema-name-no-collision\"],\"affectedPaths\":[\"fieldMetadata[]\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"field.local.remove\",\"title\":\"Remover campo local\",\"scope\":\"field\",\"targetKind\":\"localField\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"remove-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"},{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-field-cleanup\",\"handlerContract\":{\"reads\":[\"fieldMetadata[].name\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"writes\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"identityKeys\":[\"fieldMetadata[].name\",\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.name\"],\"properties\":{\"target.name\":{\"type\":\"string\"}}},\"failureModes\":[\"target-field-not-found\",\"target-field-not-local\",\"layout-reference-conflict\"],\"description\":\"Remove every layout placement that references the removed local field by fieldMetadata[].name.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"field-exists\",\"field-is-local\"],\"affectedPaths\":[\"fieldMetadata[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\",\"target-exists\"]}]}",
8816
9096
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
@@ -8820,7 +9100,7 @@
8820
9100
  "corpusVersion": "1.0.0"
8821
9101
  },
8822
9102
  {
8823
- "chunkIndex": 17,
9103
+ "chunkIndex": 45,
8824
9104
  "chunkKind": "authoring_manifest",
8825
9105
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"field.submitPolicy.set\",\"title\":\"Definir política de submissão do campo\",\"scope\":\"field\",\"targetKind\":\"localField\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"submitPolicy\"],\"properties\":{\"submitPolicy\":{\"enum\":[\"omit\",\"include\",\"includeWhenDirty\"]}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\",\"field-is-local\",\"editor-round-trip-preserve\"],\"affectedPaths\":[\"fieldMetadata[].submitPolicy\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.section.add\",\"title\":\"Adicionar nova seção\",\"scope\":\"global\",\"targetKind\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"title\"],\"properties\":{\"id\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"collapsible\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"sections[]\",\"key\":\"id\"}],\"validators\":[\"section-id-unique\"],\"affectedPaths\":[\"sections[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"layout.section.remove\",\"title\":\"Remover seção\",\"scope\":\"section\",\"targetKind\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"remove-by-key\",\"path\":\"sections[]\",\"key\":\"id\"},{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-section-cleanup\",\"handlerContract\":{\"reads\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"writes\":[\"sections[]\"],\"identityKeys\":[\"sections[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.id\"],\"properties\":{\"target.id\":{\"type\":\"string\"}}},\"failureModes\":[\"target-section-not-found\",\"ambiguous-section-target\"],\"description\":\"Removes the target section and its nested rows, columns, and field placements without deleting fieldMetadata records.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"section-exists\"],\"affectedPaths\":[\"sections[]\",\"sections[].rows[]\",\"sections[].rows[].columns[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.row.add\",\"title\":\"Adicionar linha numa seção\",\"scope\":\"section\",\"targetKind\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\"},\"columns\":{\"type\":\"number\",\"minimum\":1,\"maximum\":12,\"default\":1}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"sections[].rows[]\",\"key\":\"id\"}],\"validators\":[\"section-exists\",\"row-id-unique-in-section\"],\"affectedPaths\":[\"sections[].rows[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.column.add\",\"title\":\"Adicionar coluna numa linha\",\"scope\":\"row\",\"targetKind\":\"row\",\"target\":{\"kind\":\"row\",\"resolver\":\"row-by-id-in-section\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\"},\"span\":{\"type\":\"number\",\"minimum\":1,\"maximum\":12,\"default\":6}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"sections[].rows[].columns[]\",\"key\":\"id\"}],\"validators\":[\"row-exists\",\"column-id-unique-in-row\"],\"affectedPaths\":[\"sections[].rows[].columns[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.field.move\",\"title\":\"Mover campo no layout\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-reconciler\",\"handlerContract\":{\"reads\":[\"fieldMetadata[].name\",\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"writes\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"identityKeys\":[\"fieldMetadata[].name\",\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.name\",\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"target.name\":{\"type\":\"string\"},\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"failureModes\":[\"target-field-not-found\",\"target-layout-location-not-found\",\"ambiguous-field-target\",\"duplicate-field-placement\"],\"description\":\"Moves a field placement by stable section, row, column, and field ids; index is insertion position only.\"}}],\"validators\":[\"field-exists\",\"layout-target-exists\",\"no-index-as-identity\",\"field-exists-in-layout\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.visualBlock.add\",\"title\":\"Adicionar bloco visual\",\"scope\":\"column\",\"targetKind\":\"column\",\"target\":{\"kind\":\"column\",\"resolver\":\"column-by-id-in-row\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"document\"],\"properties\":{\"id\":{\"type\":\"string\"},\"document\":{\"type\":\"object\",\"required\":[\"kind\",\"version\",\"nodes\"],\"properties\":{\"kind\":{\"const\":\"praxis.rich-content\"},\"version\":{\"type\":\"string\"},\"nodes\":{\"type\":\"array\"}}},\"layout\":{\"enum\":[\"block\",\"inline\"],\"default\":\"block\"},\"rootClassName\":{\"type\":[\"string\",\"null\"]},\"index\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-visual-block-add\",\"handlerContract\":{\"reads\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items\"],\"writes\":[\"sections[].rows[].columns[].items\"],\"identityKeys\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.sectionId\",\"target.rowId\",\"target.columnId\",\"id\",\"document\"],\"properties\":{\"target.sectionId\":{\"type\":\"string\"},\"target.rowId\":{\"type\":\"string\"},\"target.columnId\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"document\":{\"type\":\"object\"},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"rootClassName\":{\"type\":[\"string\",\"null\"]},\"index\":{\"type\":\"number\"}}},\"failureModes\":[\"target-layout-location-not-found\",\"duplicate-visual-block-id\",\"invalid-rich-content-document\"],\"description\":\"Adds a richContent layout item into sections[].rows[].columns[].items[] by stable section, row, and column ids.\"}}],\"validators\":[\"layout-target-exists\",\"visual-block-id-unique\",\"rich-content-document-valid\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]}]}",
8826
9106
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
@@ -8830,7 +9110,7 @@
8830
9110
  "corpusVersion": "1.0.0"
8831
9111
  },
8832
9112
  {
8833
- "chunkIndex": 18,
9113
+ "chunkIndex": 46,
8834
9114
  "chunkKind": "authoring_manifest",
8835
9115
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"layout.visualBlock.update\",\"title\":\"Atualizar bloco visual\",\"scope\":\"layout\",\"targetKind\":\"visualBlock\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"document\":{\"type\":\"object\",\"required\":[\"kind\",\"version\",\"nodes\"],\"properties\":{\"kind\":{\"const\":\"praxis.rich-content\"},\"version\":{\"type\":\"string\"},\"nodes\":{\"type\":\"array\"}}},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"rootClassName\":{\"type\":[\"string\",\"null\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-visual-block-update\",\"handlerContract\":{\"reads\":[\"sections[].rows[].columns[].items[].id\"],\"writes\":[\"sections[].rows[].columns[].items\"],\"identityKeys\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.itemId\"],\"properties\":{\"target.itemId\":{\"type\":\"string\"},\"document\":{\"type\":\"object\"},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"rootClassName\":{\"type\":[\"string\",\"null\"]}}},\"failureModes\":[\"target-visual-block-not-found\",\"invalid-rich-content-document\"],\"description\":\"Updates a richContent layout item by stable layout item id without touching fieldMetadata or form submit payload.\"}}],\"validators\":[\"visual-block-exists\",\"rich-content-document-valid\",\"editor-round-trip-preserve\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.visualBlock.move\",\"title\":\"Mover bloco visual\",\"scope\":\"layout\",\"targetKind\":\"visualBlock\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-visual-block-move\",\"handlerContract\":{\"reads\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"writes\":[\"sections[].rows[].columns[].items\"],\"identityKeys\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.itemId\",\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"target.itemId\":{\"type\":\"string\"},\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"failureModes\":[\"target-visual-block-not-found\",\"target-layout-location-not-found\",\"ambiguous-visual-block-target\"],\"description\":\"Moves a richContent layout item by stable item, section, row, and column ids; index is insertion position only.\"}}],\"validators\":[\"visual-block-exists\",\"layout-target-exists\",\"no-index-as-identity\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.visualBlock.remove\",\"title\":\"Remover bloco visual\",\"scope\":\"layout\",\"targetKind\":\"visualBlock\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-visual-block-remove\",\"handlerContract\":{\"reads\":[\"sections[].rows[].columns[].items[].id\"],\"writes\":[\"sections[].rows[].columns[].items\"],\"identityKeys\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.itemId\"],\"properties\":{\"target.itemId\":{\"type\":\"string\"}}},\"failureModes\":[\"target-visual-block-not-found\",\"ambiguous-visual-block-target\"],\"description\":\"Removes a richContent layout item from sections[].rows[].columns[].items[] without touching fieldMetadata or form submit payload.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"visual-block-exists\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"rule.visibility.add\",\"title\":\"Adicionar regra de visibilidade\",\"scope\":\"global\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"type\":{\"const\":\"visibility\",\"description\":\"Discriminador de tipo da regra; obrigatório para distinção em formRules[]\"},\"targetType\":{\"enum\":[\"field\",\"section\",\"row\",\"column\",\"action\",\"visualBlock\"],\"default\":\"field\"},\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1},\"condition\":{\"type\":\"object\",\"description\":\"JsonLogic AST. Visual-safe subset: field comparisons with scalar or field operands plus and/or groups. Advanced operators are runtime JSON-only until focused visual round-trip support exists.\"},\"metadata\":{\"type\":\"object\",\"required\":[\"origin\",\"reviewStatus\"],\"properties\":{\"origin\":{\"const\":\"llm\",\"description\":\"Origem obrigatória para regra sugerida por IA.\"},\"reviewStatus\":{\"const\":\"pending\",\"description\":\"Toda regra criada pela IA entra pendente de revisão humana.\"}}}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"validators\":[\"rule-id-unique\",\"rule-target-refs-exist\",\"json-logic-valid\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"rule.validation.add\",\"title\":\"Adicionar regra de validação\",\"scope\":\"global\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"message\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"type\":{\"const\":\"validation\",\"description\":\"Discriminador de tipo da regra; obrigatório para distinção em formRules[]\"},\"targetType\":{\"enum\":[\"field\",\"section\",\"row\",\"column\",\"action\",\"visualBlock\"],\"default\":\"field\"},\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1},\"condition\":{\"type\":\"object\",\"description\":\"JsonLogic AST; quando true, exibe mensagem de erro. Visual-safe subset: field comparisons with scalar or field operands plus and/or groups. Advanced operators are runtime JSON-only until focused visual round-trip support exists.\"},\"message\":{\"type\":\"string\",\"description\":\"Mensagem de erro a exibir ao usuário\"},\"level\":{\"enum\":[\"error\",\"warning\"],\"default\":\"error\"},\"metadata\":{\"type\":\"object\",\"required\":[\"origin\",\"reviewStatus\"],\"properties\":{\"origin\":{\"const\":\"llm\",\"description\":\"Origem obrigatória para regra sugerida por IA.\"},\"reviewStatus\":{\"const\":\"pending\",\"description\":\"Toda regra criada pela IA entra pendente de revisão humana.\"}}}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"validators\":[\"rule-id-unique\",\"rule-target-refs-exist\",\"json-logic-valid\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\"]}]}",
8836
9116
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
@@ -8840,7 +9120,7 @@
8840
9120
  "corpusVersion": "1.0.0"
8841
9121
  },
8842
9122
  {
8843
- "chunkIndex": 19,
9123
+ "chunkIndex": 47,
8844
9124
  "chunkKind": "authoring_manifest",
8845
9125
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"rule.computedValue.add\",\"title\":\"Adicionar regra de valor calculado\",\"scope\":\"global\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"value\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"type\":{\"const\":\"computedValue\",\"description\":\"Discriminador de regra que escreve effect.properties.value em formRules[].\"},\"targetType\":{\"const\":\"field\",\"description\":\"Valor calculado só é materializado em FormControl de campo.\"},\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1},\"condition\":{\"type\":\"object\",\"description\":\"JsonLogic AST; quando true aplica value, quando false aplica valueWhenFalse se informado. Computed expressions are runtime JSON-only unless a focused visual round-trip path exists.\"},\"value\":{\"type\":\"object\",\"description\":\"Envelope obrigatório e fechado: exatamente { expression: <JsonLogic> } para cálculo ou exatamente { literal: <valor> } para valor literal estruturado.\",\"oneOf\":[{\"required\":[\"expression\"],\"not\":{\"required\":[\"literal\"]},\"additionalProperties\":false},{\"required\":[\"literal\"],\"not\":{\"required\":[\"expression\"]},\"additionalProperties\":false}],\"properties\":{\"expression\":{\"type\":\"object\",\"description\":\"JsonLogic AST avaliado contra o contexto do formulário.\"},\"literal\":{\"description\":\"Valor literal, inclusive objeto estruturado.\"}}},\"valueWhenFalse\":{\"type\":\"object\",\"description\":\"Envelope opcional e fechado aplicado no ramo falso. Use exatamente { literal: null } para limpar o valor.\",\"oneOf\":[{\"required\":[\"expression\"],\"not\":{\"required\":[\"literal\"]},\"additionalProperties\":false},{\"required\":[\"literal\"],\"not\":{\"required\":[\"expression\"]},\"additionalProperties\":false}],\"properties\":{\"expression\":{\"type\":\"object\",\"description\":\"JsonLogic AST avaliado contra o contexto do formulário.\"},\"literal\":{\"description\":\"Valor literal, inclusive null.\"}}},\"metadata\":{\"type\":\"object\",\"required\":[\"origin\",\"reviewStatus\"],\"properties\":{\"origin\":{\"const\":\"llm\",\"description\":\"Origem obrigatória para regra sugerida por IA.\"},\"reviewStatus\":{\"const\":\"pending\",\"description\":\"Toda regra criada pela IA entra pendente de revisão humana.\"}}}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"validators\":[\"rule-id-unique\",\"rule-target-refs-exist\",\"json-logic-valid\",\"computed-value-envelope-valid\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"rule.visualBlockGuidance.add\",\"title\":\"Materializar orientação visual derivada\",\"scope\":\"global\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"type\",\"targetType\",\"targets\",\"condition\",\"properties\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"type\":{\"const\":\"visualBlockGuidance\",\"description\":\"Discriminador para regra de orientação visual derivada em formRules[].\"},\"targetType\":{\"const\":\"visualBlock\",\"description\":\"Projeções visuais sempre apontam para richContent layout items e não representam a decisão canônica.\"},\"context\":{\"enum\":[\"notification\",\"style\"],\"default\":\"notification\"},\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1},\"condition\":{\"type\":\"object\",\"description\":\"JsonLogic AST; quando true aplica properties, quando false aplica propertiesWhenFalse. Visual-safe subset: field comparisons with scalar or field operands plus and/or groups. Advanced operators are runtime JSON-only until focused visual round-trip support exists.\"},\"properties\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"visible\":{\"type\":\"boolean\"},\"hidden\":{\"type\":\"boolean\"},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"className\":{\"type\":\"string\"},\"rootClassName\":{\"type\":\"string\"},\"style\":{\"type\":\"object\"},\"text\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"message\":{\"type\":\"string\"},\"textNodeId\":{\"type\":\"string\"},\"titleNodeId\":{\"type\":\"string\"},\"messageNodeId\":{\"type\":\"string\"}},\"description\":\"Use apenas propriedades suportadas por RULE_PROPERTY_SCHEMA.visualBlock; não escreva document, HTML, handlers, dados de payload ou regra de negócio canônica.\"},\"propertiesWhenFalse\":{\"type\":\"object\",\"properties\":{\"visible\":{\"type\":\"boolean\"},\"hidden\":{\"type\":\"boolean\"},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"className\":{\"type\":\"string\"},\"rootClassName\":{\"type\":\"string\"},\"style\":{\"type\":\"object\"},\"text\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"message\":{\"type\":\"string\"},\"textNodeId\":{\"type\":\"string\"},\"titleNodeId\":{\"type\":\"string\"},\"messageNodeId\":{\"type\":\"string\"}}},\"metadata\":{\"type\":\"object\",\"required\":[\"origin\",\"reviewStatus\"],\"properties\":{\"origin\":{\"const\":\"llm\",\"description\":\"Origem obrigatória para regra sugerida por IA.\"},\"reviewStatus\":{\"const\":\"pending\",\"description\":\"Toda regra criada pela IA entra pendente de revisão humana.\"}}}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"validators\":[\"rule-id-unique\",\"visual-block-exists\",\"json-logic-valid\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"rule.remove\",\"title\":\"Remover regra\",\"scope\":\"rule\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"remove-by-key\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"rule-exists\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"action.submit.configure\",\"title\":\"Configurar botão de envio\",\"scope\":\"global\",\"targetKind\":\"formAction\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"visible\":{\"type\":\"boolean\"},\"color\":{\"enum\":[\"primary\",\"accent\",\"warn\",\"basic\"]}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"actions.submit\"}],\"validators\":[\"editor-round-trip-preserve\"],\"affectedPaths\":[\"actions.submit\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"action.cancel.configure\",\"title\":\"Configurar botão de cancelar\",\"scope\":\"global\",\"targetKind\":\"formAction\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"visible\":{\"type\":\"boolean\"},\"color\":{\"enum\":[\"primary\",\"accent\",\"warn\",\"basic\"]},\"navigateTo\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"actions.cancel\"}],\"validators\":[\"editor-round-trip-preserve\"],\"affectedPaths\":[\"actions.cancel\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]}]}",
8846
9126
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
@@ -8850,7 +9130,7 @@
8850
9130
  "corpusVersion": "1.0.0"
8851
9131
  },
8852
9132
  {
8853
- "chunkIndex": 20,
9133
+ "chunkIndex": 48,
8854
9134
  "chunkKind": "authoring_manifest",
8855
9135
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"action.reset.configure\",\"title\":\"Configurar botão de reset\",\"scope\":\"global\",\"targetKind\":\"formAction\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"visible\":{\"type\":\"boolean\"},\"color\":{\"enum\":[\"primary\",\"accent\",\"warn\",\"basic\"]},\"confirmBeforeReset\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"actions.reset\"}],\"validators\":[\"editor-round-trip-preserve\"],\"affectedPaths\":[\"actions.reset\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]}]}",
8856
9136
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
@@ -8860,7 +9140,7 @@
8860
9140
  "corpusVersion": "1.0.0"
8861
9141
  },
8862
9142
  {
8863
- "chunkIndex": 21,
9143
+ "chunkIndex": 49,
8864
9144
  "chunkKind": "authoring_manifest",
8865
9145
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"field-name-unique\",\"level\":\"error\",\"code\":\"DF002\",\"description\":\"Nomes de campos devem ser únicos em fieldMetadata.\"},{\"validatorId\":\"section-id-unique\",\"level\":\"error\",\"code\":\"DF003\",\"description\":\"IDs de seções devem ser únicos em sections[].\"},{\"validatorId\":\"section-exists\",\"level\":\"error\",\"code\":\"DF004\",\"description\":\"A seção alvo deve existir em sections[].\"},{\"validatorId\":\"field-exists-in-layout\",\"level\":\"warning\",\"code\":\"DF005\",\"description\":\"Campo definido em fieldMetadata mas ausente no layout.\"},{\"validatorId\":\"local-schema-name-no-collision\",\"level\":\"error\",\"code\":\"DF006\",\"description\":\"Nome de campo local não pode colidir com campo schema-backed existente.\"},{\"validatorId\":\"field-is-local\",\"level\":\"error\",\"code\":\"DF007\",\"description\":\"Operação restrita a campos locais (source:\\\"local\\\"). Campo schema-backed não pode ser removido ou ter submitPolicy alterada.\"},{\"validatorId\":\"rule-id-unique\",\"level\":\"error\",\"code\":\"DF008\",\"description\":\"IDs de regras devem ser únicos em formRules[].\"},{\"validatorId\":\"rule-exists\",\"level\":\"error\",\"code\":\"DF009\",\"description\":\"A regra alvo deve existir em formRules[].\"},{\"validatorId\":\"rule-target-refs-exist\",\"level\":\"error\",\"code\":\"DF010\",\"description\":\"Todos os targets da regra devem referenciar campos, seções, ações ou blocos visuais existentes.\"},{\"validatorId\":\"computed-value-envelope-valid\",\"level\":\"error\",\"code\":\"DF023\",\"description\":\"Valores calculados devem usar envelope explícito e fechado, exatamente { expression: <JsonLogic> } ou exatamente { literal: <valor> }; objetos literais sem envelope ou envelopes com chaves extras são ambíguos.\"},{\"validatorId\":\"json-logic-valid\",\"level\":\"error\",\"code\":\"DF011\",\"description\":\"A expressão JsonLogic deve ser um AST válido (suporte canônico à spec JsonLogic).\"},{\"validatorId\":\"layout-target-exists\",\"level\":\"error\",\"code\":\"DF012\",\"description\":\"A seção/linha/coluna de destino devem existir antes de mover o campo.\"},{\"validatorId\":\"no-index-as-identity\",\"level\":\"error\",\"code\":\"DF013\",\"description\":\"Operações de layout não devem usar índice de array como identidade canônica; use IDs estáveis.\"},{\"validatorId\":\"row-exists\",\"level\":\"error\",\"code\":\"DF014\",\"description\":\"A linha alvo deve existir na seção especificada.\"},{\"validatorId\":\"row-id-unique-in-section\",\"level\":\"error\",\"code\":\"DF015\",\"description\":\"O id da nova linha deve ser único dentro da seção alvo.\"},{\"validatorId\":\"column-id-unique-in-row\",\"level\":\"error\",\"code\":\"DF016\",\"description\":\"O id da nova coluna deve ser único dentro da linha alvo.\"},{\"validatorId\":\"control-type-compatible\",\"level\":\"error\",\"code\":\"DF017\",\"description\":\"O tipo de controle deve ser compatível com o tipo de dado do campo.\"},{\"validatorId\":\"option-source-valid\",\"level\":\"error\",\"code\":\"DF018\",\"description\":\"A fonte de opções deve ser válida para o tipo de controle especificado.\"},{\"validatorId\":\"editor-round-trip-preserve\",\"level\":\"error\",\"code\":\"DF019\",\"description\":\"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"},{\"validatorId\":\"visual-block-exists\",\"level\":\"error\",\"code\":\"DF020\",\"description\":\"O bloco visual alvo deve existir como item kind:\\\"richContent\\\" em sections[].rows[].columns[].items[].\"},{\"validatorId\":\"visual-block-id-unique\",\"level\":\"error\",\"code\":\"DF021\",\"description\":\"IDs de blocos visuais devem ser unicos entre os itens de layout do formulario.\"},{\"validatorId\":\"rich-content-document-valid\",\"level\":\"error\",\"code\":\"DF022\",\"description\":\"O document do bloco visual deve seguir o contrato RichContentDocument canonico.\"}]}",
8866
9146
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
@@ -8870,7 +9150,7 @@
8870
9150
  "corpusVersion": "1.0.0"
8871
9151
  },
8872
9152
  {
8873
- "chunkIndex": 22,
9153
+ "chunkIndex": 50,
8874
9154
  "chunkKind": "authoring_manifest",
8875
9155
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"strip-undefined\",\"normalize-json-logic\",\"stable-field-order\",\"preserve-column-layout-items\",\"preserve-local-field-source\",\"preserve-section-row-column-ids\"]}",
8876
9156
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
@@ -8880,7 +9160,7 @@
8880
9160
  "corpusVersion": "1.0.0"
8881
9161
  },
8882
9162
  {
8883
- "chunkIndex": 23,
9163
+ "chunkIndex": 51,
8884
9164
  "chunkKind": "authoring_manifest",
8885
9165
  "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"add-local-transient-field\",\"request\":\"Adicionar campo auxiliar local \\\"notasInternas\\\" que não deve aparecer no payload de envio\",\"operationId\":\"field.local.add\",\"params\":{\"name\":\"notasInternas\",\"label\":\"Notas Internas\",\"controlType\":\"textarea\",\"source\":\"local\",\"transient\":true,\"submitPolicy\":\"omit\"},\"isPositive\":true},{\"id\":\"relabel-schema-backed-field\",\"request\":\"Mudar o label do campo email para \\\"E-mail Corporativo\\\"\",\"operationId\":\"field.label.set\",\"target\":\"email\",\"params\":{\"label\":\"E-mail Corporativo\"},\"isPositive\":true},{\"id\":\"move-field-to-column\",\"request\":\"Mover campo telefone para a primeira coluna da seção de contato\",\"operationId\":\"layout.field.move\",\"target\":\"telefone\",\"params\":{\"targetSectionId\":\"secao-contato\",\"targetRowId\":\"row-1\",\"targetColumnId\":\"col-1\"},\"isPositive\":true},{\"id\":\"add-visual-block\",\"request\":\"Adicionar um aviso visual antes dos campos de contato\",\"operationId\":\"layout.visualBlock.add\",\"target\":\"col-contato\",\"params\":{\"id\":\"aviso-contato\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"text\":\"Confira os dados antes de salvar.\"}]},\"layout\":\"block\"},\"isPositive\":true},{\"id\":\"move-visual-block\",\"request\":\"Mover o aviso visual para a segunda coluna da secao de contato\",\"operationId\":\"layout.visualBlock.move\",\"target\":\"aviso-contato\",\"params\":{\"targetSectionId\":\"secao-contato\",\"targetRowId\":\"row-1\",\"targetColumnId\":\"col-2\"},\"isPositive\":true},{\"id\":\"add-visibility-rule\",\"request\":\"Ocultar o campo cpf quando o tipo de pessoa for jurídica\",\"operationId\":\"rule.visibility.add\",\"params\":{\"id\":\"ocultar-cpf-pj\",\"name\":\"Ocultar CPF para PJ\",\"targetType\":\"field\",\"targets\":[\"cpf\"],\"condition\":{\"==\":[{\"var\":\"tipoPessoa\"},\"juridica\"]}},\"isPositive\":true},{\"id\":\"add-computed-value-rule\",\"request\":\"Calcular idade a partir da data de nascimento e limpar quando a data estiver vazia\",\"operationId\":\"rule.computedValue.add\",\"params\":{\"id\":\"birth-date-computes-age\",\"name\":\"Calcular idade\",\"type\":\"computedValue\",\"targetType\":\"field\",\"targets\":[\"age\"],\"condition\":{\"!\":[{\"isBlank\":[{\"var\":\"birthDate\"}]}]},\"value\":{\"expression\":{\"yearsSince\":[{\"var\":\"birthDate\"}]}},\"valueWhenFalse\":{},\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"}},\"isPositive\":true},{\"id\":\"add-visual-block-guidance-rule\",\"request\":\"Materializar no aviso visual a decisao governada que exige aprovacao de compliance para fornecedor com risco critico\",\"operationId\":\"rule.visualBlockGuidance.add\",\"params\":{\"id\":\"supplier-risk-guidance\",\"name\":\"Supplier risk guidance\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"targets\":[\"supplier-risk-notice\"],\"condition\":{\"===\":[{\"var\":\"riscoFornecedor\"},\"critico\"]},\"properties\":{\"message\":\"Fornecedor critico exige aprovacao de compliance antes de emitir o pedido.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--critical\"},\"propertiesWhenFalse\":{\"message\":\"Fornecedor sem bloqueios criticos para este pedido.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--neutral\"},\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"}},\"isPositive\":true},{\"id\":\"reject-unknown-field\",\"request\":\"Alterar o label do campo \\\"campoInexistente\\\"\",\"operationId\":\"field.label.set\",\"target\":\"campoInexistente\",\"params\":{\"label\":\"Novo Label\"},\"isPositive\":false},{\"id\":\"require-confirmation-remove-field\",\"request\":\"Remover o campo auxiliar \\\"notasInternas\\\"\",\"operationId\":\"field.local.remove\",\"target\":\"notasInternas\",\"isPositive\":true},{\"id\":\"require-confirmation-remove-section\",\"request\":\"Remover a seção \\\"Dados Adicionais\\\"\",\"operationId\":\"layout.section.remove\",\"target\":\"secao-dados-adicionais\",\"isPositive\":true},{\"id\":\"round-trip-no-drift\",\"request\":\"Salvar e reabrir o formulário editado sem drift de configuração\",\"operationId\":\"field.label.set\",\"target\":\"nome\",\"params\":{\"label\":\"Nome Completo\"},\"isPositive\":true}]}",
8886
9166
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
@@ -8890,7 +9170,7 @@
8890
9170
  "corpusVersion": "1.0.0"
8891
9171
  },
8892
9172
  {
8893
- "chunkIndex": 24,
9173
+ "chunkIndex": 52,
8894
9174
  "chunkKind": "context_pack",
8895
9175
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"version\":\"v1\",\"optionsByPath\":{\"fieldMetadata[].controlType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"input\",\"label\":\"Input\"},{\"value\":\"textarea\",\"label\":\"Textarea\"},{\"value\":\"email\",\"label\":\"Email\"},{\"value\":\"password\",\"label\":\"Password\"},{\"value\":\"search\",\"label\":\"Search\"},{\"value\":\"url\",\"label\":\"URL\"},{\"value\":\"phone\",\"label\":\"Phone\"},{\"value\":\"cpfCnpjInput\",\"label\":\"CPF/CNPJ\"},{\"value\":\"numericTextBox\",\"label\":\"Number\"},{\"value\":\"currency\",\"label\":\"Currency\"},{\"value\":\"priceRange\",\"label\":\"Price range\"},{\"value\":\"date\",\"label\":\"Date picker\"},{\"value\":\"dateRange\",\"label\":\"Date range\"},{\"value\":\"dateInput\",\"label\":\"Date input\"},{\"value\":\"dateTime\",\"label\":\"Datetime\"},{\"value\":\"dateTimeRange\",\"label\":\"Datetime range\"},{\"value\":\"dateTimeLocal\",\"label\":\"Datetime local\"},{\"value\":\"time\",\"label\":\"Time input\"},{\"value\":\"timePicker\",\"label\":\"Time picker\"},{\"value\":\"timeRange\",\"label\":\"Time range\"},{\"value\":\"week\",\"label\":\"Week input\"},{\"value\":\"month\",\"label\":\"Month input\"},{\"value\":\"year\",\"label\":\"Year input\"},{\"value\":\"select\",\"label\":\"Select\"},{\"value\":\"multiSelect\",\"label\":\"Multi select\"},{\"value\":\"multiSelectTree\",\"label\":\"Multi select tree\"},{\"value\":\"treeSelect\",\"label\":\"Tree select\"},{\"value\":\"transferList\",\"label\":\"Transfer list\"},{\"value\":\"autoComplete\",\"label\":\"Autocomplete\"},{\"value\":\"searchable-select\",\"label\":\"Searchable select\"},{\"value\":\"async-select\",\"label\":\"Async select\"},{\"value\":\"radio\",\"label\":\"Radio group\"},{\"value\":\"checkbox\",\"label\":\"Checkbox group\"},{\"value\":\"selectionList\",\"label\":\"Selection list\"},{\"value\":\"toggle\",\"label\":\"Toggle\"},{\"value\":\"buttonToggle\",\"label\":\"Button toggle\"},{\"value\":\"slider\",\"label\":\"Slider\"},{\"value\":\"rangeSlider\",\"label\":\"Range slider\"},{\"value\":\"rating\",\"label\":\"Rating\"},{\"value\":\"chipInput\",\"label\":\"Chips\"},{\"value\":\"chipList\",\"label\":\"Chip list\"},{\"value\":\"upload\",\"label\":\"File upload\"},{\"value\":\"color\",\"label\":\"Color input\"},{\"value\":\"colorPicker\",\"label\":\"Color picker\"},{\"value\":\"cronBuilder\",\"label\":\"Cron builder\"}]},\"fieldMetadata[].source\":{\"mode\":\"enum\",\"options\":[{\"value\":\"schema\",\"label\":\"Schema field\"},{\"value\":\"local\",\"label\":\"Local field\"}]},\"fieldMetadata[].submitPolicy\":{\"mode\":\"enum\",\"options\":[{\"value\":\"omit\",\"label\":\"Omit from submit payload\"},{\"value\":\"include\",\"label\":\"Include in submit payload\"},{\"value\":\"includeWhenDirty\",\"label\":\"Include only when dirty\"}]},\"fieldMetadata[].materialDesign.appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"fill\",\"label\":\"Fill\"},{\"value\":\"outline\",\"label\":\"Outline\"}]},\"fieldMetadata[].materialDesign.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"}]},\"fieldMetadata[].materialDesign.floatLabel\":{\"mode\":\"enum\",\"options\":[{\"value\":\"auto\",\"label\":\"Auto\"},{\"value\":\"always\",\"label\":\"Always\"}]},\"fieldMetadata[].materialDesign.density\":{\"mode\":\"enum\",\"options\":[{\"value\":\"comfortable\",\"label\":\"Comfortable\"},{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"dense\",\"label\":\"Dense\"}]},\"actions.position\":{\"mode\":\"enum\",\"options\":[{\"value\":\"left\",\"label\":\"Left\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"right\",\"label\":\"Right\"},{\"value\":\"justified\",\"label\":\"Justified\"},{\"value\":\"split\",\"label\":\"Split\"}]},\"actions.orientation\":{\"mode\":\"enum\",\"options\":[{\"value\":\"horizontal\",\"label\":\"Horizontal\"},{\"value\":\"vertical\",\"label\":\"Vertical\"}]},\"actions.spacing\":{\"mode\":\"enum\",\"options\":[{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"normal\",\"label\":\"Normal\"},{\"value\":\"spacious\",\"label\":\"Spacious\"}]},\"actions.placement\":{\"mode\":\"enum\",\"options\":[{\"value\":\"insideLastSection\",\"label\":\"Inside last section\"},{\"value\":\"afterSections\",\"label\":\"After sections\"},{\"value\":\"top\",\"label\":\"Top\"}]},\"actions.submit.type\":{\"mode\":\"enum\",\"options\":[{\"value\":\"button\",\"label\":\"Button\"},{\"value\":\"submit\",\"label\":\"Submit\"},{\"value\":\"reset\",\"label\":\"Reset\"}]},\"actions.submit.variant\":{\"mode\":\"enum\",\"options\":[{\"value\":\"raised\",\"label\":\"Raised\"},{\"value\":\"stroked\",\"label\":\"Stroked\"},{\"value\":\"flat\",\"label\":\"Flat\"},{\"value\":\"fab\",\"label\":\"Fab\"}]},\"actions.submit.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"small\",\"label\":\"Small\"},{\"value\":\"medium\",\"label\":\"Medium\"},{\"value\":\"large\",\"label\":\"Large\"}]},\"actions.submit.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"},{\"value\":\"basic\",\"label\":\"Basic\"}]},\"sections[].headerAlign\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"}]},\"sections[].appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"card\",\"label\":\"Card\"},{\"value\":\"plain\",\"label\":\"Plain\"},{\"value\":\"step\",\"label\":\"Step\"}]},\"sections[].sectionHeader.mode\":{\"mode\":\"enum\",\"options\":[{\"value\":\"icon\",\"label\":\"Icon\"},{\"value\":\"avatar-image\",\"label\":\"Avatar image\"},{\"value\":\"avatar-initials\",\"label\":\"Avatar initials\"},{\"value\":\"auto\",\"label\":\"Auto\"}]},\"sections[].sectionHeader.emptyState\":{\"mode\":\"enum\",\"options\":[{\"value\":\"placeholder-avatar\",\"label\":\"Neutral placeholder\"},{\"value\":\"fallback-icon\",\"label\":\"Fallback icon\"},{\"value\":\"none\",\"label\":\"None\"}]},\"sections[].sectionHeader.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"sm\",\"label\":\"Small\"},{\"value\":\"md\",\"label\":\"Medium\"},{\"value\":\"lg\",\"label\":\"Large\"}]},\"sections[].stepLabel\":{\"mode\":\"suggested\",\"options\":[{\"value\":\"Dados básicos\",\"label\":\"Dados básicos\"},{\"value\":\"Detalhes\",\"label\":\"Detalhes\"},{\"value\":\"Confirmação\",\"label\":\"Confirmação\"}]},\"sections[].titleStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"titleLarge\",\"label\":\"Title large\"},{\"value\":\"titleMedium\",\"label\":\"Title medium\"},{\"value\":\"titleSmall\",\"label\":\"Title small\"},{\"value\":\"headlineSmall\",\"label\":\"Headline small\"}]},\"sections[].descriptionStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"bodyLarge\",\"label\":\"Body large\"},{\"value\":\"bodyMedium\",\"label\":\"Body medium\"},{\"value\":\"bodySmall\",\"label\":\"Body small\"}]},\"sections[].rows[].columns[].align\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"end\",\"label\":\"End\"},{\"value\":\"stretch\",\"label\":\"Stretch\"}]},\"sections[].rows[].columns[].items[].kind\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"richContent\",\"label\":\"Rich content\"}]},\"sections[].rows[].columns[].items[].layout\":{\"mode\":\"enum\",\"options\":[{\"value\":\"block\",\"label\":\"Block\"},{\"value\":\"inline\",\"label\":\"Inline\"}]},\"formRules[].targetType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"section\",\"label\":\"Section\"},{\"value\":\"row\",\"label\":\"Row\"},{\"value\":\"column\",\"label\":\"Column\"},{\"value\":\"action\",\"label\":\"Action\"},{\"value\":\"visualBlock\",\"label\":\"Visual block\"}]},\"formRules[].context\":{\"mode\":\"enum\",\"options\":[{\"value\":\"visibility\",\"label\":\"Visibility\"},{\"value\":\"readOnly\",\"label\":\"Read only\"},{\"value\":\"style\",\"label\":\"Style\"},{\"value\":\"validation\",\"label\":\"Validation\"},{\"value\":\"notification\",\"label\":\"Notification\"}]}}}}",
8896
9176
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
@@ -8900,7 +9180,7 @@
8900
9180
  "corpusVersion": "1.0.0"
8901
9181
  },
8902
9182
  {
8903
- "chunkIndex": 25,
9183
+ "chunkIndex": 53,
8904
9184
  "chunkKind": "context_pack",
8905
9185
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"field.visibility.hide\",\"intentExamples\":[\"hide field\",\"ocultar campo\",\"esconder campo\",\"invisible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":true}]}},{\"id\":\"field.visibility.show\",\"intentExamples\":[\"show field\",\"mostrar campo\",\"exibir campo\",\"visible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":false}]}},{\"id\":\"field.label.set\",\"intentExamples\":[\"label\",\"rename field\",\"renomear campo\",\"titulo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"label\":\"{{value}}\"}]}},{\"id\":\"field.placeholder.set\",\"intentExamples\":[\"placeholder\",\"hint text\",\"texto de ajuda\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"placeholder\":\"{{value}}\"}]}},{\"id\":\"field.required.enable\",\"intentExamples\":[\"required\",\"obrigatorio\",\"mandatory\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":true}]}},{\"id\":\"field.required.disable\",\"intentExamples\":[\"optional\",\"nao obrigatorio\",\"opcional\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":false}]}},{\"id\":\"field.readonly.enable\",\"intentExamples\":[\"readonly\",\"somente leitura\",\"read only\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":true}]}},{\"id\":\"field.readonly.disable\",\"intentExamples\":[\"editable\",\"editavel\",\"read write\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":false}]}},{\"id\":\"field.disabled.enable\",\"intentExamples\":[\"disable field\",\"desabilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":true}]}},{\"id\":\"field.disabled.disable\",\"intentExamples\":[\"enable field\",\"habilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":false}]}},{\"id\":\"field.controlType.set\",\"intentExamples\":[\"control type\",\"tipo de campo\",\"controlType\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"controlType\":\"{{value}}\"}]}},{\"id\":\"field.icon.prefix.set\",\"intentExamples\":[\"prefix icon\",\"icone prefixo\",\"icon before\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"prefixIcon\":\"{{value}}\"}]}},{\"id\":\"field.icon.suffix.set\",\"intentExamples\":[\"suffix icon\",\"icone sufixo\",\"icon after\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"suffixIcon\":\"{{value}}\"}]}},{\"id\":\"section.title.set\",\"intentExamples\":[\"section title\",\"titulo da secao\",\"section name\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"title\":\"{{value}}\"}]}},{\"id\":\"section.description.set\",\"intentExamples\":[\"section description\",\"descricao da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"description\":\"{{value}}\"}]}},{\"id\":\"section.add\",\"intentExamples\":[\"add section\",\"adicionar secao\",\"nova secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{value}}\",\"title\":\"{{value}}\",\"rows\":[]}]},\"safetyNotes\":\"Certifique-se de que o ID da seção é único e relevante.\"},{\"id\":\"section.remove\",\"intentExamples\":[\"remove section\",\"remover secao\",\"excluir secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"section.order.set\",\"intentExamples\":[\"order section\",\"reordenar secao\",\"mover secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_order\":\"{{value}}\"}]},\"safetyNotes\":\"A reordenação de seções é uma operação que deve ser revisada.\"},{\"id\":\"row.add\",\"intentExamples\":[\"add row\",\"adicionar linha\",\"nova linha na secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"columns\":[]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da linha é único e relevante na seção.\"},{\"id\":\"row.remove\",\"intentExamples\":[\"remove row\",\"remover linha\",\"excluir linha da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]},\"safetyNotes\":\"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.add\",\"intentExamples\":[\"add column\",\"adicionar coluna\",\"nova coluna na linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"items\":[]}]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da coluna é único e relevante na linha.\"},{\"id\":\"column.remove\",\"intentExamples\":[\"remove column\",\"remover coluna\",\"excluir coluna da linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]}]},\"safetyNotes\":\"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.field.add\",\"intentExamples\":[\"add field to column\",\"adicionar campo a coluna\",\"colocar campo na coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"id\":\"field-{{value}}\",\"fieldName\":\"{{value}}\"}]}]}]}]},\"safetyNotes\":\"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"},{\"id\":\"column.field.remove\",\"intentExamples\":[\"remove field from column\",\"remover campo da coluna\",\"tirar campo da coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"fieldName\":\"{{value}}\",\"_remove\":true}]}]}]}]},\"safetyNotes\":\"Remover um campo de uma coluna pode alterar o layout do formulário.\"},{\"id\":\"actions.submit.label.set\",\"intentExamples\":[\"submit label\",\"rotulo salvar\",\"texto botao enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.submit.visible.set\",\"intentExamples\":[\"show submit\",\"esconder salvar\",\"visibilidade enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.label.set\",\"intentExamples\":[\"cancel label\",\"rotulo cancelar\",\"texto botao cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.visible.set\",\"intentExamples\":[\"show cancel\",\"esconder cancelar\",\"visibilidade cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.reset.label.set\",\"intentExamples\":[\"reset label\",\"rotulo resetar\",\"texto botao limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.reset.visible.set\",\"intentExamples\":[\"show reset\",\"esconder reset\",\"visibilidade limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"rule.add.visibility\",\"intentExamples\":[\"add visibility rule\",\"regra de visibilidade\",\"campo condicional\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{value.id}}\",\"name\":\"{{value.name}}\",\"targetType\":\"field\",\"targets\":[\"{{target}}\"],\"effect\":{\"condition\":\"{{value.condition}}\",\"properties\":{\"hidden\":false},\"propertiesWhenFalse\":{\"hidden\":true}}}]},\"safetyNotes\":\"Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao.\"},{\"id\":\"rule.remove\",\"intentExamples\":[\"remove rule\",\"excluir regra\",\"apagar regra\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"}]}}",
8906
9186
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
@@ -8910,7 +9190,7 @@
8910
9190
  "corpusVersion": "1.0.0"
8911
9191
  },
8912
9192
  {
8913
- "chunkIndex": 26,
9193
+ "chunkIndex": 54,
8914
9194
  "chunkKind": "context_pack",
8915
9195
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"rule.add.dependency\",\"intentExamples\":[\"adicionar dependencia\",\"campo depende de\",\"mostrar se\",\"obrigatorio se\",\"desabilitar se\",\"campo condicional\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"triggerField\",\"type\":\"STRING\",\"description\":\"Campo que controla a regra (ex: tipoPessoa)\"},{\"name\":\"conditionValue\",\"type\":\"STRING\",\"description\":\"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado pela regra (ex: cnpj)\"},{\"name\":\"effectType\",\"type\":\"ENUM\",\"options\":[\"visibility\",\"required\",\"disabled\"],\"description\":\"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"rule_{{params.triggerField}}_{{params.targetField}}\",\"name\":\"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"{{params.triggerField}}\"},\"{{params.conditionValue}}\"]},\"properties\":{\"hidden\":\"{{params.effectType === 'visibility' ? false : undefined}}\",\"required\":\"{{params.effectType === 'required' ? true : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? true : undefined}}\"},\"propertiesWhenFalse\":{\"hidden\":\"{{params.effectType === 'visibility' ? true : undefined}}\",\"required\":\"{{params.effectType === 'required' ? false : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? false : undefined}}\"}}}]},\"safetyNotes\":\"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"},{\"id\":\"rule.add.custom\",\"intentExamples\":[\"adicionar regra customizada\",\"regra complexa\",\"logica de formulario\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"id\",\"type\":\"STRING\",\"description\":\"ID único da regra\"},{\"name\":\"condition\",\"type\":\"STRING\",\"description\":\"Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \\\"and\\\": [{ \\\">\\\": [{ \\\"var\\\": \\\"idade\\\" }, 18] }, { \\\"==\\\": [{ \\\"var\\\": \\\"possuiHabilitacao\\\" }, true] }] })\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado\"},{\"name\":\"propertyName\",\"type\":\"STRING\",\"description\":\"Propriedade afetada (hidden, required, disabled, readOnly)\"},{\"name\":\"valueIfTrue\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for verdadeira\"},{\"name\":\"valueIfFalse\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for falsa\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{params.id}}\",\"name\":\"Regra Customizada: {{params.id}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":\"{{params.condition}}\",\"properties\":{\"{{params.propertyName}}\":\"{{params.valueIfTrue}}\"},\"propertiesWhenFalse\":{\"{{params.propertyName}}\":\"{{params.valueIfFalse}}\"}}}]}}]}}",
8916
9196
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
@@ -8920,7 +9200,7 @@
8920
9200
  "corpusVersion": "1.0.0"
8921
9201
  },
8922
9202
  {
8923
- "chunkIndex": 27,
9203
+ "chunkIndex": 55,
8924
9204
  "chunkKind": "context_pack",
8925
9205
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"fieldResolvers\":{\"fieldMetadata[]\":[\"name\",\"label\"],\"sections[]\":[\"id\",\"title\"],\"sections[].rows[].columns[].items[]\":[\"id\",\"fieldName\"],\"sections[].rows[].columns[].fields[]\":[]},\"hints\":[\"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\"Local fields are real form controls. Create them in fieldMetadata[] with source:\\\"local\\\", usually transient:true and submitPolicy:\\\"omit\\\", then place them as kind:\\\"field\\\" layout items.\",\"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\"Use sections[].rows[].columns[].items[] as the canonical mixed layout order. kind:\\\"field\\\" items reference fieldMetadata; kind:\\\"richContent\\\" items are visual blocks outside submit payload.\",\"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\"For field formRules that must calculate a FormControl value, use effect.properties.value with the closed envelope { expression: <JSON Logic> }, such as { expression: { yearsSince: [{ var: \\\"birthDate\\\" }] } }. Use the closed envelope { literal: <value> } for structured literal objects; do not add extra keys and do not generate TypeScript functions.\",\"For conditional side effects, use formCommandRules with effects[].kind:\\\"global-action\\\" and a structured globalAction ref. The visual editor authors the primary effect and preserves secondary effects from advanced JSON. Do not put alert/modal/navigation commands inside formRules[].effect.properties.\",\"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"]}}",
8926
9206
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
@@ -8930,7 +9210,7 @@
8930
9210
  "corpusVersion": "1.0.0"
8931
9211
  },
8932
9212
  {
8933
- "chunkIndex": 28,
9213
+ "chunkIndex": 56,
8934
9214
  "chunkKind": "recipe",
8935
9215
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment\",\"_comment\":\"Official Praxis Dynamic Form recipe for governed conditional command rules.\"}",
8936
9216
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
@@ -8940,7 +9220,7 @@
8940
9220
  "corpusVersion": "1.0.0"
8941
9221
  },
8942
9222
  {
8943
- "chunkIndex": 29,
9223
+ "chunkIndex": 57,
8944
9224
  "chunkKind": "recipe",
8945
9225
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment2\",\"_comment2\":\"Use when a form must execute host-mediated alerts or confirmations from declarative rules after computed values stabilize.\"}",
8946
9226
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
@@ -8950,7 +9230,7 @@
8950
9230
  "corpusVersion": "1.0.0"
8951
9231
  },
8952
9232
  {
8953
- "chunkIndex": 30,
9233
+ "chunkIndex": 58,
8954
9234
  "chunkKind": "recipe",
8955
9235
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"variantId\":\"command-rules\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"status\":\"public-example\",\"tags\":[\"formCommandRules\",\"global-action\",\"computed-values\",\"business-rules\",\"llm-authoring\"],\"useWhen\":\"Create a metadata-driven form with computed values, conditional required fields and governed alert or confirmation dialogs without TypeScript host logic.\",\"examplePrompts\":[\"create a dynamic form rule that calculates age from birth date and alerts when a female applicant is under 18\",\"ask for confirmation when a vacation range starts on Friday\",\"show conditional command rules using dialog.alert and dialog.confirm\"]}}",
8956
9236
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
@@ -8960,7 +9240,7 @@
8960
9240
  "corpusVersion": "1.0.0"
8961
9241
  },
8962
9242
  {
8963
- "chunkIndex": 31,
9243
+ "chunkIndex": 59,
8964
9244
  "chunkKind": "recipe",
8965
9245
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"platformValue\",\"platformValue\":{\"canonicalRuntime\":\"@praxisui/dynamic-form evaluates formRules first, stabilizes computed values, then evaluates formCommandRules.\",\"commandContract\":\"formCommandRules uses PraxisRuntimeConditionalEffectRule<PraxisRuntimeGlobalActionEffect> with effects[].kind = global-action and a structured GlobalActionRef.\",\"propertyBoundary\":\"Use formRules for local field/property/value changes. Use formCommandRules for side effects such as alert, confirm, navigation or host-mediated commands.\",\"policyBoundary\":\"Use policy for trigger, distinct, distinctBy and runOnInitialEvaluation. Do not encode operational throttling inside Json Logic condition.\",\"authoringBoundary\":\"The visual config editor exposes command rules and structured payload fields for the primary effect. JSON remains an advanced escape hatch, not the primary authoring path. payloadExpr is preserved from advanced JSON when no structured payload is authored, but it is not a visual field in this cut. Secondary effects remain advanced JSON-authored and are preserved when the primary effect is edited visually.\"}}",
8966
9246
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
@@ -8970,7 +9250,7 @@
8970
9250
  "corpusVersion": "1.0.0"
8971
9251
  },
8972
9252
  {
8973
- "chunkIndex": 32,
9253
+ "chunkIndex": 60,
8974
9254
  "chunkKind": "recipe",
8975
9255
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"authoringGuidance\",\"authoringGuidance\":[\"Keep condition as canonical Json Logic, not a string DSL.\",\"Use effect.properties.value with { \\\"expression\\\": ... } for computed values and { \\\"literal\\\": ... } for structured literal values.\",\"Do not put dialog.alert, dialog.confirm, showAlert, navigate or modal commands inside formRules[].effect.properties.\",\"Use formCommandRules[].effects[].globalAction.actionId for the host-mediated command.\",\"Use structured payload fields for the primary effect in the visual editor. Keep payloadExpr and secondary effects in advanced JSON for this cut.\",\"Use trigger on-condition-enter for side effects by default.\",\"Set runOnInitialEvaluation to false unless a command must intentionally run during initial hydration.\",\"Set distinct and distinctBy for value-change commands that should not repeat while the same condition/value remains active.\",\"For date-range commands, use the committed date range value, such as vacationPeriod.startDate, not transient picker preview state.\"]}",
8976
9256
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
@@ -8980,7 +9260,7 @@
8980
9260
  "corpusVersion": "1.0.0"
8981
9261
  },
8982
9262
  {
8983
- "chunkIndex": 33,
9263
+ "chunkIndex": 61,
8984
9264
  "chunkKind": "recipe",
8985
9265
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"teaches\",\"teaches\":[\"dynamic-form.formRules.computed-value\",\"dynamic-form.formCommandRules\",\"dynamic-form.formCommandRules.global-action\",\"dynamic-form.formCommandRules.policy\",\"global-action.dialog.alert\",\"global-action.dialog.confirm\",\"date-range.committed-value\"]}",
8986
9266
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
@@ -8990,7 +9270,7 @@
8990
9270
  "corpusVersion": "1.0.0"
8991
9271
  },
8992
9272
  {
8993
- "chunkIndex": 34,
9273
+ "chunkIndex": 62,
8994
9274
  "chunkKind": "recipe",
8995
9275
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"testScenarios\",\"testScenarios\":[{\"id\":\"birthDate-age-alert-chain\",\"source\":\"business-rules-form-demo\",\"input\":{\"gender\":\"female\",\"birthDate\":\"2012-05-05\"},\"expects\":[\"formRules computes age before formCommandRules evaluate\",\"registration:female-underage-alert resolves dialog.alert from stabilized age\",\"guardianName remains a local property rule, not a command side effect\"]},{\"id\":\"distinct-age-alert\",\"source\":\"business-rules-form-demo\",\"input\":{\"gender\":\"female\",\"birthDate\":\"2012-05-05\"},\"expects\":[\"dialog.alert runs on condition enter\",\"the same age does not reopen the modal while the condition remains true\",\"distinct memory resets after the condition evaluates false\"]},{\"id\":\"friday-range-confirm\",\"source\":\"business-rules-form-demo\",\"input\":{\"vacationPeriod\":{\"startDate\":\"2026-05-01\",\"endDate\":\"2026-05-08\"}},\"expects\":[\"dialog.confirm evaluates only after startDate and endDate are committed\",\"distinctBy uses vacationPeriod.startDate\",\"picker preview state is not used as command input\"]},{\"id\":\"editor-preview-is-not-execution\",\"source\":\"config-editor\",\"input\":{\"mode\":\"preview\",\"actionId\":\"dialog.alert\"},\"expects\":[\"visual preview reports the command intent\",\"preview does not call GlobalActionService.executeRef\",\"apply/save must still validate actionId and required payload\"]}]}",
8996
9276
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
@@ -9000,7 +9280,7 @@
9000
9280
  "corpusVersion": "1.0.0"
9001
9281
  },
9002
9282
  {
9003
- "chunkIndex": 35,
9283
+ "chunkIndex": 63,
9004
9284
  "chunkKind": "recipe",
9005
9285
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"config\",\"config\":{\"fieldMetadata\":[{\"name\":\"name\",\"label\":\"Name\",\"controlType\":\"input\",\"required\":true},{\"name\":\"gender\",\"label\":\"Gender\",\"controlType\":\"select\",\"required\":true,\"options\":[{\"label\":\"Female\",\"value\":\"female\"},{\"label\":\"Male\",\"value\":\"male\"},{\"label\":\"Other\",\"value\":\"other\"}]},{\"name\":\"birthDate\",\"label\":\"Birth date\",\"controlType\":\"datePicker\",\"manualInput\":false,\"hint\":\"Select from the calendar to avoid ambiguous date formats.\"},{\"name\":\"age\",\"label\":\"Age\",\"controlType\":\"numericTextBox\",\"required\":true,\"readOnly\":true,\"min\":0,\"max\":120},{\"name\":\"guardianName\",\"label\":\"Legal guardian\",\"controlType\":\"input\",\"placeholder\":\"Required for underage applicants\"},{\"name\":\"vacationPeriod\",\"label\":\"Vacation period\",\"controlType\":\"dateRange\",\"required\":true,\"minDate\":\"2026-01-01\",\"maxDate\":\"2026-12-31\"},{\"name\":\"reason\",\"label\":\"Notes\",\"controlType\":\"textarea\",\"rows\":3}],\"sections\":[{\"id\":\"registration\",\"title\":\"Registration\",\"appearance\":\"plain\",\"rows\":[{\"id\":\"registration-row\",\"columns\":[{\"id\":\"registration-left\",\"span\":{\"xs\":12,\"md\":6},\"fields\":[\"name\",\"gender\",\"birthDate\"]},{\"id\":\"registration-right\",\"span\":{\"xs\":12,\"md\":6},\"fields\":[\"age\",\"guardianName\"]}]}]},{\"id\":\"vacation\",\"title\":\"Vacation\",\"appearance\":\"plain\",\"rows\":[{\"id\":\"vacation-row\",\"columns\":[{\"id\":\"vacation-column\",\"span\":{\"xs\":12},\"fields\":[\"vacationPeriod\",\"reason\"]}]}]}],\"formRules\":[{\"id\":\"birth-date-computes-age\",\"name\":\"Birth date computes age\",\"targetType\":\"field\",\"targets\":[\"age\"],\"effect\":{\"condition\":{\"!\":[{\"isBlank\":[{\"var\":\"birthDate\"}]}]},\"properties\":{\"value\":{\"expression\":{\"yearsSince\":[{\"var\":\"birthDate\"}]}},\"hint\":\"Calculated from birth date.\"},\"propertiesWhenFalse\":{\"value\":{\"literal\":null},\"hint\":\"\"}}},{\"id\":\"female-underage-requires-guardian\",\"name\":\"Female underage applicant requires guardian\",\"targetType\":\"field\",\"targets\":[\"guardianName\"],\"effect\":{\"condition\":{\"and\":[{\"===\":[{\"var\":\"gender\"},\"female\"]},{\"<\":[{\"var\":\"age\"},18]}]},\"properties\":{\"required\":true,\"color\":\"warn\",\"hint\":\"Required for female applicants under 18.\"},\"propertiesWhenFalse\":{\"required\":false,\"color\":\"primary\",\"hint\":\"\"}}}],\"formCommandRules\":[{\"id\":\"registration:female-underage-alert\",\"description\":\"Alert when a female applicant is under 18 after age is computed.\",\"condition\":{\"and\":[{\"===\":[{\"var\":\"gender\"},\"female\"]},{\"!\":[{\"isBlank\":[{\"var\":\"age\"}]}]},{\"<\":[{\"var\":\"age\"},18]}]},\"effects\":[{\"id\":\"minimum-age-alert\",\"kind\":\"global-action\",\"globalAction\":{\"actionId\":\"dialog.alert\",\"payload\":{\"title\":\"Minimum age\",\"message\":\"For female registration, the expected minimum age is 18.\",\"okLabel\":\"Understood\",\"variant\":\"warning\"}}}],\"policy\":{\"trigger\":\"on-condition-enter\",\"distinct\":true,\"distinctBy\":\"age\",\"runOnInitialEvaluation\":false}},{\"id\":\"vacation:friday-start-confirm\",\"description\":\"Confirm when the committed vacation range starts on Friday.\",\"condition\":{\"and\":[{\"!\":[{\"isBlank\":[{\"var\":\"vacationPeriod.startDate\"}]}]},{\"!\":[{\"isBlank\":[{\"var\":\"vacationPeriod.endDate\"}]}]},{\"weekdayIn\":[{\"var\":\"vacationPeriod.startDate\"},[5]]}]},\"effects\":[{\"id\":\"friday-start-confirm\",\"kind\":\"global-action\",\"globalAction\":{\"actionId\":\"dialog.confirm\",\"payload\":{\"title\":\"Friday start\",\"message\":\"The vacation start date falls on a Friday. Do you want to keep this choice?\",\"confirmLabel\":\"Keep\",\"cancelLabel\":\"Review\",\"variant\":\"question\"}}}],\"policy\":{\"trigger\":\"on-condition-enter\",\"distinct\":true,\"distinctBy\":\"vacationPeriod.startDate\",\"runOnInitialEvaluation\":false}}],\"actions\":{\"submit\":{\"visible\":true,\"label\":\"Submit\",\"icon\":\"send\",\"color\":\"primary\",\"variant\":\"raised\"},\"cancel\":{\"visible\":false},\"reset\":{\"visible\":false}}}}",
9006
9286
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
@@ -9010,7 +9290,7 @@
9010
9290
  "corpusVersion": "1.0.0"
9011
9291
  },
9012
9292
  {
9013
- "chunkIndex": 36,
9293
+ "chunkIndex": 64,
9014
9294
  "chunkKind": "recipe",
9015
9295
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"diagnosticExpectations\",\"diagnosticExpectations\":{\"computedBeforeCommands\":true,\"commandEffectsAreGlobalActions\":true,\"commandsAreNotFormRuleProperties\":true,\"runOnInitialEvaluationDefault\":false,\"committedDateRangeOnly\":true,\"previewDoesNotExecuteGlobalAction\":true,\"payloadExprAdvancedJsonOnly\":true,\"scenarioSource\":\"business-rules-form-demo\"}}",
9016
9296
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
@@ -9020,7 +9300,7 @@
9020
9300
  "corpusVersion": "1.0.0"
9021
9301
  },
9022
9302
  {
9023
- "chunkIndex": 37,
9303
+ "chunkIndex": 65,
9024
9304
  "chunkKind": "recipe",
9025
9305
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment\",\"_comment\":\"Official recipe for the procurement Entity Lookup cascade published by praxis-api-quickstart.\"}",
9026
9306
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9030,7 +9310,7 @@
9030
9310
  "corpusVersion": "1.0.0"
9031
9311
  },
9032
9312
  {
9033
- "chunkIndex": 38,
9313
+ "chunkIndex": 66,
9034
9314
  "chunkKind": "recipe",
9035
9315
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment2\",\"_comment2\":\"Use this when agents need a metadata-driven form that selects governed business entities instead of simple option lists.\"}",
9036
9316
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9040,7 +9320,7 @@
9040
9320
  "corpusVersion": "1.0.0"
9041
9321
  },
9042
9322
  {
9043
- "chunkIndex": 39,
9323
+ "chunkIndex": 67,
9044
9324
  "chunkKind": "recipe",
9045
9325
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"variantId\":\"entity-lookup-procurement\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"status\":\"public-example\",\"tags\":[\"entity-lookup\",\"resource-entity\",\"option-source\",\"cascading\",\"rehydration\",\"procurement\",\"quickstart\"],\"useWhen\":\"Create a purchase order form with real company, supplier, contract and product entity selections.\",\"examplePrompts\":[\"create a purchase order form with company supplier contract and product lookups\",\"generate a form with dependent entityLookup fields backed by optionSource metadata\",\"add a governed lookup cascade with status policy and by-ids rehydration\"]}}",
9046
9326
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9050,7 +9330,7 @@
9050
9330
  "corpusVersion": "1.0.0"
9051
9331
  },
9052
9332
  {
9053
- "chunkIndex": 40,
9333
+ "chunkIndex": 68,
9054
9334
  "chunkKind": "recipe",
9055
9335
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"platformValue\",\"platformValue\":{\"canonicalOwner\":\"praxis-metadata-starter publishes x-ui.optionSource with RESOURCE_ENTITY semantics.\",\"referenceHost\":\"praxis-api-quickstart exposes the procurement resource and its option-source endpoints.\",\"sharedTypes\":\"@praxisui/core owns OptionSourceMetadata and FieldControlType.ENTITY_LOOKUP.\",\"runtime\":\"@praxisui/dynamic-fields renders entityLookup and inlineEntityLookup.\",\"formIntegration\":\"@praxisui/dynamic-form keeps the submitted payload canonical while the UI rehydrates labels, status and disabled reasons.\",\"authoring\":\"@praxisui/metadata-editor exposes the optionSource.* fields used below.\"}}",
9056
9336
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9060,7 +9340,7 @@
9060
9340
  "corpusVersion": "1.0.0"
9061
9341
  },
9062
9342
  {
9063
- "chunkIndex": 41,
9343
+ "chunkIndex": 69,
9064
9344
  "chunkKind": "recipe",
9065
9345
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"backendSurfaces\",\"backendSurfaces\":[\"GET /schemas/filtered?path=/api/procurement/purchase-orders&operation=post&schemaType=request\",\"POST /api/procurement/purchase-orders/filter\",\"GET /api/procurement/purchase-orders/capabilities\",\"POST /api/procurement/companies/option-sources/company/options/filter\",\"POST /api/procurement/suppliers/option-sources/supplier/options/filter\",\"POST /api/procurement/contracts/option-sources/contract/options/filter\",\"POST /api/procurement/products/option-sources/product/options/filter\"]}",
9066
9346
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9070,7 +9350,7 @@
9070
9350
  "corpusVersion": "1.0.0"
9071
9351
  },
9072
9352
  {
9073
- "chunkIndex": 42,
9353
+ "chunkIndex": 70,
9074
9354
  "chunkKind": "recipe",
9075
9355
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"contractNotes\",\"contractNotes\":[\"Persist only stable IDs: companyId, supplierId, contractId and productId.\",\"Use x-ui.optionSource.dependsOn for cascades and add dependencyFilterMap only when the UI field differs from the backend filter key.\",\"Use selectionPolicy.allowRetainInvalidExistingValue to display historical invalid values while blocking new selections.\",\"Use capabilities.byIds=true when edit mode must rehydrate IDs already saved in the resource.\",\"Use dependencyLoadOnChange=immediate and resetOnDependentChange when child lookups must refresh and clear stale values as soon as a parent changes.\",\"Use detail.hrefTemplate or routeTemplate only as navigation metadata; it must not change the submitted value.\"]}",
9076
9356
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9080,7 +9360,7 @@
9080
9360
  "corpusVersion": "1.0.0"
9081
9361
  },
9082
9362
  {
9083
- "chunkIndex": 43,
9363
+ "chunkIndex": 71,
9084
9364
  "chunkKind": "recipe",
9085
9365
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"renderingExpectations\",\"renderingExpectations\":{\"inline\":\"Default rendering uses an input-like trigger, search dropdown and rich rows with code, label, description, status and blocked reasons.\",\"selectedCard\":\"After selection, show the canonical entity identity with code, label, description, status badges and actions such as detail, change, copy code and clear.\",\"readonly\":\"Readonly mode rehydrates the saved ID and renders label, status and disabled reason without allowing changes.\",\"compact\":\"Compact mode is intended for table filters and dense forms: preserve label, code and status while reducing secondary text.\",\"dialog\":\"Dialog/value-help mode reuses the same optionSource contract and can add table search, column filters, preview panel and selection confirmation.\"}}",
9086
9366
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9090,7 +9370,7 @@
9090
9370
  "corpusVersion": "1.0.0"
9091
9371
  },
9092
9372
  {
9093
- "chunkIndex": 44,
9373
+ "chunkIndex": 72,
9094
9374
  "chunkKind": "recipe",
9095
9375
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"metadata\",\"metadata\":{\"version\":\"2.0\",\"resourcePath\":\"procurement/purchase-orders\",\"resourceKey\":\"procurement.purchase-orders\",\"operation\":\"create\"}}",
9096
9376
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9100,7 +9380,7 @@
9100
9380
  "corpusVersion": "1.0.0"
9101
9381
  },
9102
9382
  {
9103
- "chunkIndex": 45,
9383
+ "chunkIndex": 73,
9104
9384
  "chunkKind": "recipe",
9105
9385
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"fieldMetadata\",\"fieldMetadata\":[{\"name\":\"companyId\",\"label\":\"Empresa\",\"placeholder\":\"Buscar empresa...\",\"controlType\":\"entityLookup\",\"required\":true,\"endpoint\":\"/api/procurement/companies/option-sources/company/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"optionSource\":{\"key\":\"company\",\"type\":\"RESOURCE_ENTITY\",\"entityKey\":\"company\",\"resourcePath\":\"/api/procurement/companies\",\"filterField\":\"companyId\",\"propertyPath\":\"id\",\"valuePropertyPath\":\"id\",\"labelPropertyPath\":\"legalName\",\"codePropertyPath\":\"code\",\"descriptionPropertyPaths\":[\"documentNumber\",\"city\",\"state\"],\"statusPropertyPath\":\"status\",\"disabledReasonPropertyPath\":\"disabledReason\",\"searchPropertyPaths\":[\"code\",\"legalName\",\"documentNumber\"],\"searchMode\":\"contains\",\"pageSize\":25,\"includeIds\":true,\"selectionPolicy\":{\"statusPropertyPath\":\"status\",\"allowedStatuses\":[\"ACTIVE\"],\"blockedStatuses\":[\"INACTIVE\",\"BLOCKED\"],\"allowRetainInvalidExistingValue\":true},\"capabilities\":{\"filter\":true,\"byIds\":true,\"detail\":true,\"navigateToDetail\":true,\"auditSnapshot\":true},\"detail\":{\"hrefTemplate\":\"/api/procurement/companies/{id}\",\"routeTemplate\":\"/procurement/companies/{id}\",\"openDetailMode\":\"route\"}}},{\"name\":\"supplierId\",\"label\":\"Fornecedor\",\"placeholder\":\"Buscar fornecedor homologado...\",\"controlType\":\"entityLookup\",\"required\":true,\"endpoint\":\"/api/procurement/suppliers/option-sources/supplier/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"dependentField\":\"companyId\",\"dependencyLoadOnChange\":\"immediate\",\"resetOnDependentChange\":true,\"optionSource\":{\"key\":\"supplier\",\"type\":\"RESOURCE_ENTITY\",\"entityKey\":\"supplier\",\"resourcePath\":\"/api/procurement/suppliers\",\"filterField\":\"supplierId\",\"dependsOn\":[\"companyId\"],\"propertyPath\":\"id\",\"valuePropertyPath\":\"id\",\"labelPropertyPath\":\"legalName\",\"codePropertyPath\":\"code\",\"descriptionPropertyPaths\":[\"documentNumber\",\"homologationStatus\",\"riskLevel\"],\"statusPropertyPath\":\"status\",\"disabledReasonPropertyPath\":\"disabledReason\",\"searchPropertyPaths\":[\"code\",\"legalName\",\"documentNumber\"],\"searchMode\":\"contains\",\"pageSize\":25,\"includeIds\":true,\"selectionPolicy\":{\"statusPropertyPath\":\"status\",\"allowedStatuses\":[\"ACTIVE\",\"APPROVED\"],\"blockedStatuses\":[\"INACTIVE\",\"BLOCKED\"],\"allowRetainInvalidExistingValue\":true},\"capabilities\":{\"filter\":true,\"byIds\":true,\"detail\":true,\"navigateToDetail\":true,\"auditSnapshot\":true},\"detail\":{\"hrefTemplate\":\"/api/procurement/suppliers/{id}\",\"routeTemplate\":\"/procurement/suppliers/{id}\",\"openDetailMode\":\"route\"}}},{\"name\":\"contractId\",\"label\":\"Contrato\",\"placeholder\":\"Buscar contrato vigente...\",\"controlType\":\"entityLookup\",\"endpoint\":\"/api/procurement/contracts/option-sources/contract/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"dependentField\":\"supplierId\",\"dependencyLoadOnChange\":\"immediate\",\"resetOnDependentChange\":true,\"optionSource\":{\"key\":\"contract\",\"type\":\"RESOURCE_ENTITY\",\"entityKey\":\"contract\",\"resourcePath\":\"/api/procurement/contracts\",\"filterField\":\"contractId\",\"dependsOn\":[\"companyId\",\"supplierId\"],\"propertyPath\":\"id\",\"valuePropertyPath\":\"id\",\"labelPropertyPath\":\"number\",\"descriptionPropertyPaths\":[\"supplierName\",\"validUntil\",\"currency\"],\"statusPropertyPath\":\"status\",\"disabledReasonPropertyPath\":\"disabledReason\",\"searchPropertyPaths\":[\"number\",\"supplierName\",\"currency\"],\"searchMode\":\"contains\",\"pageSize\":25,\"includeIds\":true,\"selectionPolicy\":{\"statusPropertyPath\":\"status\",\"allowedStatuses\":[\"ACTIVE\",\"SIGNED\"],\"blockedStatuses\":[\"EXPIRED\",\"CANCELLED\"],\"allowRetainInvalidExistingValue\":true},\"capabilities\":{\"filter\":true,\"byIds\":true,\"detail\":true,\"navigateToDetail\":true,\"auditSnapshot\":true},\"detail\":{\"hrefTemplate\":\"/api/procurement/contracts/{id}\",\"routeTemplate\":\"/procurement/contracts/{id}\",\"openDetailMode\":\"route\"}}},{\"name\":\"productId\",\"label\":\"Produto\",\"placeholder\":\"Buscar produto disponivel...\",\"controlType\":\"entityLookup\",\"required\":true,\"endpoint\":\"/api/procurement/products/option-sources/product/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"dependentField\":\"contractId\",\"dependencyLoadOnChange\":\"immediate\",\"resetOnDependentChange\":true,\"optionSource\":{\"key\":\"product\",\"type\":\"RESOURCE_ENTITY\",\"entityKey\":\"product\",\"resourcePath\":\"/api/procurement/products\",\"filterField\":\"productId\",\"dependsOn\":[\"companyId\",\"contractId\"],\"propertyPath\":\"id\",\"valuePropertyPath\":\"id\",\"labelPropertyPath\":\"name\",\"codePropertyPath\":\"sku\",\"descriptionPropertyPaths\":[\"categoryName\",\"stockAvailable\",\"unitOfMeasure\"],\"statusPropertyPath\":\"status\",\"disabledReasonPropertyPath\":\"disabledReason\",\"searchPropertyPaths\":[\"sku\",\"name\",\"categoryName\"],\"searchMode\":\"contains\",\"pageSize\":25,\"includeIds\":true,\"selectionPolicy\":{\"statusPropertyPath\":\"status\",\"allowedStatuses\":[\"ACTIVE\",\"AVAILABLE\"],\"blockedStatuses\":[\"INACTIVE\",\"BLOCKED\"],\"allowRetainInvalidExistingValue\":true},\"capabilities\":{\"filter\":true,\"byIds\":true,\"detail\":true,\"navigateToDetail\":true,\"auditSnapshot\":true},\"detail\":{\"hrefTemplate\":\"/api/procurement/products/{id}\",\"routeTemplate\":\"/procurement/products/{id}\",\"openDetailMode\":\"route\"}}},{\"name\":\"orderDate\",\"label\":\"Data do pedido\",\"controlType\":\"date\"},{\"name\":\"currency\",\"label\":\"Moeda\",\"controlType\":\"select\",\"options\":[{\"label\":\"BRL\",\"value\":\"BRL\"},{\"label\":\"USD\",\"value\":\"USD\"}]},{\"name\":\"quantity\",\"label\":\"Quantidade\",\"controlType\":\"numericTextBox\",\"validators\":{\"min\":1}}]}",
9106
9386
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9110,7 +9390,7 @@
9110
9390
  "corpusVersion": "1.0.0"
9111
9391
  },
9112
9392
  {
9113
- "chunkIndex": 46,
9393
+ "chunkIndex": 74,
9114
9394
  "chunkKind": "recipe",
9115
9395
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"sections\",\"sections\":[{\"id\":\"commercial-context\",\"title\":\"Commercial context\",\"rows\":[{\"id\":\"commercial-context-row\",\"columns\":[{\"id\":\"company-column\",\"fields\":[\"companyId\",\"orderDate\"]},{\"id\":\"currency-column\",\"fields\":[\"currency\",\"quantity\"]}]}]},{\"id\":\"purchase-entities\",\"title\":\"Purchase entities\",\"rows\":[{\"id\":\"purchase-entities-row-1\",\"columns\":[{\"id\":\"supplier-column\",\"fields\":[\"supplierId\"]},{\"id\":\"contract-column\",\"fields\":[\"contractId\"]}]},{\"id\":\"purchase-entities-row-2\",\"columns\":[{\"id\":\"product-column\",\"fields\":[\"productId\"]}]}]}]}",
9116
9396
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9120,7 +9400,7 @@
9120
9400
  "corpusVersion": "1.0.0"
9121
9401
  },
9122
9402
  {
9123
- "chunkIndex": 47,
9403
+ "chunkIndex": 75,
9124
9404
  "chunkKind": "recipe",
9125
9405
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"initialData\",\"initialData\":{\"companyId\":1,\"supplierId\":10,\"contractId\":20,\"productId\":30,\"orderDate\":\"2026-04-15\",\"currency\":\"BRL\",\"quantity\":2}}",
9126
9406
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9130,7 +9410,7 @@
9130
9410
  "corpusVersion": "1.0.0"
9131
9411
  },
9132
9412
  {
9133
- "chunkIndex": 48,
9413
+ "chunkIndex": 76,
9134
9414
  "chunkKind": "recipe",
9135
9415
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"expectedLookupRequests\",\"expectedLookupRequests\":{\"filterSupplier\":{\"method\":\"POST\",\"url\":\"/api/procurement/suppliers/option-sources/supplier/options/filter\",\"body\":{\"query\":\"acme\",\"filters\":{\"companyId\":1},\"page\":0,\"size\":25}},\"filterContract\":{\"method\":\"POST\",\"url\":\"/api/procurement/contracts/option-sources/contract/options/filter\",\"body\":{\"query\":\"2026\",\"filters\":{\"companyId\":1,\"supplierId\":10},\"page\":0,\"size\":25}},\"filterProduct\":{\"method\":\"POST\",\"url\":\"/api/procurement/products/option-sources/product/options/filter\",\"body\":{\"filters\":{\"companyId\":1,\"contractId\":20},\"page\":0,\"size\":25}},\"rehydrateSavedValues\":{\"method\":\"GET\",\"urls\":[\"/api/procurement/companies/option-sources/company/options/by-ids?ids=1\",\"/api/procurement/suppliers/option-sources/supplier/options/by-ids?ids=10\",\"/api/procurement/contracts/option-sources/contract/options/by-ids?ids=20\",\"/api/procurement/products/option-sources/product/options/by-ids?ids=30\"]}}}",
9136
9416
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9140,7 +9420,7 @@
9140
9420
  "corpusVersion": "1.0.0"
9141
9421
  },
9142
9422
  {
9143
- "chunkIndex": 49,
9423
+ "chunkIndex": 77,
9144
9424
  "chunkKind": "recipe",
9145
9425
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"expectedOptionShape\",\"expectedOptionShape\":{\"id\":10,\"label\":\"ACME Suprimentos Ltda\",\"extra\":{\"code\":\"FOR-8742\",\"description\":\"12.345.678/0001-90 - APPROVED - LOW\",\"status\":\"ACTIVE\",\"selectable\":true,\"disabledReason\":null,\"detailHref\":\"/api/procurement/suppliers/10\",\"detailRoute\":\"/procurement/suppliers/10\",\"resourcePath\":\"/api/procurement/suppliers\",\"entityKey\":\"supplier\"}}}",
9146
9426
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9150,7 +9430,7 @@
9150
9430
  "corpusVersion": "1.0.0"
9151
9431
  },
9152
9432
  {
9153
- "chunkIndex": 50,
9433
+ "chunkIndex": 78,
9154
9434
  "chunkKind": "recipe",
9155
9435
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"expectedSubmitPayload\",\"expectedSubmitPayload\":{\"companyId\":1,\"supplierId\":10,\"contractId\":20,\"productId\":30,\"orderDate\":\"2026-04-15\",\"currency\":\"BRL\",\"quantity\":2}}",
9156
9436
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
@@ -9160,7 +9440,7 @@
9160
9440
  "corpusVersion": "1.0.0"
9161
9441
  },
9162
9442
  {
9163
- "chunkIndex": 51,
9443
+ "chunkIndex": 79,
9164
9444
  "chunkKind": "recipe",
9165
9445
  "content": "{\"_comment\":\"Showcase de campos variados com props específicas (validação, máscaras, sliders, cores).\",\"templateMeta\":{\"variantId\":\"fields\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"fields\",\"metadata\"],\"useWhen\":\"mostrar apenas fieldMetadata e exemplos de campos\",\"examplePrompts\":[\"gere somente a lista de campos\",\"adicione novos campos ao formulario\"]},\"metadata\":{\"version\":\"2.0\"},\"fieldMetadata\":[{\"name\":\"fullName\",\"label\":\"Nome completo\",\"controlType\":\"input\",\"validators\":{\"maxLength\":120}},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"email\":true}},{\"name\":\"password\",\"label\":\"Senha\",\"controlType\":\"password\",\"validators\":{\"minLength\":8}},{\"name\":\"profileColor\",\"label\":\"Cor do perfil\",\"controlType\":\"colorPicker\",\"format\":\"hex\"},{\"name\":\"salary\",\"label\":\"Salário\",\"controlType\":\"currency\",\"currencyCode\":\"BRL\",\"validators\":{\"min\":0}},{\"name\":\"birthDate\",\"label\":\"Nascimento\",\"controlType\":\"date\",\"validators\":{\"min\":\"1900-01-01\",\"max\":\"2025-12-31\"}},{\"name\":\"availability\",\"label\":\"Disponibilidade\",\"controlType\":\"dateRange\"},{\"name\":\"workload\",\"label\":\"Carga horária\",\"controlType\":\"slider\",\"validators\":{\"min\":0,\"max\":40}},{\"name\":\"skills\",\"label\":\"Habilidades\",\"controlType\":\"multiSelect\",\"options\":[{\"text\":\"Angular\",\"value\":\"ANG\"},{\"text\":\"React\",\"value\":\"RE\"}]},{\"name\":\"manager\",\"label\":\"Gestor\",\"controlType\":\"autoComplete\",\"endpoint\":\"/api/managers\"},{\"name\":\"document\",\"label\":\"CPF/CNPJ\",\"controlType\":\"cpfCnpjInput\",\"unmaskOnSubmit\":true},{\"name\":\"avatar\",\"label\":\"Avatar\",\"controlType\":\"avatar\",\"imageSrc\":\"https://picsum.photos/80\",\"materialDesign\":{\"shape\":\"circle\"}},{\"name\":\"attachments\",\"label\":\"Anexos\",\"controlType\":\"upload\",\"multiple\":true,\"accept\":\".pdf,.png,.jpg\"}],\"sections\":[{\"id\":\"sec1\",\"title\":\"Perfil\",\"rows\":[{\"id\":\"r1\",\"columns\":[{\"id\":\"c1\",\"fields\":[\"fullName\",\"email\",\"password\"]}]}]},{\"id\":\"sec2\",\"title\":\"Detalhes\",\"rows\":[{\"id\":\"r2\",\"columns\":[{\"id\":\"c2\",\"fields\":[\"profileColor\",\"salary\",\"birthDate\",\"availability\",\"workload\"]}]}]},{\"id\":\"sec3\",\"title\":\"Outros\",\"rows\":[{\"id\":\"r3\",\"columns\":[{\"id\":\"c3\",\"fields\":[\"skills\",\"manager\",\"document\",\"avatar\",\"attachments\"]}]}]}]}",
9166
9446
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.fields.json",
@@ -9170,7 +9450,7 @@
9170
9450
  "corpusVersion": "1.0.0"
9171
9451
  },
9172
9452
  {
9173
- "chunkIndex": 52,
9453
+ "chunkIndex": 80,
9174
9454
  "chunkKind": "recipe",
9175
9455
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment\",\"_comment\":\"Generic recipe for PraxisDynamicForm (FormConfig). Values are placeholders for AI examples.\"}",
9176
9456
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9180,7 +9460,7 @@
9180
9460
  "corpusVersion": "1.0.0"
9181
9461
  },
9182
9462
  {
9183
- "chunkIndex": 53,
9463
+ "chunkIndex": 81,
9184
9464
  "chunkKind": "recipe",
9185
9465
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"variantId\":\"form-config\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"full\",\"config\"],\"useWhen\":\"gerar form completo com layout, campos e regras\",\"examplePrompts\":[\"gere um formulario completo com campos e layout\",\"crie um form completo baseado no schema\"]}}",
9186
9466
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9190,7 +9470,7 @@
9190
9470
  "corpusVersion": "1.0.0"
9191
9471
  },
9192
9472
  {
9193
- "chunkIndex": 54,
9473
+ "chunkIndex": 82,
9194
9474
  "chunkKind": "recipe",
9195
9475
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"metadata\",\"metadata\":{\"version\":\"2.0.0\",\"lastUpdated\":\"2024-02-01T12:00:00Z\",\"source\":\"local\",\"serverHash\":\"hash-abc-123\",\"schemaId\":\"path:/api/employees#request\",\"schemaContext\":{\"path\":\"/api/employees\",\"operation\":\"POST\",\"schemaType\":\"request\",\"internal\":false,\"tenant\":\"default\",\"locale\":\"pt-BR\"},\"customizations\":[{\"fieldName\":\"salary\",\"property\":\"label\",\"oldValue\":\"Salary\",\"newValue\":\"Salario\",\"timestamp\":\"2024-01-20T10:00:00Z\",\"source\":\"user\"}]}}",
9196
9476
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9200,7 +9480,7 @@
9200
9480
  "corpusVersion": "1.0.0"
9201
9481
  },
9202
9482
  {
9203
- "chunkIndex": 55,
9483
+ "chunkIndex": 83,
9204
9484
  "chunkKind": "recipe",
9205
9485
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"api\",\"api\":{\"saveEndpoint\":\"/api/employees\",\"loadEndpoint\":\"/api/employees/${id}\",\"saveMethod\":\"POST\",\"timeout\":15000,\"headers\":{\"X-Module\":\"HR\",\"X-Request-Source\":\"dynamic-form\"},\"idField\":\"id\",\"beforeSave\":\"sanitizeEmployee\",\"afterLoad\":\"mapEmployee\"}}",
9206
9486
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9210,7 +9490,7 @@
9210
9490
  "corpusVersion": "1.0.0"
9211
9491
  },
9212
9492
  {
9213
- "chunkIndex": 56,
9493
+ "chunkIndex": 84,
9214
9494
  "chunkKind": "recipe",
9215
9495
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"behavior\",\"behavior\":{\"confirmOnUnsavedChanges\":true,\"trackHistory\":true,\"focusFirstError\":true,\"scrollToErrors\":true,\"clearAfterSave\":false,\"redirectAfterSave\":\"/employees\",\"reactiveValidation\":true,\"reactiveValidationDebounceMs\":200}}",
9216
9496
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9220,7 +9500,7 @@
9220
9500
  "corpusVersion": "1.0.0"
9221
9501
  },
9222
9502
  {
9223
- "chunkIndex": 57,
9503
+ "chunkIndex": 85,
9224
9504
  "chunkKind": "recipe",
9225
9505
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"messages\",\"messages\":{\"createRegistrySuccess\":\"Registro criado com sucesso.\",\"updateRegistrySuccess\":\"Registro atualizado com sucesso.\",\"createRegistryError\":\"Falha ao criar registro.\",\"updateRegistryError\":\"Falha ao atualizar registro.\",\"confirmations\":{\"submit\":\"Salvar alteracoes?\",\"cancel\":\"Descartar alteracoes?\",\"reset\":\"Limpar o formulario?\",\"archive\":\"Arquivar este registro?\"},\"customActions\":{\"archive\":{\"success\":\"Registro arquivado.\",\"error\":\"Falha ao arquivar.\",\"confirmation\":\"Arquivar registro agora?\"},\"preview\":{\"confirmation\":\"Gerar pre-visualizacao?\"}},\"loading\":{\"submit\":\"Salvando...\",\"cancel\":\"Cancelando...\",\"reset\":\"Limpando...\",\"archive\":\"Arquivando...\"}}}",
9226
9506
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9230,7 +9510,7 @@
9230
9510
  "corpusVersion": "1.0.0"
9231
9511
  },
9232
9512
  {
9233
- "chunkIndex": 58,
9513
+ "chunkIndex": 86,
9234
9514
  "chunkKind": "recipe",
9235
9515
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"hints\",\"hints\":{\"dataModes\":{\"create\":\"Preencha os dados para criar um novo registro.\",\"edit\":\"Atualize os dados e salve as alteracoes.\",\"view\":\"Visualize os dados do registro.\"},\"uiModes\":{\"presentation\":\"Modo apresentacao exibe apenas leitura.\",\"readonly\":\"Modo leitura bloqueia edicao.\",\"disabled\":\"Campos desabilitados nao permitem interacao.\",\"visible\":\"Controle de visibilidade sem destruir controles.\"}}}",
9236
9516
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9240,7 +9520,7 @@
9240
9520
  "corpusVersion": "1.0.0"
9241
9521
  },
9242
9522
  {
9243
- "chunkIndex": 59,
9523
+ "chunkIndex": 87,
9244
9524
  "chunkKind": "recipe",
9245
9525
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"hooks\",\"hooks\":{\"beforeInit\":[{\"priority\":100,\"timeoutMs\":1500,\"args\":{\"source\":\"cache\"},\"id\":\"load-static-options\"}],\"afterInit\":[{\"priority\":50,\"timeoutMs\":1200,\"args\":{\"enable\":true},\"id\":\"attach-shortcuts\"}],\"beforeValidate\":[{\"priority\":80,\"timeoutMs\":1200,\"args\":{\"country\":\"BR\"},\"id\":\"normalize-phones\"}],\"afterValidate\":[{\"priority\":10,\"timeoutMs\":1000,\"args\":{\"report\":\"warnings\"},\"id\":\"collect-warnings\"}],\"beforeSubmit\":[{\"priority\":100,\"timeoutMs\":2000,\"args\":{\"trimStrings\":true},\"id\":\"sanitize-employee\"}],\"afterSubmit\":[{\"priority\":20,\"timeoutMs\":1500,\"args\":{\"messageKey\":\"employeeSaved\"},\"id\":\"notify-success\"}],\"onError\":[{\"priority\":0,\"timeoutMs\":1500,\"args\":{\"messageKey\":\"employeeSaveError\"},\"id\":\"notify-error\"}]}}",
9246
9526
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9250,7 +9530,7 @@
9250
9530
  "corpusVersion": "1.0.0"
9251
9531
  },
9252
9532
  {
9253
- "chunkIndex": 60,
9533
+ "chunkIndex": 88,
9254
9534
  "chunkKind": "recipe",
9255
9535
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"fieldMetadata\",\"fieldMetadata\":[{\"name\":\"id\",\"label\":\"ID\",\"controlType\":\"numericTextBox\",\"dataType\":\"number\",\"hidden\":true,\"readOnly\":true,\"description\":\"Backend generated identifier.\"},{\"name\":\"fullName\",\"label\":\"Full name\",\"controlType\":\"input\",\"dataType\":\"text\",\"placeholder\":\"Example: Ana Souza\",\"prefixIcon\":\"person\",\"iconPosition\":\"start\",\"iconSize\":\"small\",\"validators\":{\"required\":true,\"minLength\":3,\"maxLength\":120,\"requiredMessage\":\"Name is required\",\"minLengthMessage\":\"Min 3 chars\",\"minWords\":2},\"validationMode\":\"blur\",\"debounceTime\":200,\"materialDesign\":{\"appearance\":\"outline\",\"color\":\"primary\",\"floatLabel\":\"auto\",\"density\":\"comfortable\",\"subscriptSizing\":\"dynamic\",\"hideRequiredMarker\":false,\"disableRipple\":true,\"customPalette\":{\"primary\":\"#005f73\",\"accent\":\"#0a9396\",\"warn\":\"#bb3e03\"},\"animations\":{\"disabled\":false,\"duration\":\"150ms\",\"easing\":\"ease-out\"}},\"group\":\"identity\",\"order\":1,\"width\":\"50%\",\"isFlex\":true,\"id\":\"field-full-name\",\"version\":\"1.0.0\",\"context\":\"form\",\"createdAt\":\"2024-01-01T00:00:00Z\",\"updatedAt\":\"2024-02-01T00:00:00Z\",\"tags\":[\"identity\",\"employee\"],\"cssClass\":\"field-full-name\",\"style\":{\"maxWidth\":\"480px\"},\"dataAttributes\":{\"data-qa\":\"full-name\"},\"required\":true},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"dataType\":\"email\",\"placeholder\":\"name@company.com\",\"validators\":{\"required\":true,\"email\":true,\"emailMessage\":\"Use a valid email.\"},\"unique\":true,\"ariaLabel\":\"Email address\",\"ariaDescribedBy\":\"email-help\",\"tabIndex\":2,\"accessKey\":\"e\"},{\"name\":\"phone\",\"label\":\"Phone\",\"controlType\":\"maskedTextBox\",\"dataType\":\"text\",\"mask\":\"(99) 99999-9999\",\"validators\":{\"pattern\":\"^\\\\(\\\\d{2}\\\\) \\\\d{4,5}-\\\\d{4}$\",\"patternMessage\":\"Use (11) 99999-9999\"},\"hint\":\"Include area code.\"},{\"name\":\"status\",\"label\":\"Status\",\"controlType\":\"select\",\"options\":[{\"text\":\"Active\",\"value\":\"ACTIVE\",\"icon\":\"check_circle\"},{\"text\":\"Inactive\",\"value\":\"INACTIVE\",\"icon\":\"block\"},{\"text\":\"On leave\",\"value\":\"ON_LEAVE\",\"icon\":\"schedule\"}],\"defaultValue\":\"ACTIVE\",\"validators\":{\"required\":true},\"materialDesign\":{\"appearance\":\"outline\",\"color\":\"accent\"}},{\"name\":\"departmentId\",\"label\":\"Department\",\"controlType\":\"select\",\"endpoint\":\"/api/departments\",\"valueField\":\"id\",\"displayField\":\"name\",\"queryParams\":{\"active\":true},\"cacheDuration\":300000,\"validators\":{\"required\":true},\"resourcePath\":\"/api/departments\",\"filterCriteria\":{\"active\":true},\"optionLabelKey\":\"name\",\"optionValueKey\":\"id\",\"searchable\":true},{\"name\":\"teamId\",\"label\":\"Team\",\"controlType\":\"select\",\"endpoint\":\"/api/teams\",\"valueField\":\"id\",\"displayField\":\"name\",\"dependencyFields\":[\"departmentId\"],\"dependencyFilterMap\":{\"departmentId\":\"departmentId\"},\"dependencyValuePath\":\"id\",\"dependencyLoadOnChange\":\"immediate\",\"dependencyMergeStrategy\":\"replace\",\"dependencyDebounceMs\":200,\"resetOnDependentChange\":true,\"enableDependencyCascade\":true,\"suppressInlineErrorsOnCascade\":true},{\"name\":\"managerId\",\"label\":\"Manager\",\"controlType\":\"autoComplete\",\"endpoint\":\"/api/employees\",\"queryParams\":{\"role\":\"manager\"},\"valueField\":\"id\",\"displayField\":\"name\",\"filterField\":\"name\",\"dependencyFields\":[\"departmentId\"],\"dependencyFilterMap\":{\"departmentId\":\"departmentId\"},\"dependencyLoadOnChange\":\"respectLoadOn\",\"disabled\":false},{\"name\":\"hireDate\",\"label\":\"Hire date\",\"controlType\":\"date\",\"dataType\":\"date\",\"validators\":{\"required\":true},\"minDate\":\"2020-01-01\",\"maxDate\":\"2030-12-31\",\"startView\":\"multi-year\",\"datepickerTogglePosition\":\"suffix\",\"touchUi\":true},{\"name\":\"terminationDate\",\"label\":\"Termination date\",\"controlType\":\"date\",\"conditionalDisplay\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"conditionalRequired\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]}},{\"name\":\"salary\",\"label\":\"Salary\",\"controlType\":\"currency\",\"dataType\":\"number\",\"format\":\"BRL|symbol|2\",\"validators\":{\"min\":0,\"max\":999999,\"minMessage\":\"Salary must be >= 0\"},\"min\":0,\"max\":999999,\"step\":100,\"precision\":\"fixed\",\"currencyCode\":\"BRL\",\"currencyDisplay\":\"symbol\",\"prefix\":\"R$\",\"suffix\":\"bruto\",\"inlineEditing\":true,\"transformDisplayValue\":\"formatCurrency\",\"transformSaveValue\":\"parseCurrency\"},{\"name\":\"bonusPercent\",\"label\":\"Bonus %\",\"controlType\":\"slider\",\"dataType\":\"number\",\"defaultValue\":10,\"validators\":{\"min\":0,\"max\":50},\"suffixIcon\":\"percent\",\"min\":0,\"max\":50,\"step\":5,\"thumbLabel\":true,\"showTicks\":true,\"vertical\":false,\"invert\":false},{\"name\":\"workMode\",\"label\":\"Work mode\",\"controlType\":\"radio\",\"options\":[{\"text\":\"CLT\",\"value\":\"CLT\"},{\"text\":\"PJ\",\"value\":\"PJ\"},{\"text\":\"Intern\",\"value\":\"INTERN\"}],\"defaultValue\":\"CLT\"},{\"name\":\"skills\",\"label\":\"Skills\",\"controlType\":\"multiSelect\",\"options\":[{\"text\":\"Angular\",\"value\":\"ANG\"},{\"text\":\"React\",\"value\":\"RE\"},{\"text\":\"Node\",\"value\":\"NODE\"}],\"visibleIn\":[\"form\",\"filter\"],\"multiple\":true,\"searchable\":true,\"clearable\":true,\"selectAll\":true,\"maxSelections\":5,\"virtualScroll\":true,\"emptyOptionText\":\"None\"},{\"name\":\"availability\",\"label\":\"Availability\",\"controlType\":\"dateRange\",\"rangeSeparator\":\" to \"},{\"name\":\"notes\",\"label\":\"Notes\",\"controlType\":\"textarea\",\"validators\":{\"maxLength\":500},\"hint\":\"Add relevant notes.\",\"textTransformApply\":\"displayOnly\",\"rows\":4,\"minRows\":3,\"maxRows\":8,\"resize\":\"vertical\",\"spellcheck\":true,\"inputMode\":\"text\",\"textTransform\":\"uppercase\",\"readonly\":false,\"formHidden\":false,\"tableHidden\":true,\"filterHidden\":false},{\"name\":\"isActive\",\"label\":\"Active\",\"controlType\":\"toggle\",\"dataType\":\"boolean\",\"defaultValue\":true},{\"name\":\"avatar\",\"label\":\"Photo\",\"controlType\":\"upload\",\"accept\":\".png,.jpg,.jpeg\",\"multiple\":false,\"materialDesign\":{\"appearance\":\"outline\"},\"uploadUrl\":\"/api/uploads/avatars\",\"autoUpload\":true,\"maxFileSize\":5242880,\"maxFiles\":2,\"fileRestrictions\":{\"minResolution\":\"128x128\",\"maxResolution\":\"2048x2048\"},\"chunkSize\":1048576,\"withCredentials\":false,\"headers\":{\"X-Upload-Source\":\"dynamic-form\"},\"method\":\"POST\",\"saveField\":\"file\"},{\"name\":\"terms\",\"label\":\"Accept terms\",\"controlType\":\"checkbox\",\"validators\":{\"requiredChecked\":true},\"tooltip\":\"Required to submit.\"},{\"name\":\"username\",\"label\":\"Username\",\"controlType\":\"input\",\"dataType\":\"text\",\"type\":\"text\",\"minLength\":3,\"maxLength\":20,\"pattern\":\"^[a-zA-Z0-9_]+$\",\"validators\":{\"required\":true,\"patternMessage\":\"Use letters, numbers, underscore\"},\"inputMode\":\"text\",\"autoComplete\":\"username\",\"readonly\":false,\"spellcheck\":false,\"textTransform\":\"lowercase\",\"placeholder\":\"user_name\"},{\"name\":\"password\",\"label\":\"Password\",\"controlType\":\"password\",\"dataType\":\"text\",\"type\":\"password\",\"showPasswordToggle\":true,\"autoComplete\":\"current-password\",\"validators\":{\"required\":true,\"minLength\":8}},{\"name\":\"country\",\"label\":\"Country\",\"controlType\":\"select\",\"dataType\":\"text\",\"options\":[{\"text\":\"Brazil\",\"value\":\"BR\"},{\"text\":\"United States\",\"value\":\"US\"},{\"text\":\"Canada\",\"value\":\"CA\"}],\"optionLabelKey\":\"text\",\"optionValueKey\":\"value\",\"emptyOptionText\":\"Select a country\",\"searchable\":true,\"clearable\":true,\"resourcePath\":\"/api/countries\",\"filterCriteria\":{\"active\":true},\"multiple\":false},{\"name\":\"orgTree\",\"label\":\"Organization\",\"controlType\":\"treeSelect\",\"treeConfig\":{\"expandByDefault\":true,\"selectionMode\":\"single\"},\"nodes\":[{\"label\":\"HQ\",\"value\":\"hq\",\"children\":[{\"label\":\"Finance\",\"value\":\"finance\"}]},{\"label\":\"Branch\",\"value\":\"branch\"}],\"multiple\":false},{\"name\":\"ratingScore\",\"label\":\"Satisfaction\",\"controlType\":\"rating\",\"value\":3,\"max\":5,\"ratingMax\":5,\"ratingPrecision\":0.5,\"ratingIcon\":\"star\",\"ratingEmptyIcon\":\"star_border\",\"ratingAllowHalf\":true},{\"name\":\"progress\",\"label\":\"Progress\",\"controlType\":\"slider\",\"min\":0,\"max\":100,\"step\":5,\"defaultValue\":65,\"thumbLabel\":true,\"showTicks\":true},{\"name\":\"avatarDisplay\",\"label\":\"Avatar display\",\"controlType\":\"avatar\",\"imageSrc\":\"https://cdn.example.com/avatars/ana.png\",\"imageAlt\":\"User avatar\",\"initials\":\"AS\",\"avatarShape\":\"circle\",\"avatarSize\":\"medium\"},{\"name\":\"ctaButton\",\"label\":\"Request access\",\"controlType\":\"button\",\"icon\":\"send\",\"color\":\"primary\",\"variant\":\"raised\",\"size\":\"medium\",\"disabled\":false,\"loading\":false,\"action\":\"requestAccess\",\"actionPayload\":{\"role\":\"manager\"}}]}",
9256
9536
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9260,7 +9540,7 @@
9260
9540
  "corpusVersion": "1.0.0"
9261
9541
  },
9262
9542
  {
9263
- "chunkIndex": 61,
9543
+ "chunkIndex": 89,
9264
9544
  "chunkKind": "recipe",
9265
9545
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"fieldMetadata\",\"fieldMetadata\":[{\"name\":\"aiAssist\",\"label\":\"AI assist\",\"controlType\":\"button\",\"icon\":\"smart_toy\",\"color\":\"accent\",\"variant\":\"stroked\",\"size\":\"medium\",\"action\":\"aiAssist\",\"actionPayload\":{\"prompt\":\"Summarize the candidate profile\",\"history\":[{\"role\":\"user\",\"content\":\"Summarize this CV.\"},{\"role\":\"assistant\",\"content\":\"Summary goes here.\"}]},\"tooltip\":\"Ask AI to summarize the candidate profile\"},{\"name\":\"themeColor\",\"label\":\"Theme color\",\"controlType\":\"colorPicker\",\"format\":\"hex\",\"views\":[\"palette\",\"gradient\"],\"activeView\":\"palette\",\"preview\":true,\"clearButton\":true,\"actionsLayout\":\"end\",\"adaptiveMode\":true,\"adaptiveTitle\":\"Pick a color\",\"adaptiveSubtitle\":\"Brand palette\",\"popupSettings\":{\"width\":320},\"gradientSettings\":{\"opacity\":true},\"paletteSettings\":{\"columns\":8},\"fillMode\":\"solid\",\"rounded\":\"medium\",\"size\":\"medium\",\"icon\":\"palette\",\"iconClass\":\"color-icon\",\"svgIcon\":\"custom-palette\",\"tabindex\":0},{\"name\":\"cpf\",\"label\":\"CPF/CNPJ\",\"controlType\":\"cpfCnpjInput\",\"maskType\":\"cpf-cnpj\",\"unmaskOnSubmit\":true,\"validators\":{\"cpf\":true,\"cnpj\":true}},{\"name\":\"meetingTime\",\"label\":\"Meeting time\",\"controlType\":\"timePicker\",\"enableSeconds\":true,\"stepMinute\":15,\"stepSecond\":30}]}",
9266
9546
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9270,7 +9550,7 @@
9270
9550
  "corpusVersion": "1.0.0"
9271
9551
  },
9272
9552
  {
9273
- "chunkIndex": 62,
9553
+ "chunkIndex": 90,
9274
9554
  "chunkKind": "recipe",
9275
9555
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"sections\",\"sections\":[{\"id\":\"basic\",\"title\":\"Basic data\",\"description\":\"Primary profile and status fields.\",\"icon\":\"person\",\"collapsible\":true,\"collapsed\":false,\"gapBottom\":16,\"titleGapBottom\":6,\"descriptionGapBottom\":8,\"titleStyle\":\"titleMedium\",\"descriptionStyle\":\"bodyMedium\",\"titleColor\":\"#1a1a1a\",\"descriptionColor\":\"#666666\",\"headerAlign\":\"start\",\"headerTooltip\":\"Main data\",\"rows\":[{\"id\":\"row-basic-1\",\"gap\":16,\"rowGap\":12,\"columns\":[{\"id\":\"col-basic-1\",\"fields\":[\"fullName\",\"email\"],\"span\":{\"xs\":12,\"sm\":12,\"md\":6,\"lg\":6,\"xl\":6},\"padding\":8,\"className\":\"col-basic-main\",\"testId\":\"col-basic-main\",\"title\":\"Identity\"},{\"id\":\"col-basic-2\",\"fields\":[\"status\",\"hireDate\"],\"span\":{\"md\":6,\"lg\":6},\"hidden\":{\"xs\":true,\"sm\":false,\"md\":false,\"lg\":false,\"xl\":false},\"order\":{\"xs\":2,\"sm\":1,\"md\":2,\"lg\":2,\"xl\":1}}],\"title\":\"Core fields\"},{\"id\":\"row-basic-2\",\"gap\":16,\"columns\":[{\"id\":\"col-basic-3\",\"fields\":[\"phone\",\"isActive\"],\"span\":{\"md\":6,\"lg\":6},\"offset\":{\"xs\":0,\"sm\":0,\"md\":1,\"lg\":0,\"xl\":0}},{\"id\":\"col-basic-4\",\"fields\":[\"departmentId\",\"teamId\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-basic-3\",\"columns\":[{\"id\":\"col-basic-5\",\"fields\":[\"managerId\"],\"span\":{\"md\":6,\"lg\":6}}]}]},{\"id\":\"employment\",\"title\":\"Employment\",\"description\":\"Contract and compensation.\",\"icon\":\"badge\",\"collapsible\":true,\"collapsed\":false,\"rows\":[{\"id\":\"row-employment-1\",\"gap\":16,\"columns\":[{\"id\":\"col-employment-1\",\"fields\":[\"salary\",\"bonusPercent\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-employment-2\",\"fields\":[\"workMode\",\"terminationDate\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-employment-2\",\"rowGap\":16,\"columns\":[{\"id\":\"col-employment-3\",\"fields\":[\"skills\",\"availability\"],\"span\":{\"md\":12,\"lg\":12}}]}]},{\"id\":\"extras\",\"title\":\"Extras\",\"description\":\"Additional notes and context.\",\"collapsible\":true,\"collapsed\":false,\"rows\":[{\"id\":\"row-extras-1\",\"columns\":[{\"id\":\"col-extras-1\",\"fields\":[\"notes\"],\"span\":{\"md\":12,\"lg\":12},\"align\":\"stretch\",\"padding\":8}]}]},{\"id\":\"attachments\",\"title\":\"Attachments\",\"description\":\"Files and confirmations.\",\"collapsible\":true,\"collapsed\":true,\"rows\":[{\"id\":\"row-attachments-1\",\"columns\":[{\"id\":\"col-attachments-1\",\"fields\":[\"avatar\",\"terms\"],\"span\":{\"md\":12,\"lg\":12},\"align\":\"center\"}]}]},{\"id\":\"advanced\",\"title\":\"Advanced\",\"description\":\"Extra controls and integrations.\",\"collapsible\":true,\"collapsed\":true,\"rows\":[{\"id\":\"row-advanced-1\",\"gap\":16,\"columns\":[{\"id\":\"col-advanced-1\",\"fields\":[\"username\",\"password\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-advanced-2\",\"fields\":[\"country\",\"orgTree\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-advanced-2\",\"gap\":16,\"columns\":[{\"id\":\"col-advanced-3\",\"fields\":[\"themeColor\",\"cpf\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-advanced-4\",\"fields\":[\"meetingTime\",\"ratingScore\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-advanced-3\",\"gap\":16,\"columns\":[{\"id\":\"col-advanced-5\",\"fields\":[\"progress\",\"avatarDisplay\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-advanced-6\",\"fields\":[\"ctaButton\",\"aiAssist\"],\"span\":{\"md\":6,\"lg\":6}}]}]}]}",
9276
9556
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9280,7 +9560,7 @@
9280
9560
  "corpusVersion": "1.0.0"
9281
9561
  },
9282
9562
  {
9283
- "chunkIndex": 63,
9563
+ "chunkIndex": 91,
9284
9564
  "chunkKind": "recipe",
9285
9565
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"actions\",\"actions\":{\"submit\":{\"visible\":true,\"label\":\"Save\",\"icon\":\"save\",\"color\":\"primary\",\"variant\":\"raised\",\"size\":\"medium\",\"type\":\"submit\",\"shortcut\":\"Ctrl+S\",\"tooltip\":\"Save changes\",\"className\":\"action-submit\",\"style\":{\"letterSpacing\":\"0.5px\"},\"disabled\":false,\"loading\":false},\"cancel\":{\"visible\":true,\"label\":\"Cancel\",\"icon\":\"close\",\"type\":\"button\",\"color\":\"basic\"},\"reset\":{\"visible\":true,\"label\":\"Reset\",\"type\":\"reset\",\"color\":\"basic\"},\"custom\":[{\"id\":\"archive\",\"visible\":true,\"label\":\"Archive\",\"icon\":\"archive\",\"color\":\"warn\",\"variant\":\"stroked\",\"action\":\"archive\",\"tooltip\":\"Archive record\"},{\"id\":\"preview\",\"visible\":true,\"label\":\"Preview\",\"icon\":\"visibility\",\"color\":\"accent\",\"variant\":\"flat\",\"action\":\"preview\"}],\"position\":\"right\",\"orientation\":\"horizontal\",\"spacing\":\"normal\",\"sticky\":true,\"divider\":true,\"placement\":\"afterSections\",\"containerClassName\":\"form-actions-container\",\"containerStyles\":{\"background\":\"var(--md-sys-color-surface-container)\",\"border\":\"1px solid var(--md-sys-color-outline-variant)\",\"borderRadius\":\"12px\",\"padding\":\"12px 16px\"},\"mobile\":{\"position\":\"center\",\"orientation\":\"vertical\",\"collapseToMenu\":true}}}",
9286
9566
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9290,7 +9570,7 @@
9290
9570
  "corpusVersion": "1.0.0"
9291
9571
  },
9292
9572
  {
9293
- "chunkIndex": 64,
9573
+ "chunkIndex": 92,
9294
9574
  "chunkKind": "recipe",
9295
9575
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"formRules\",\"formRules\":[{\"id\":\"hide-comp-for-intern\",\"name\":\"Hide compensation for interns\",\"targetType\":\"field\",\"targets\":[\"salary\",\"bonusPercent\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"workMode\"},\"INTERN\"]},\"properties\":{\"visible\":false,\"required\":false},\"propertiesWhenFalse\":{\"visible\":true}},\"description\":\"Rule for coverage of description field.\",\"targetFields\":[\"salary\",\"bonusPercent\"],\"context\":\"visibility\"},{\"id\":\"require-termination-date\",\"name\":\"Require termination date when inactive\",\"targetType\":\"field\",\"targets\":[\"terminationDate\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"properties\":{\"visible\":true,\"required\":true}}},{\"id\":\"collapse-employment-section\",\"name\":\"Collapse employment when active\",\"targetType\":\"section\",\"targets\":[\"employment\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"status\"},\"ACTIVE\"]},\"properties\":{\"collapsed\":false},\"propertiesWhenFalse\":{\"collapsed\":true}}},{\"id\":\"disable-archive-when-inactive\",\"name\":\"Disable archive when not active\",\"targetType\":\"action\",\"targets\":[\"archive\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"isActive\"},true]},\"properties\":{\"disabled\":false},\"propertiesWhenFalse\":{\"disabled\":true}}},{\"id\":\"hide-extras-row\",\"name\":\"Hide extras when intern\",\"targetType\":\"row\",\"targets\":[\"row-extras-1\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"workMode\"},\"INTERN\"]},\"properties\":{\"visible\":false},\"propertiesWhenFalse\":{\"visible\":true,\"rowGap\":16}}},{\"id\":\"expand-notes-column\",\"name\":\"Expand notes column when inactive\",\"targetType\":\"column\",\"targets\":[\"col-extras-1\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"properties\":{\"span\":{\"md\":12,\"lg\":12}}}},{\"id\":\"rule-field-all\",\"name\":\"Field properties coverage\",\"targetType\":\"field\",\"targets\":[\"fullName\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"required\":true,\"readonly\":false,\"disabled\":false,\"className\":\"rule-field\",\"style\":{\"color\":\"#333333\"},\"label\":\"Rule label\",\"description\":\"Rule description\",\"placeholder\":\"Rule placeholder\",\"hint\":\"Rule hint\",\"tooltip\":\"Rule tooltip\",\"prefixIcon\":\"info\",\"suffixIcon\":\"check\",\"prefixText\":\"R$\",\"suffixText\":\"USD\",\"defaultValue\":{\"value\":\"default\"},\"options\":[{\"text\":\"A\",\"value\":\"A\"}],\"appearance\":\"outline\",\"color\":\"primary\",\"floatLabel\":\"always\",\"hintPosition\":\"end\",\"validators\":{\"required\":true}},\"propertiesWhenFalse\":{\"visible\":false,\"required\":false,\"readonly\":true,\"disabled\":true,\"className\":\"rule-field-off\",\"style\":{\"color\":\"#999999\"},\"label\":\"Rule label off\",\"description\":\"Rule description off\",\"placeholder\":\"Rule placeholder off\",\"hint\":\"Rule hint off\",\"tooltip\":\"Rule tooltip off\",\"prefixIcon\":\"block\",\"suffixIcon\":\"close\",\"prefixText\":\"OFF\",\"suffixText\":\"OFF\",\"defaultValue\":{\"value\":null},\"options\":[{\"text\":\"B\",\"value\":\"B\"}],\"appearance\":\"fill\",\"color\":\"accent\",\"floatLabel\":\"never\",\"hintPosition\":\"start\",\"validators\":{\"required\":false}}}},{\"id\":\"rule-section-all\",\"name\":\"Section properties coverage\",\"targetType\":\"section\",\"targets\":[\"basic\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"title\":\"Rule section title\",\"description\":\"Rule section description\",\"icon\":\"settings\",\"className\":\"rule-section\",\"style\":{\"borderRadius\":\"8px\"},\"borderColor\":\"#cccccc\",\"borderStyle\":\"solid\",\"borderWidth\":1,\"collapsible\":true,\"collapsed\":false,\"headerTooltip\":\"Section tooltip\",\"headerAlign\":\"start\",\"gapBottom\":12,\"titleGapBottom\":4,\"descriptionGapBottom\":6,\"titleColor\":\"#222222\",\"descriptionColor\":\"#555555\",\"titleStyle\":\"titleSmall\",\"descriptionStyle\":\"bodySmall\",\"appearance\":\"outlined\"},\"propertiesWhenFalse\":{\"visible\":false,\"title\":\"Rule section title off\",\"description\":\"Rule section description off\",\"icon\":\"block\",\"className\":\"rule-section-off\",\"style\":{\"borderRadius\":\"0px\"},\"borderColor\":\"#eeeeee\",\"borderStyle\":\"dashed\",\"borderWidth\":0,\"collapsible\":false,\"collapsed\":true,\"headerTooltip\":\"Section tooltip off\",\"headerAlign\":\"center\",\"gapBottom\":0,\"titleGapBottom\":0,\"descriptionGapBottom\":0,\"titleColor\":\"#999999\",\"descriptionColor\":\"#999999\",\"titleStyle\":\"titleMedium\",\"descriptionStyle\":\"bodyMedium\",\"appearance\":\"flat\"}}},{\"id\":\"rule-action-all\",\"name\":\"Action properties coverage\",\"targetType\":\"action\",\"targets\":[\"archive\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"disabled\":false,\"loading\":false,\"label\":\"Rule action\",\"icon\":\"archive\",\"tooltip\":\"Rule tooltip\",\"color\":\"warn\",\"variant\":\"stroked\",\"size\":\"medium\",\"className\":\"rule-action\",\"style\":{\"minWidth\":\"120px\"}},\"propertiesWhenFalse\":{\"visible\":false,\"disabled\":true,\"loading\":true,\"label\":\"Rule action off\",\"icon\":\"block\",\"tooltip\":\"Rule tooltip off\",\"color\":\"basic\",\"variant\":\"flat\",\"size\":\"small\",\"className\":\"rule-action-off\",\"style\":{\"minWidth\":\"80px\"}}}},{\"id\":\"rule-row-all\",\"name\":\"Row properties coverage\",\"targetType\":\"row\",\"targets\":[\"row-basic-1\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"gap\":12,\"rowGap\":8,\"className\":\"rule-row\",\"style\":{\"marginBottom\":\"12px\"}},\"propertiesWhenFalse\":{\"visible\":false,\"gap\":0,\"rowGap\":0,\"className\":\"rule-row-off\",\"style\":{\"marginBottom\":\"0px\"}}}},{\"id\":\"rule-column-all\",\"name\":\"Column properties coverage\",\"targetType\":\"column\",\"targets\":[\"col-basic-1\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"span\":{\"xs\":12,\"sm\":12,\"md\":6,\"lg\":6,\"xl\":6},\"offset\":{\"xs\":0,\"sm\":0,\"md\":0,\"lg\":0,\"xl\":0},\"order\":{\"xs\":1,\"sm\":1,\"md\":1,\"lg\":1,\"xl\":1},\"hidden\":{\"xs\":false,\"sm\":false,\"md\":false,\"lg\":false,\"xl\":false},\"align\":\"stretch\",\"padding\":8,\"className\":\"rule-column\",\"style\":{\"backgroundColor\":\"#f6f6f6\"}},\"propertiesWhenFalse\":{\"visible\":false,\"span\":{\"xs\":12,\"sm\":12,\"md\":12,\"lg\":12,\"xl\":12},\"offset\":{\"xs\":0,\"sm\":0,\"md\":0,\"lg\":0,\"xl\":0},\"order\":{\"xs\":2,\"sm\":2,\"md\":2,\"lg\":2,\"xl\":2},\"hidden\":{\"xs\":true,\"sm\":true,\"md\":true,\"lg\":true,\"xl\":true},\"align\":\"center\",\"padding\":0,\"className\":\"rule-column-off\",\"style\":{\"backgroundColor\":\"#ffffff\"}}}}]}",
9296
9576
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9300,7 +9580,7 @@
9300
9580
  "corpusVersion": "1.0.0"
9301
9581
  },
9302
9582
  {
9303
- "chunkIndex": 65,
9583
+ "chunkIndex": 93,
9304
9584
  "chunkKind": "recipe",
9305
9585
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"formRulesState\",\"formRulesState\":{\"nodes\":{},\"rootNodes\":[],\"selectedNodeId\":null,\"currentDSL\":\"\",\"currentJSON\":[],\"validationErrors\":[],\"mode\":\"visual\",\"isDirty\":false,\"history\":[],\"historyPosition\":0}}",
9306
9586
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9310,7 +9590,7 @@
9310
9590
  "corpusVersion": "1.0.0"
9311
9591
  },
9312
9592
  {
9313
- "chunkIndex": 66,
9593
+ "chunkIndex": 94,
9314
9594
  "chunkKind": "recipe",
9315
9595
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_variants\",\"_variants\":[{\"id\":\"actions-legacy-flags\",\"description\":\"Legacy actions flags.\",\"patch\":{\"actions\":{\"showSaveButton\":true,\"submitButtonLabel\":\"Save\",\"showCancelButton\":true,\"cancelButtonLabel\":\"Back\",\"showResetButton\":false}}},{\"id\":\"layout-minimal\",\"description\":\"Minimal layout with one section and two fields.\",\"patch\":{\"sections\":[{\"id\":\"simple\",\"title\":\"Simple\",\"rows\":[{\"id\":\"row-simple-1\",\"columns\":[{\"id\":\"col-simple-1\",\"fields\":[\"fullName\",\"email\"]}]}]}]}},{\"id\":\"rules-clear-override\",\"description\":\"Clear rule overrides with null.\",\"patch\":{\"formRules\":[{\"id\":\"hide-comp-for-intern\",\"name\":\"Hide compensation for interns\",\"targetType\":\"field\",\"targets\":[\"salary\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"workMode\"},\"INTERN\"]},\"properties\":{\"visible\":null}}}]}}]}",
9316
9596
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9320,7 +9600,7 @@
9320
9600
  "corpusVersion": "1.0.0"
9321
9601
  },
9322
9602
  {
9323
- "chunkIndex": 67,
9603
+ "chunkIndex": 95,
9324
9604
  "chunkKind": "recipe",
9325
9605
  "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"presentation\",\"presentation\":{\"labelFontSize\":12,\"valueFontSize\":14,\"labelPosition\":\"left\",\"compact\":false,\"density\":\"cozy\",\"labelWidth\":140,\"labelAlign\":\"start\",\"valueAlign\":\"end\"}}",
9326
9606
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
@@ -9330,7 +9610,7 @@
9330
9610
  "corpusVersion": "1.0.0"
9331
9611
  },
9332
9612
  {
9333
- "chunkIndex": 68,
9613
+ "chunkIndex": 96,
9334
9614
  "chunkKind": "recipe",
9335
9615
  "content": "{\"_comment\":\"Component-level recipe for PraxisDynamicForm. Values are placeholders for AI examples.\",\"templateMeta\":{\"defaultVariantId\":\"form-config\",\"variants\":[{\"id\":\"form-config\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"form-config\",\"aiDescription\":\"FormConfig completo com layout, validacoes e hooks.\",\"tags\":[\"full\",\"config\"],\"useWhen\":\"usuario pede formulario completo ou gerado a partir do schema\",\"examplePrompts\":[\"gere um formulario completo para cadastro de funcionario\",\"crie um form completo com layout e validacoes\"]},{\"id\":\"fields\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"fields\",\"aiDescription\":\"Lista completa de FieldMetadata e sections.\",\"tags\":[\"fields\",\"metadata\"],\"useWhen\":\"usuario pede apenas campos ou metadados\",\"examplePrompts\":[\"adicione campos para endereco e contato\",\"gere somente a lista de campos\"]},{\"id\":\"layout\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"layout\",\"aiDescription\":\"Layout de secoes/linhas/colunas com exemplos de acoes.\",\"tags\":[\"layout\",\"sections\"],\"useWhen\":\"usuario pede reorganizacao visual do formulario\",\"examplePrompts\":[\"organize o layout em duas colunas\",\"crie secoes e linhas para o formulario\"]},{\"id\":\"validation\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"validation\",\"aiDescription\":\"Validacoes complexas e regras condicionais.\",\"tags\":[\"validation\",\"rules\"],\"useWhen\":\"usuario pede validacoes avancadas ou regras condicionais\",\"examplePrompts\":[\"adicione validacao cruzada de email\",\"crie validacoes condicionais para empresa\"]},{\"id\":\"local-transient\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"local-transient\",\"aiDescription\":\"Campos locais/transient que participam da UI mas ficam fora do payload backend por padrao.\",\"tags\":[\"fields\",\"local\",\"transient\",\"submit\"],\"useWhen\":\"usuario precisa de campos auxiliares no formulario que nao devem participar do payload persistido\",\"examplePrompts\":[\"adicione um campo local que nao seja enviado ao backend\",\"crie campos auxiliares transient para ajudar no preenchimento\"]},{\"id\":\"entity-lookup-procurement\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"entity-lookup-procurement\",\"aiDescription\":\"Formulario de pedido de compra com Entity Lookup corporativo, RESOURCE_ENTITY, cascata, reidratacao e politica de selecao.\",\"tags\":[\"entity-lookup\",\"resource-entity\",\"option-source\",\"cascading\",\"rehydration\",\"procurement\"],\"useWhen\":\"usuario precisa selecionar entidades reais do dominio com status, permissao, navegacao, dependsOn e by-ids\",\"examplePrompts\":[\"crie um pedido de compra com lookup de fornecedor contrato e produto\",\"gere entityLookup com dependsOn e dependencyFilterMap\",\"mostre um formulario com RESOURCE_ENTITY e reidratacao por by-ids\"]},{\"id\":\"visual-block-domain-rules\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"visual-block-domain-rules\",\"aiDescription\":\"Regras de dominio que alteram visualBlock text/title/message/style sem criar campos nem payload.\",\"tags\":[\"visual-block\",\"form-rules\",\"domain-rules\",\"rich-content\",\"llm-authoring\"],\"useWhen\":\"usuario precisa de avisos, orientacoes e copy operacional condicionais sem alterar submit payload\",\"examplePrompts\":[\"crie regras de dominio para alterar avisos visuais do formulario\",\"adicione visualBlock rules para LGPD compliance ou risco de fornecedor\",\"mostre regras de texto para blocos visuais sem criar campos\"]},{\"id\":\"command-rules\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"command-rules\",\"aiDescription\":\"Regras condicionais governadas que executam GlobalActionRef depois que valores calculados estabilizam.\",\"tags\":[\"formCommandRules\",\"global-action\",\"computed-values\",\"business-rules\"],\"useWhen\":\"usuario precisa disparar alertas, confirmacoes ou comandos host-mediated por regra declarativa do formulario\",\"examplePrompts\":[\"crie uma regra que alerta quando idade calculada for menor que 18\",\"confirme quando o periodo de ferias iniciar em uma sexta-feira\",\"mostre formCommandRules com dialog.alert e dialog.confirm\"]}]},\"component\":\"praxis-dynamic-form\",\"inputs\":{\"resourcePath\":\"/api/employees\",\"resourceId\":\"123\",\"mode\":\"edit\",\"config\":{\"_comment\":\"Use praxis-dynamic-form.form-config.json for a full FormConfig example.\",\"sections\":[{\"id\":\"minimal\",\"rows\":[]}],\"presentation\":{\"labelFontSize\":12,\"valueFontSize\":14,\"labelPosition\":\"left\",\"compact\":false,\"density\":\"cozy\",\"labelWidth\":140,\"labelAlign\":\"start\",\"valueAlign\":\"end\"}},\"schemaSource\":\"resource\",\"enableCustomization\":true,\"formId\":\"employee-form\",\"layout\":{\"formTitle\":\"Legacy layout example\",\"formDescription\":\"Fieldsets-based layout (legacy)\",\"fieldsets\":[{\"id\":\"legacy-basic\",\"title\":\"Legacy\",\"orientation\":\"vertical\",\"rows\":[{\"id\":\"legacy-row-1\",\"orientation\":\"horizontal\",\"fields\":[{\"name\":\"legacyField\",\"label\":\"Legacy field\",\"controlType\":\"input\"}]}]}]},\"backConfig\":{\"strategy\":\"navigate\",\"returnTo\":\"/employees\",\"confirmOnDirty\":true},\"hooks\":{\"beforeInit\":[{\"id\":\"load-static-options\",\"priority\":100,\"timeoutMs\":2000,\"args\":{\"source\":\"cache\"}}],\"afterInit\":[],\"beforeValidate\":[],\"afterValidate\":[],\"beforeSubmit\":[],\"afterSubmit\":[{\"id\":\"notify-success\",\"priority\":10}],\"onError\":[]},\"removeEmptyContainersOnSave\":true,\"reactiveValidation\":true,\"reactiveValidationDebounceMs\":250,\"notifyIfOutdated\":\"snackbar\",\"snoozeMs\":86400000,\"autoOpenSettingsOnOutdated\":false,\"readonlyModeGlobal\":false,\"disabledModeGlobal\":false,\"presentationModeGlobal\":false,\"visibleGlobal\":true,\"customEndpoints\":{\"getAll\":\"/api/employees\",\"getById\":\"/api/employees/{id}\",\"create\":\"/api/employees\",\"update\":\"/api/employees/{id}\",\"delete\":\"/api/employees/{id}\",\"filter\":\"/api/employees/filter\",\"schema\":\"/api/employees/schemas\"}},\"outputs\":{\"formSubmit\":{\"payload\":{\"stage\":\"after\",\"formData\":{\"id\":123,\"fullName\":\"Ana Souza\"},\"rawFormData\":{\"id\":123,\"fullName\":\"Ana Souza\",\"approvalComment\":\"Conferido com o solicitante\"},\"isValid\":true,\"validationErrors\":[],\"entityId\":123,\"operation\":\"update\",\"result\":{\"status\":\"ok\"}}},\"formCancel\":{\"payload\":null},\"formReset\":{\"payload\":null},\"configChange\":{\"payload\":{\"sections\":[{\"id\":\"minimal\",\"rows\":[]}]}},\"formReady\":{\"payload\":{\"formGroup\":\"[FormGroup]\",\"fieldsMetadata\":[{\"name\":\"fullName\",\"label\":\"Full name\",\"controlType\":\"input\"}],\"layout\":{\"formTitle\":\"Employee\"},\"hasEntity\":true,\"entityId\":123}},\"valueChange\":{\"payload\":{\"formData\":{\"email\":\"ana@example.com\"},\"changedField\":\"email\",\"previousValue\":\"old@example.com\",\"currentValue\":\"ana@example.com\",\"changedFields\":[\"email\"],\"isValid\":true,\"entityId\":123}},\"syncCompleted\":{\"payload\":{\"hasChanges\":true,\"addedFields\":[{\"name\":\"nickname\",\"label\":\"Nickname\",\"controlType\":\"input\"}],\"removedFields\":[\"legacyField\"],\"modifiedFields\":[{\"fieldName\":\"email\",\"property\":\"label\",\"localValue\":\"Email\",\"serverValue\":\"E-mail\"}],\"conflicts\":[{\"fieldName\":\"salary\",\"reason\":\"user-customized\",\"resolution\":\"keep-local\"}]}},\"initializationError\":{\"payload\":{\"stage\":\"schema-fetch\",\"error\":{\"message\":\"Schema failed to load\"},\"context\":{\"formId\":\"employee-form\",\"resourcePath\":\"/api/employees\",\"hasLocalConfig\":true},\"recoverable\":true,\"userMessage\":\"Unable to load form schema.\"}},\"enableCustomizationChange\":{\"payload\":true},\"customAction\":{\"payload\":{\"actionId\":\"archive\",\"formData\":{\"id\":123},\"isValid\":true,\"source\":\"button\"}},\"actionConfirmation\":{\"payload\":{\"actionId\":\"archive\",\"message\":\"Confirm archive?\",\"confirmed\":true}},\"schemaStatusChange\":{\"payload\":{\"outdated\":false,\"serverHash\":\"hash-abc-123\",\"lastVerifiedAt\":\"2024-02-02T10:00:00Z\",\"formId\":\"employee-form\"}}}}",
9336
9616
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.json",
@@ -9340,7 +9620,7 @@
9340
9620
  "corpusVersion": "1.0.0"
9341
9621
  },
9342
9622
  {
9343
- "chunkIndex": 69,
9623
+ "chunkIndex": 97,
9344
9624
  "chunkKind": "recipe",
9345
9625
  "content": "{\"_comment\":\"Receita de layout complexo com múltiplas seções, colunas assimétricas (2/3 + 1/3) e ações posicionadas explicitamente.\",\"templateMeta\":{\"variantId\":\"layout\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"layout\",\"sections\"],\"useWhen\":\"ajustar layout, secoes, linhas e colunas\",\"examplePrompts\":[\"organize o layout em colunas\",\"divida o formulario em secoes\"]},\"metadata\":{\"name\":\"Complex Layout Example\",\"version\":\"v1\"},\"sections\":[{\"id\":\"summary\",\"title\":\"Resumo\",\"description\":\"Informações principais em colunas assimétricas.\",\"rows\":[{\"id\":\"summary-row-1\",\"columns\":[{\"id\":\"summary-main\",\"span\":{\"md\":8,\"lg\":8},\"fields\":[\"title\",\"description\"],\"_comment\":\"Coluna principal ocupando 2/3 da largura.\"},{\"id\":\"summary-side\",\"span\":{\"md\":4,\"lg\":4},\"fields\":[\"status\",\"priority\",\"owner\"],\"_comment\":\"Coluna lateral ocupando 1/3 da largura.\"}]}]},{\"id\":\"dates\",\"title\":\"Datas\",\"rows\":[{\"id\":\"dates-row-1\",\"columns\":[{\"id\":\"dates-start\",\"span\":{\"md\":4,\"lg\":4},\"fields\":[\"startDate\"]},{\"id\":\"dates-due\",\"span\":{\"md\":4,\"lg\":4},\"fields\":[\"dueDate\"]},{\"id\":\"dates-sla\",\"span\":{\"md\":4,\"lg\":4},\"fields\":[\"slaDays\"]}],\"_comment\":\"Linha com 3 colunas de largura igual (automatico).\"}]},{\"id\":\"attachments\",\"title\":\"Anexos e Comentários\",\"rows\":[{\"id\":\"attachments-row-1\",\"columns\":[{\"id\":\"attachments-col\",\"fields\":[\"attachments\"]}]},{\"id\":\"attachments-row-2\",\"columns\":[{\"id\":\"notes-col\",\"fields\":[\"notes\"]}]}]}],\"fieldMetadata\":[{\"name\":\"title\",\"label\":\"Título\",\"controlType\":\"input\",\"validators\":{\"required\":true}},{\"name\":\"description\",\"label\":\"Descrição\",\"controlType\":\"textarea\",\"rows\":3},{\"name\":\"status\",\"label\":\"Status\",\"controlType\":\"select\",\"options\":[{\"label\":\"Aberto\",\"value\":\"OPEN\"},{\"label\":\"Fechado\",\"value\":\"CLOSED\"}]},{\"name\":\"priority\",\"label\":\"Prioridade\",\"controlType\":\"select\",\"options\":[{\"label\":\"Alta\",\"value\":\"HIGH\"},{\"label\":\"Média\",\"value\":\"MEDIUM\"},{\"label\":\"Baixa\",\"value\":\"LOW\"}]},{\"name\":\"owner\",\"label\":\"Responsável\",\"controlType\":\"autoComplete\",\"searchable\":true},{\"name\":\"startDate\",\"label\":\"Início\",\"controlType\":\"date\"},{\"name\":\"dueDate\",\"label\":\"Entrega\",\"controlType\":\"date\"},{\"name\":\"slaDays\",\"label\":\"SLA (dias)\",\"controlType\":\"numericTextBox\"},{\"name\":\"attachments\",\"label\":\"Anexos\",\"controlType\":\"upload\"},{\"name\":\"notes\",\"label\":\"Notas\",\"controlType\":\"textarea\",\"rows\":4}],\"actions\":{\"submit\":{\"id\":\"save\",\"label\":\"Salvar\",\"color\":\"primary\",\"visible\":true,\"type\":\"submit\"},\"cancel\":{\"id\":\"cancel\",\"label\":\"Cancelar\",\"color\":\"basic\",\"visible\":true,\"type\":\"button\"},\"reset\":{\"id\":\"reset\",\"label\":\"Limpar\",\"color\":\"basic\",\"visible\":false,\"type\":\"reset\"},\"position\":\"right\",\"placement\":\"afterSections\"}}",
9346
9626
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.layout.json",
@@ -9350,7 +9630,7 @@
9350
9630
  "corpusVersion": "1.0.0"
9351
9631
  },
9352
9632
  {
9353
- "chunkIndex": 70,
9633
+ "chunkIndex": 98,
9354
9634
  "chunkKind": "recipe",
9355
9635
  "content": "{\"_comment\":\"Recipe for host local/transient fields in PraxisDynamicForm. These fields participate in UI state but are omitted from backend payloads by default.\",\"templateMeta\":{\"variantId\":\"local-transient\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"fields\",\"local\",\"transient\",\"submit\"],\"useWhen\":\"campos auxiliares do host devem ajudar no preenchimento sem entrar no payload enviado ao backend\",\"examplePrompts\":[\"adicione campos locais que nao sejam enviados ao backend\",\"crie campos transient para calculo ou confirmacao visual\",\"mostre formData filtrado e rawFormData completo no submit\"]},\"metadata\":{\"version\":\"2.0.0\",\"source\":\"local\",\"schemaId\":\"path:/api/employees#request\"},\"fieldMetadata\":[{\"name\":\"fullName\",\"label\":\"Nome completo\",\"controlType\":\"input\",\"validators\":{\"required\":true,\"minLength\":3}},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"email\":true}},{\"name\":\"approvalComment\",\"label\":\"Comentario interno de aprovacao\",\"controlType\":\"textarea\",\"source\":\"local\",\"submitPolicy\":\"omit\",\"description\":\"Campo auxiliar do host. Participa da UI e de regras locais, mas nao entra em formSubmit.formData.\"},{\"name\":\"calculatedRiskScore\",\"label\":\"Score calculado\",\"controlType\":\"numericTextBox\",\"transient\":true,\"readOnly\":true,\"description\":\"Valor calculado no cliente para orientar o preenchimento. Omitido do payload por padrao.\"},{\"name\":\"manualOverrideReason\",\"label\":\"Justificativa de ajuste manual\",\"controlType\":\"textarea\",\"source\":\"local\",\"submitPolicy\":\"includeWhenDirty\",\"description\":\"Exemplo de excecao: campo local enviado somente se o usuario alterar o controle.\"}],\"sections\":[{\"id\":\"employee-data\",\"title\":\"Dados do funcionario\",\"rows\":[{\"id\":\"identity-row\",\"columns\":[{\"id\":\"identity-column\",\"fields\":[\"fullName\",\"email\"]}]}]},{\"id\":\"host-assistance\",\"title\":\"Apoio ao preenchimento\",\"rows\":[{\"id\":\"local-row\",\"columns\":[{\"id\":\"local-column\",\"fields\":[\"approvalComment\",\"calculatedRiskScore\",\"manualOverrideReason\"]}]}]}],\"submitExample\":{\"rawFormData\":{\"fullName\":\"Ana Souza\",\"email\":\"ana@example.com\",\"approvalComment\":\"Validado com RH\",\"calculatedRiskScore\":82,\"manualOverrideReason\":\"Ajuste autorizado\"},\"formData\":{\"fullName\":\"Ana Souza\",\"email\":\"ana@example.com\",\"manualOverrideReason\":\"Ajuste autorizado\"},\"notes\":[\"approvalComment usa submitPolicy omit e fica somente em rawFormData.\",\"calculatedRiskScore usa transient true e fica somente em rawFormData.\",\"manualOverrideReason usa includeWhenDirty e entra em formData apenas quando o controle estiver dirty.\"]}}",
9356
9636
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.local-transient.json",
@@ -9360,7 +9640,7 @@
9360
9640
  "corpusVersion": "1.0.0"
9361
9641
  },
9362
9642
  {
9363
- "chunkIndex": 71,
9643
+ "chunkIndex": 99,
9364
9644
  "chunkKind": "recipe",
9365
9645
  "content": "{\"_comment\":\"Receita focada em validações complexas: campos dependentes, validação cruzada (matchField), assíncrona (unique) e regras condicionais.\",\"templateMeta\":{\"variantId\":\"validation\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"validation\",\"rules\"],\"useWhen\":\"criar validacoes avancadas e regras condicionais\",\"examplePrompts\":[\"adicione validacao cruzada de email\",\"crie regras condicionais por tipo de conta\"]},\"metadata\":{\"name\":\"Advanced Validation Form\",\"version\":\"v1\"},\"fieldMetadata\":[{\"name\":\"username\",\"label\":\"Usuário\",\"controlType\":\"input\",\"unique\":true,\"validators\":{\"required\":true,\"minLength\":4,\"pattern\":\"^[a-z0-9_]+$\",\"patternMessage\":\"Apenas letras minúsculas, números e underline.\",\"uniqueValidator\":\"checkUsernameUnique\",\"uniqueMessage\":\"Este usuário já está em uso.\"},\"_comment\":\"Validação de pattern regex e unicidade simulada.\"},{\"name\":\"email\",\"label\":\"E-mail\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"email\":true}},{\"name\":\"confirmEmail\",\"label\":\"Confirmar E-mail\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"matchField\":\"email\",\"matchFieldMessage\":\"Os e-mails não conferem.\"},\"_comment\":\"Validação cruzada: deve ser igual ao campo 'email'.\"},{\"name\":\"password\",\"label\":\"Senha\",\"controlType\":\"password\",\"validators\":{\"required\":true,\"minLength\":8,\"customValidator\":\"passwordStrength\"}},{\"name\":\"age\",\"label\":\"Idade\",\"controlType\":\"numericTextBox\",\"validators\":{\"required\":true,\"min\":18,\"max\":120,\"minMessage\":\"É necessário ser maior de 18 anos.\"}},{\"name\":\"accountType\",\"label\":\"Tipo de Conta\",\"controlType\":\"select\",\"options\":[{\"label\":\"Pessoal\",\"value\":\"PERSONAL\"},{\"label\":\"Empresarial\",\"value\":\"BUSINESS\"}],\"defaultValue\":\"PERSONAL\"},{\"name\":\"cnpj\",\"label\":\"CNPJ\",\"controlType\":\"cpfCnpjInput\",\"maskType\":\"cnpj\",\"conditionalRequired\":{\"==\":[{\"var\":\"accountType\"},\"BUSINESS\"]},\"conditionalDisplay\":{\"==\":[{\"var\":\"accountType\"},\"BUSINESS\"]},\"_comment\":\"Campo condicional: só aparece e é obrigatório se accountType for 'BUSINESS'.\"},{\"name\":\"bio\",\"label\":\"Biografia\",\"controlType\":\"textarea\",\"validators\":{\"minWords\":10,\"maxLength\":500},\"hint\":\"Conte-nos um pouco sobre você (mínimo 10 palavras).\"},{\"name\":\"terms\",\"label\":\"Aceito os termos de uso\",\"controlType\":\"checkbox\",\"validators\":{\"requiredChecked\":true}}],\"sections\":[{\"id\":\"credentials\",\"title\":\"Credenciais\",\"rows\":[{\"id\":\"credentials-row-1\",\"columns\":[{\"id\":\"username-col\",\"fields\":[\"username\"]}]},{\"id\":\"credentials-row-2\",\"columns\":[{\"id\":\"email-col\",\"fields\":[\"email\",\"confirmEmail\"]}]},{\"id\":\"credentials-row-3\",\"columns\":[{\"id\":\"password-col\",\"fields\":[\"password\"]}]}]},{\"id\":\"profile\",\"title\":\"Perfil\",\"rows\":[{\"id\":\"profile-row-1\",\"columns\":[{\"id\":\"age-col\",\"fields\":[\"age\",\"accountType\"]}]},{\"id\":\"profile-row-2\",\"columns\":[{\"id\":\"cnpj-col\",\"fields\":[\"cnpj\"]}]},{\"id\":\"profile-row-3\",\"columns\":[{\"id\":\"bio-col\",\"fields\":[\"bio\"]}]}]},{\"id\":\"terms\",\"rows\":[{\"id\":\"terms-row-1\",\"columns\":[{\"id\":\"terms-col\",\"fields\":[\"terms\"]}]}]}],\"actions\":{\"submit\":{\"id\":\"submit\",\"label\":\"Cadastrar\",\"color\":\"primary\",\"visible\":true,\"type\":\"submit\"},\"cancel\":{\"id\":\"cancel\",\"label\":\"Cancelar\",\"color\":\"basic\",\"visible\":false,\"type\":\"button\"},\"reset\":{\"id\":\"reset\",\"label\":\"Limpar\",\"color\":\"basic\",\"visible\":false,\"type\":\"reset\"}}}",
9366
9646
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.validation.json",
@@ -9370,7 +9650,7 @@
9370
9650
  "corpusVersion": "1.0.0"
9371
9651
  },
9372
9652
  {
9373
- "chunkIndex": 72,
9653
+ "chunkIndex": 100,
9374
9654
  "chunkKind": "recipe",
9375
9655
  "content": "{\"_comment\":\"Official Praxis Dynamic Form recipe for derived visualBlock materializations.\",\"_comment2\":\"Use this when governed semantic decisions already need conditional UI guidance, compliance copy or operational warnings without creating fields or changing submit payload.\",\"templateMeta\":{\"variantId\":\"visual-block-domain-rules\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"status\":\"public-example\",\"tags\":[\"visual-block\",\"form-rules\",\"domain-rules\",\"rich-content\",\"llm-authoring\"],\"useWhen\":\"Materialize governed semantic decisions as Dynamic Form visual guidance while keeping visual blocks outside fieldMetadata, FormControl and payload.\",\"examplePrompts\":[\"materialize governed employee status supplier risk and support priority decisions as visual block guidance\",\"project conditional compliance guidance without changing submit payload\",\"show how LLMs should materialize visualBlock text title message projections with node ids\"]},\"platformValue\":{\"canonicalOwner\":\"praxis-config-starter owns governed semantic decisions; @praxisui/dynamic-form owns derived formRules and FormColumn.items.\",\"visualBlockRuntime\":\"@praxisui/rich-content owns RichContentDocument rendering.\",\"safeRuleContract\":\"visualBlock rules may update visible, hidden, text, title, message, className, rootClassName, layout and style through RULE_PROPERTY_SCHEMA.\",\"payloadBoundary\":\"visualBlock is visual-only: never put visual blocks in fieldMetadata and never read them from formData.\",\"llmContract\":\"LLMs should author business rules through governed domain-rules/shared_rule_authoring. Use operationId rule.visualBlockGuidance.add or equivalent formRules only as a derived UI materialization; formRulesState is generated by Praxis internals after review.\"},\"authoringGuidance\":[\"Do not use visualBlockGuidance as the canonical business-rule authoring path.\",\"Prefer domain-rules/shared_rule_authoring for business-rule, policy, eligibility, validation, compliance or shared decisions.\",\"Use operationId rule.visualBlockGuidance.add only when a governed decision needs a derived Dynamic Form visual projection.\",\"Use targetType visualBlock and target the richContent item id from sections[].rows[].columns[].items[].id.\",\"Set type visualBlockGuidance, context notification and metadata.origin llm with metadata.reviewStatus pending.\",\"Use textNodeId, titleNodeId or messageNodeId when the target document has more than one editable textual node.\",\"Keep condition in canonical Json Logic.\",\"Do not write document, HTML, event handlers, arbitrary URLs or field-like metadata from a rule.\",\"Use the editor diagnostics and Corrigir action when a property is rejected or partially sanitized.\",\"Ask an LLM for semantic correction only when the desired replacement needs business meaning.\"],\"teaches\":[\"formRules.visualBlock\",\"visualBlock.text\",\"visualBlock.title\",\"visualBlock.message\",\"visualBlock.textNodeId\",\"visualBlock.titleNodeId\",\"visualBlock.messageNodeId\",\"visualBlock.visual-only\",\"llm-generated-pending-review\"],\"config\":{\"fieldMetadata\":[{\"name\":\"ativo\",\"label\":\"Ativo\",\"controlType\":\"checkbox\",\"source\":\"schema\"},{\"name\":\"cargoId\",\"label\":\"Cargo\",\"controlType\":\"select\",\"source\":\"schema\",\"options\":[{\"label\":\"Analista\",\"value\":\"analista\"},{\"label\":\"Gestor\",\"value\":\"gestor\"}]},{\"name\":\"riscoFornecedor\",\"label\":\"Risco do fornecedor\",\"controlType\":\"select\",\"source\":\"schema\",\"options\":[{\"label\":\"Baixo\",\"value\":\"baixo\"},{\"label\":\"Alto\",\"value\":\"alto\"},{\"label\":\"Critico\",\"value\":\"critico\"}]},{\"name\":\"prioridade\",\"label\":\"Prioridade\",\"controlType\":\"select\",\"source\":\"schema\",\"options\":[{\"label\":\"Normal\",\"value\":\"normal\"},{\"label\":\"Alta\",\"value\":\"alta\"}]}],\"sections\":[{\"id\":\"domain-guidance\",\"title\":\"Domain guidance examples\",\"rows\":[{\"id\":\"domain-guidance-row\",\"columns\":[{\"id\":\"domain-guidance-column\",\"items\":[{\"kind\":\"richContent\",\"id\":\"profile-status-card\",\"layout\":\"block\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"card\",\"id\":\"profile-status-title\",\"title\":\"Employee active\",\"content\":[{\"type\":\"text\",\"id\":\"profile-status-message\",\"text\":\"Keep assignment, department and contact details current.\"}]}]}},{\"kind\":\"field\",\"id\":\"field-ativo\",\"fieldName\":\"ativo\"},{\"kind\":\"field\",\"id\":\"field-cargoId\",\"fieldName\":\"cargoId\"},{\"kind\":\"richContent\",\"id\":\"supplier-risk-notice\",\"layout\":\"block\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"id\":\"message\",\"text\":\"Supplier has no critical blocks for this order.\"}]}},{\"kind\":\"field\",\"id\":\"field-riscoFornecedor\",\"fieldName\":\"riscoFornecedor\"},{\"kind\":\"richContent\",\"id\":\"ticket-sla-guidance\",\"layout\":\"block\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"id\":\"text\",\"text\":\"Register enough context for triage and follow-up.\"}]}},{\"kind\":\"field\",\"id\":\"field-prioridade\",\"fieldName\":\"prioridade\"}],\"fields\":[\"ativo\",\"cargoId\",\"riscoFornecedor\",\"prioridade\"]}]}]}],\"formRules\":[{\"id\":\"employee-inactive-guidance\",\"name\":\"Employee inactive guidance\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"context\":\"notification\",\"targets\":[\"profile-status-card\"],\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"},\"effect\":{\"condition\":{\"===\":[{\"var\":\"ativo\"},false]},\"properties\":{\"title\":\"Employee inactive\",\"titleNodeId\":\"profile-status-title\",\"message\":\"Review offboarding, access revocation and justification before saving.\",\"messageNodeId\":\"profile-status-message\",\"className\":\"employee-status-card employee-status-card--warning\"},\"propertiesWhenFalse\":{\"title\":\"Employee active\",\"titleNodeId\":\"profile-status-title\",\"message\":\"Keep assignment, department and contact details current.\",\"messageNodeId\":\"profile-status-message\",\"className\":\"employee-status-card employee-status-card--ok\"}}},{\"id\":\"supplier-risk-guidance\",\"name\":\"Supplier risk guidance\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"context\":\"notification\",\"targets\":[\"supplier-risk-notice\"],\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"},\"effect\":{\"condition\":{\"in\":[{\"var\":\"riscoFornecedor\"},[\"alto\",\"critico\"]]},\"properties\":{\"message\":\"Supplier requires compliance approval before issuing the order.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--critical\"},\"propertiesWhenFalse\":{\"message\":\"Supplier has no critical blocks for this order.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--neutral\"}}},{\"id\":\"ticket-priority-copy\",\"name\":\"Ticket priority copy\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"context\":\"notification\",\"targets\":[\"ticket-sla-guidance\"],\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"},\"effect\":{\"condition\":{\"===\":[{\"var\":\"prioridade\"},\"alta\"]},\"properties\":{\"text\":\"High priority: confirm impact, SLA deadline and escalation owner.\",\"textNodeId\":\"text\",\"rootClassName\":\"ticket-sla-guidance ticket-sla-guidance--high\"},\"propertiesWhenFalse\":{\"text\":\"Register enough context for triage and follow-up.\",\"textNodeId\":\"text\",\"rootClassName\":\"ticket-sla-guidance ticket-sla-guidance--standard\"}}}]},\"diagnosticExpectations\":{\"validTargets\":[\"profile-status-card\",\"supplier-risk-notice\",\"ticket-sla-guidance\"],\"visualOnly\":true,\"formRulesStateAuthoredByRecipe\":false,\"reviewRequired\":[\"employee-inactive-guidance\",\"supplier-risk-guidance\",\"ticket-priority-copy\"]}}",
9376
9656
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.visual-block-domain-rules.json",