@praxisui/dynamic-form 9.0.4-rc.2 → 9.0.4-rc.21

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-31T10:13:34.390Z",
3
+ "generatedAt": "2026-08-04T13:04:30.466Z",
4
4
  "packageName": "@praxisui/dynamic-form",
5
- "packageVersion": "9.0.4-rc.2",
5
+ "packageVersion": "9.0.4-rc.21",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 2,
@@ -98,6 +98,24 @@
98
98
  "required": false,
99
99
  "description": "Metodo HTTP canonico do submit quando a surface publica operacao explicita"
100
100
  },
101
+ {
102
+ "name": "submitIdempotencyKey",
103
+ "type": "string | null",
104
+ "required": false,
105
+ "description": "Chave estável da tentativa de comando, preservada em retries e enviada como Idempotency-Key"
106
+ },
107
+ {
108
+ "name": "submitCorrelationId",
109
+ "type": "string | null",
110
+ "required": false,
111
+ "description": "Identificador de correlação do comando enviado como X-Correlation-Id para observabilidade ponta a ponta"
112
+ },
113
+ {
114
+ "name": "submitResourceVersion",
115
+ "type": "string | number | null",
116
+ "required": false,
117
+ "description": "Versão persistida esperada enviada como If-Match quando a ação governada exige concorrência otimista"
118
+ },
101
119
  {
102
120
  "name": "responseSchemaUrl",
103
121
  "type": "string | null",
@@ -134,7 +152,7 @@
134
152
  "name": "configPersistenceStrategy",
135
153
  "type": "'local-first' | 'input-first'",
136
154
  "required": false,
137
- "description": "Define se a configuracao local persistida ou a configuracao recebida por input tem precedencia na hidratacao.",
155
+ "description": "Define se a configuracao local persistida ou os inputs do host tem precedencia; input-first preserva inclusive o mode explicito contra preferencias persistidas.",
138
156
  "default": "local-first"
139
157
  },
140
158
  {
@@ -4098,6 +4116,24 @@
4098
4116
  ],
4099
4117
  "description": "Metodo HTTP canonico para o submit quando o backend publica operacao explicita."
4100
4118
  },
4119
+ {
4120
+ "path": "inputs.submitIdempotencyKey",
4121
+ "category": "inputs",
4122
+ "valueKind": "string",
4123
+ "description": "Identidade estavel da tentativa de comando, materializada a partir da politica execution da action."
4124
+ },
4125
+ {
4126
+ "path": "inputs.submitCorrelationId",
4127
+ "category": "inputs",
4128
+ "valueKind": "string",
4129
+ "description": "Identificador de correlacao governado para rastreabilidade ponta a ponta do comando."
4130
+ },
4131
+ {
4132
+ "path": "inputs.submitResourceVersion",
4133
+ "category": "inputs",
4134
+ "valueKind": "string",
4135
+ "description": "Versao persistida esperada, transportada como If-Match quando exigida pela action."
4136
+ },
4101
4137
  {
4102
4138
  "path": "inputs.responseSchemaUrl",
4103
4139
  "category": "inputs",
@@ -4147,6 +4183,17 @@
4147
4183
  "description": "Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.",
4148
4184
  "safetyNotes": "Nao reprocessa layouts ja persistidos ou authorados."
4149
4185
  },
4186
+ {
4187
+ "path": "inputs.configPersistenceStrategy",
4188
+ "category": "inputs",
4189
+ "valueKind": "enum",
4190
+ "allowedValues": [
4191
+ "local-first",
4192
+ "input-first"
4193
+ ],
4194
+ "description": "Define se preferências locais persistidas ou o contrato explícito do host governam a materialização corrente.",
4195
+ "safetyNotes": "Use input-first em commands e surfaces transitórias; isso impede que mode e estados operacionais antigos sobrescrevam o schema atual."
4196
+ },
4150
4197
  {
4151
4198
  "path": "inputs.layoutPolicy",
4152
4199
  "category": "inputs",
@@ -4217,6 +4264,13 @@
4217
4264
  "description": "Define como uma linha groupedCommand com um unico campo usa o espaco restante. O default medium-and-wide expande spans 6 ou 8 e preserva campos compactos.",
4218
4265
  "safetyNotes": "Use preserve quando o espaco vazio for intencional; use all apenas quando ate campos xs/sm devam ocupar a linha completa."
4219
4266
  },
4267
+ {
4268
+ "path": "inputs.layoutPolicy.groupedCommand.contextFields",
4269
+ "category": "inputs",
4270
+ "valueKind": "array",
4271
+ "description": "Campos canônicos do request cujo valor vem do contexto da surface. Eles permanecem no FormGroup e no payload, sem renderizar controles redundantes.",
4272
+ "safetyNotes": "Use somente para campos realmente hidratados por initialValue ou leitura da entidade; nunca use para esconder dados que a pessoa ainda precisa informar."
4273
+ },
4220
4274
  {
4221
4275
  "path": "inputs.layoutPolicy.detailSummary",
4222
4276
  "category": "inputs",
@@ -6105,7 +6159,7 @@
6105
6159
  "componentId": "praxis-dynamic-form",
6106
6160
  "ownerPackage": "@praxisui/dynamic-form",
6107
6161
  "configSchemaId": "FormConfig",
6108
- "manifestVersion": "1.5.0",
6162
+ "manifestVersion": "1.5.1",
6109
6163
  "runtimeInputs": [
6110
6164
  {
6111
6165
  "name": "showAiAssistant",
@@ -6137,6 +6191,15 @@
6137
6191
  ],
6138
6192
  "description": "Modo de operação"
6139
6193
  },
6194
+ {
6195
+ "name": "configPersistenceStrategy",
6196
+ "type": "string",
6197
+ "allowedValues": [
6198
+ "local-first",
6199
+ "input-first"
6200
+ ],
6201
+ "description": "Precedência entre configuração persistida e contrato explícito do host. Use input-first em dialogs e surfaces transitórias governadas por schema para preservar mode e estados operacionais publicados pelo servidor."
6202
+ },
6140
6203
  {
6141
6204
  "name": "generatedLayoutPreset",
6142
6205
  "type": "string",
@@ -6149,7 +6212,7 @@
6149
6212
  {
6150
6213
  "name": "layoutPolicy",
6151
6214
  "type": "DynamicFormLayoutPolicy",
6152
- "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. Em groupedCommand, orphanFieldExpansion governa linhas com um unico campo; medium-and-wide e o default corporativo."
6215
+ "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. Em groupedCommand, orphanFieldExpansion governa linhas com um unico campo; contextFields identifica campos do request hidratados pela surface que permanecem no payload sem criar controles redundantes."
6153
6216
  },
6154
6217
  {
6155
6218
  "name": "fieldIconPolicy",
@@ -8664,9 +8727,9 @@
8664
8727
  {
8665
8728
  "chunkIndex": 0,
8666
8729
  "chunkKind": "summary",
8667
- "content": "Component ID: praxis-dynamic-form\nSelector: praxis-dynamic-form\nFriendly Name: Praxis Dynamic Form\nDescription: Formulario dinamico com layout por secoes/linhas/colunas e campos renderizados por metadados.\nCategory: form\nLib/Package: @praxisui/dynamic-form\nTags: widget, form, configurable, hasWizard, stable\nInputs:\n - resourcePath (string)\n - resourceId (string | number)\n - initialValue (Record<string, unknown> | null)\n - editorialContext (Record<string, unknown> | null)\n - mode ('create' | 'edit' | 'view')\n - config (FormConfig)\n - schemaSource ('resource' | 'filter')\n - schemaUrl (string | null)\n - readUrl (string | null)\n - apiEndpointKey (ApiEndpoint | string | null)\n - apiUrlEntry (ApiUrlEntry | null)\n - submitUrl (string | null)\n - submitMethod ('post' | 'put' | 'patch' | null)\n - responseSchemaUrl (string | null)\n - enableCustomization (boolean)\n - showAiAssistant (boolean)\n - formId (string)\n - componentInstanceId (string)\n - configPersistenceStrategy ('local-first' | 'input-first')\n - layout (FormLayout)\n - generatedLayoutPreset ('default' | 'compactPresentation')\n - layoutPolicy (DynamicFormLayoutPolicy | null)\n - backConfig (BackConfig)\n - hooks (FormHooksLayout)\n - removeEmptyContainersOnSave (boolean)\n - reactiveValidation (boolean | null)\n - reactiveValidationDebounceMs (number | null)\n - notifyIfOutdated ('inline' | 'snackbar' | 'both' | 'none')\n - snoozeMs (number)\n - autoOpenSettingsOnOutdated (boolean)\n - readonlyModeGlobal (boolean | null)\n - disabledModeGlobal (boolean | null)\n - presentationModeGlobal (boolean | null)\n - fieldIconPolicy ('all' | 'presentation-only' | 'none')\n - visibleGlobal (boolean | null)\n - customEndpoints (EndpointConfig)\nOutputs:\n - formSubmit (FormSubmitEvent)\n - formCancel (void)\n - formReset (void)\n - configChange (FormConfig)\n - configPatchChange (DynamicFormConfigPatchChangeEvent)\n - formReady (FormReadyEvent)\n - valueChange (FormValueChangeEvent)\n - syncCompleted (SyncResult)\n - initializationError (FormInitializationError)\n - enableCustomizationChange (boolean)\n - customAction (FormCustomActionEvent)\n - actionConfirmation (FormActionConfirmationEvent)\n - schemaStatusChange ({ outdated: boolean; serverHash?: string; lastVerifiedAt?: string; formId?: string })\n",
8730
+ "content": "Component ID: praxis-dynamic-form\nSelector: praxis-dynamic-form\nFriendly Name: Praxis Dynamic Form\nDescription: Formulario dinamico com layout por secoes/linhas/colunas e campos renderizados por metadados.\nCategory: form\nLib/Package: @praxisui/dynamic-form\nTags: widget, form, configurable, hasWizard, stable\nInputs:\n - resourcePath (string)\n - resourceId (string | number)\n - initialValue (Record<string, unknown> | null)\n - editorialContext (Record<string, unknown> | null)\n - mode ('create' | 'edit' | 'view')\n - config (FormConfig)\n - schemaSource ('resource' | 'filter')\n - schemaUrl (string | null)\n - readUrl (string | null)\n - apiEndpointKey (ApiEndpoint | string | null)\n - apiUrlEntry (ApiUrlEntry | null)\n - submitUrl (string | null)\n - submitMethod ('post' | 'put' | 'patch' | null)\n - submitIdempotencyKey (string | null)\n - submitCorrelationId (string | null)\n - submitResourceVersion (string | number | null)\n - responseSchemaUrl (string | null)\n - enableCustomization (boolean)\n - showAiAssistant (boolean)\n - formId (string)\n - componentInstanceId (string)\n - configPersistenceStrategy ('local-first' | 'input-first')\n - layout (FormLayout)\n - generatedLayoutPreset ('default' | 'compactPresentation')\n - layoutPolicy (DynamicFormLayoutPolicy | null)\n - backConfig (BackConfig)\n - hooks (FormHooksLayout)\n - removeEmptyContainersOnSave (boolean)\n - reactiveValidation (boolean | null)\n - reactiveValidationDebounceMs (number | null)\n - notifyIfOutdated ('inline' | 'snackbar' | 'both' | 'none')\n - snoozeMs (number)\n - autoOpenSettingsOnOutdated (boolean)\n - readonlyModeGlobal (boolean | null)\n - disabledModeGlobal (boolean | null)\n - presentationModeGlobal (boolean | null)\n - fieldIconPolicy ('all' | 'presentation-only' | 'none')\n - visibleGlobal (boolean | null)\n - customEndpoints (EndpointConfig)\nOutputs:\n - formSubmit (FormSubmitEvent)\n - formCancel (void)\n - formReset (void)\n - configChange (FormConfig)\n - configPatchChange (DynamicFormConfigPatchChangeEvent)\n - formReady (FormReadyEvent)\n - valueChange (FormValueChangeEvent)\n - syncCompleted (SyncResult)\n - initializationError (FormInitializationError)\n - enableCustomizationChange (boolean)\n - customAction (FormCustomActionEvent)\n - actionConfirmation (FormActionConfirmationEvent)\n - schemaStatusChange ({ outdated: boolean; serverHash?: string; lastVerifiedAt?: string; formId?: string })\n",
8668
8731
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/praxis-dynamic-form.metadata.ts",
8669
- "contentHash": "f699ad0db1bb0625cf759d14b5b7ef61758c72e3aa7b3ae27f6e1ee3bcf52459",
8732
+ "contentHash": "ccb2750e1ca46377c941d3e9c7ceeeaa5aab003a7c49dd74cc4de3d123a71746",
8670
8733
  "sourceKind": "component_definition",
8671
8734
  "sourceId": "praxis-dynamic-form",
8672
8735
  "corpusVersion": "1.0.0"
@@ -8764,9 +8827,9 @@
8764
8827
  {
8765
8828
  "chunkIndex": 10,
8766
8829
  "chunkKind": "capabilities",
8767
- "content": "Schema Capability:\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n\nSchema Capability:\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n\nSchema Capability:\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n\nSchema Capability:\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n\nSchema Capability:\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n\nSchema Capability:\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n\nSchema Capability:\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n\nSchema Capability:\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n\nSchema Capability:\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n\nComponent Capability:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n\nComponent Capability:\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n\nComponent Capability:\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n\nComponent Capability:\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n\nComponent Capability:\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n\nComponent Capability:\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\n\nComponent Capability:\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n\nComponent Capability:\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n\nComponent Capability:\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n\nComponent Capability:\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n\nComponent Capability:\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n\nComponent Capability:\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n\nComponent Capability:\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n\nComponent Capability:\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n\nComponent Capability:\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n\nComponent Capability:\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n\nComponent Capability:\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n\nComponent Capability:\n - Path: inputs.generatedLayoutPreset\n Category: inputs\n Kind: enum\n Description: Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.\n\nComponent Capability:\n - Path: inputs.layoutPolicy\n Category: inputs\n Kind: object\n Description: Politica opt-in para materializar layout diretamente do schema atual sem depender de FormConfig.sections authoradas.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.preset\n Category: inputs\n Kind: enum\n Description: Preset de layout schema-driven. compactPresentation cobre detalhe read-only; groupedCommand cobre create/edit.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.persistence\n Category: inputs\n Kind: enum\n Description: Define se sections geradas sao transient ou podem virar layout authorado apos detach explicito.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.orphanFieldExpansion\n Category: inputs\n Kind: enum\n Description: Define como uma linha groupedCommand com um unico campo usa o espaco restante. O default medium-and-wide expande spans 6 ou 8 e preserva campos compactos.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.",
8830
+ "content": "Schema Capability:\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n\nSchema Capability:\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n\nSchema Capability:\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n\nSchema Capability:\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n\nSchema Capability:\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n\nSchema Capability:\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n\nSchema Capability:\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n\nSchema Capability:\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n\nSchema Capability:\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n\nComponent Capability:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n\nComponent Capability:\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n\nComponent Capability:\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n\nComponent Capability:\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n\nComponent Capability:\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n\nComponent Capability:\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\n\nComponent Capability:\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n\nComponent Capability:\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n\nComponent Capability:\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n\nComponent Capability:\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n\nComponent Capability:\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n\nComponent Capability:\n - Path: inputs.submitIdempotencyKey\n Category: inputs\n Kind: string\n Description: Identidade estavel da tentativa de comando, materializada a partir da politica execution da action.\n\nComponent Capability:\n - Path: inputs.submitCorrelationId\n Category: inputs\n Kind: string\n Description: Identificador de correlacao governado para rastreabilidade ponta a ponta do comando.\n\nComponent Capability:\n - Path: inputs.submitResourceVersion\n Category: inputs\n Kind: string\n Description: Versao persistida esperada, transportada como If-Match quando exigida pela action.\n\nComponent Capability:\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n\nComponent Capability:\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n\nComponent Capability:\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n\nComponent Capability:\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n\nComponent Capability:\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n\nComponent Capability:\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n\nComponent Capability:\n - Path: inputs.generatedLayoutPreset\n Category: inputs\n Kind: enum\n Description: Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.\n\nComponent Capability:\n - Path: inputs.configPersistenceStrategy\n Category: inputs\n Kind: enum\n Description: Define se preferências locais persistidas ou o contrato explícito do host governam a materialização corrente.\n\nComponent Capability:\n - Path: inputs.layoutPolicy\n Category: inputs\n Kind: object\n Description: Politica opt-in para materializar layout diretamente do schema atual sem depender de FormConfig.sections authoradas.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.preset\n Category: inputs\n Kind: enum\n Description: Preset de layout schema-driven. compactPresentation cobre detalhe read-only; groupedCommand cobre create/edit.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.persistence\n Category: inputs\n Kind: enum\n Description: Define se sections geradas sao transient ou podem virar layout authorado apos detach explicito.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.orphanFieldExpansion\n Category: inputs\n Kind: enum\n Description: Define como uma linha groupedCommand com um unico campo usa o espaco restante. O default medium-and-wide expande spans 6 ou 8 e preserva campos compactos.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.contextFields\n Category: inputs\n Kind: array\n Description: Campos canônicos do request cujo valor vem do contexto da surface. Eles permanecem no FormGroup e no payload, sem renderizar controles redundantes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.",
8768
8831
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8769
- "contentHash": "e89e40f565c3d190defcdd4bb253f57ddde076effae96d6b2a0c9d85aa2cc82f",
8832
+ "contentHash": "c0a08ef89a122e2e5ec62606017281c689a4e7e35662112e4ea5c00dbd4e3055",
8770
8833
  "sourceKind": "component_definition",
8771
8834
  "sourceId": "praxis-dynamic-form",
8772
8835
  "corpusVersion": "1.0.0"
@@ -8774,9 +8837,9 @@
8774
8837
  {
8775
8838
  "chunkIndex": 11,
8776
8839
  "chunkKind": "capabilities",
8777
- "content": "Component Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.widthPrecedence\n Category: inputs\n Kind: enum\n Description: Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.\n\nComponent Capability:\n - Path: inputs.fieldIconPolicy\n Category: inputs\n Kind: enum\n Description: Controla se icones prefix/suffix dos metadados aparecem em todos os modos, apenas apresentacao, ou nunca.\n\nComponent Capability:\n - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n\nComponent Capability:\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n\nComponent Capability:\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n\nComponent Capability:\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n\nComponent Capability:\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n\nComponent Capability:\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n\nComponent Capability:\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n\nComponent Capability:\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n\nComponent Capability:\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n\nComponent Capability:\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n\nComponent Capability:\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n\nComponent Capability:\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n\nComponent Capability:\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n\nComponent Capability:\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n\nComponent Capability:\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n\nComponent Capability:\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n\nComponent Capability:\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n\nComponent Capability:\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n\nComponent Capability:\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n\nComponent Capability:\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n\nComponent Capability:\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n\nComponent Capability:\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n\nComponent Capability:\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n\nComponent Capability:\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n\nComponent Capability:\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.",
8840
+ "content": "Component Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.widthPrecedence\n Category: inputs\n Kind: enum\n Description: Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.\n\nComponent Capability:\n - Path: inputs.fieldIconPolicy\n Category: inputs\n Kind: enum\n Description: Controla se icones prefix/suffix dos metadados aparecem em todos os modos, apenas apresentacao, ou nunca.\n\nComponent Capability:\n - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n\nComponent Capability:\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n\nComponent Capability:\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n\nComponent Capability:\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n\nComponent Capability:\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n\nComponent Capability:\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n\nComponent Capability:\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n\nComponent Capability:\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n\nComponent Capability:\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n\nComponent Capability:\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n\nComponent Capability:\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n\nComponent Capability:\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n\nComponent Capability:\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n\nComponent Capability:\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n\nComponent Capability:\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n\nComponent Capability:\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n\nComponent Capability:\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n\nComponent Capability:\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n\nComponent Capability:\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n\nComponent Capability:\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n\nComponent Capability:\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n\nComponent Capability:\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n\nComponent Capability:\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.",
8778
8841
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8779
- "contentHash": "3201790d3d1d9216e42135caea0bdbc3ff94f7c46bbeb54a48bb5d700c53d8ff",
8842
+ "contentHash": "e04d360e46c5cf6d9856c9b55a6f140cc7a2fa07a670575bfe1319fd5079b158",
8780
8843
  "sourceKind": "component_definition",
8781
8844
  "sourceId": "praxis-dynamic-form",
8782
8845
  "corpusVersion": "1.0.0"
@@ -8784,9 +8847,9 @@
8784
8847
  {
8785
8848
  "chunkIndex": 12,
8786
8849
  "chunkKind": "capabilities",
8787
- "content": "Component Capability:\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n\nComponent Capability:\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n\nComponent Capability:\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n\nComponent Capability:\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n\nComponent Capability:\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n\nComponent Capability:\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.\n\nComponent Capability:\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n\nComponent Capability:\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n\nComponent Capability:\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n\nComponent Capability:\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n\nComponent Capability:\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n\nComponent Capability:\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n\nComponent Capability:\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\n\nCapability Note:\n - Este catalogo descreve inputs e outputs do componente.\n\nCapability Note:\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n\nCapability Note:\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n\nCapability Note:\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n\nCapability Note:\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n\nCapability Note:\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.",
8850
+ "content": "Component Capability:\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n\nComponent Capability:\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n\nComponent Capability:\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n\nComponent Capability:\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n\nComponent Capability:\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n\nComponent Capability:\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n\nComponent Capability:\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n\nComponent Capability:\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n\nComponent Capability:\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.\n\nComponent Capability:\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n\nComponent Capability:\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n\nComponent Capability:\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n\nComponent Capability:\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n\nComponent Capability:\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n\nComponent Capability:\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n\nComponent Capability:\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\n\nCapability Note:\n - Este catalogo descreve inputs e outputs do componente.\n\nCapability Note:\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n\nCapability Note:\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n\nCapability Note:\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n\nCapability Note:\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n\nCapability Note:\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.",
8788
8851
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8789
- "contentHash": "0e9fb6b721474a0c25bacf19e9b00e48e90c790f721745ed2438da208ad4a9a0",
8852
+ "contentHash": "beda7b0e56767eb05d2104f64b078e5d582354da389421f4cc5db0853bf87a2a",
8790
8853
  "sourceKind": "component_definition",
8791
8854
  "sourceId": "praxis-dynamic-form",
8792
8855
  "corpusVersion": "1.0.0"
@@ -8794,9 +8857,9 @@
8794
8857
  {
8795
8858
  "chunkIndex": 13,
8796
8859
  "chunkKind": "authoring_manifest",
8797
- "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}]}",
8860
+ "content": "{\"operationId\":\"field.label.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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}]}",
8798
8861
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8799
- "contentHash": "1069339e236ddf0e138f8ea226eb412aa27f22a3909ea4bd5be6052a50e81b96",
8862
+ "contentHash": "5ab2756de5ade4e542439edf8d43e47d8de6c67eedd51126a9ad27c08dc25d95",
8800
8863
  "sourceKind": "component_definition",
8801
8864
  "sourceId": "praxis-dynamic-form",
8802
8865
  "corpusVersion": "1.0.0"
@@ -8804,9 +8867,9 @@
8804
8867
  {
8805
8868
  "chunkIndex": 14,
8806
8869
  "chunkKind": "authoring_manifest",
8807
- "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\":[]}",
8870
+ "content": "{\"operationId\":\"field.placeholder.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8808
8871
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8809
- "contentHash": "0477b01a94c782a5be21fc24b52e8b288ec412f2646691c573533f6c39102453",
8872
+ "contentHash": "8d2cab21bcbbfca34fa9cc7540a14612b2dbe3662d0cddd05a8359548ffb795a",
8810
8873
  "sourceKind": "component_definition",
8811
8874
  "sourceId": "praxis-dynamic-form",
8812
8875
  "corpusVersion": "1.0.0"
@@ -8814,9 +8877,9 @@
8814
8877
  {
8815
8878
  "chunkIndex": 15,
8816
8879
  "chunkKind": "authoring_manifest",
8817
- "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\":[]}",
8880
+ "content": "{\"operationId\":\"field.required.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8818
8881
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8819
- "contentHash": "768cbb12edcd84769b9995ebcca6e2b1226331718ac400f3d1b4896d1047afb8",
8882
+ "contentHash": "e2abaff892af35084a3dc81c89618cfab00426c9db6348fba9807a4deb1911ad",
8820
8883
  "sourceKind": "component_definition",
8821
8884
  "sourceId": "praxis-dynamic-form",
8822
8885
  "corpusVersion": "1.0.0"
@@ -8824,9 +8887,9 @@
8824
8887
  {
8825
8888
  "chunkIndex": 16,
8826
8889
  "chunkKind": "authoring_manifest",
8827
- "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\":[]}",
8890
+ "content": "{\"operationId\":\"field.readOnly.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8828
8891
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8829
- "contentHash": "23cfa0be804bec4f8505e91380050ad5868850885f8b339bdcb108f95d80f255",
8892
+ "contentHash": "78a77cc98f7fa2a5835418561c374b937fdfa9cfaaafda26d10df58eed6412e0",
8830
8893
  "sourceKind": "component_definition",
8831
8894
  "sourceId": "praxis-dynamic-form",
8832
8895
  "corpusVersion": "1.0.0"
@@ -8834,9 +8897,9 @@
8834
8897
  {
8835
8898
  "chunkIndex": 17,
8836
8899
  "chunkKind": "authoring_manifest",
8837
- "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\":[]}",
8900
+ "content": "{\"operationId\":\"field.disabled.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8838
8901
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8839
- "contentHash": "eab18684cd79e203cd89384fe62259ba3b6c878a46098b5c02f9d7489bc3ce1b",
8902
+ "contentHash": "1806c3a59c6c0899c814af596e8cf95c2fe34075b2428fab464ae807427b0468",
8840
8903
  "sourceKind": "component_definition",
8841
8904
  "sourceId": "praxis-dynamic-form",
8842
8905
  "corpusVersion": "1.0.0"
@@ -8844,9 +8907,9 @@
8844
8907
  {
8845
8908
  "chunkIndex": 18,
8846
8909
  "chunkKind": "authoring_manifest",
8847
- "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\":[]}",
8910
+ "content": "{\"operationId\":\"field.hidden.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8848
8911
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8849
- "contentHash": "fd7ccc9b3d68fc706573927a9fd094bb17e67f81ff799b31de12aa6a051b6680",
8912
+ "contentHash": "9a31ac7ad7f7ef7caa69145b351e1a893c9985ca310bbd80bbbe552afe005511",
8850
8913
  "sourceKind": "component_definition",
8851
8914
  "sourceId": "praxis-dynamic-form",
8852
8915
  "corpusVersion": "1.0.0"
@@ -8854,9 +8917,9 @@
8854
8917
  {
8855
8918
  "chunkIndex": 19,
8856
8919
  "chunkKind": "authoring_manifest",
8857
- "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\":[]}",
8920
+ "content": "{\"operationId\":\"field.controlType.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8858
8921
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8859
- "contentHash": "9c2027118cfb59e275c3a3908b111cbb08f11711c644cd42473c759b2b49f6a3",
8922
+ "contentHash": "16b38d6a5acd963233fc284df647518353eda00124d5723c6a2781a25a41efde",
8860
8923
  "sourceKind": "component_definition",
8861
8924
  "sourceId": "praxis-dynamic-form",
8862
8925
  "corpusVersion": "1.0.0"
@@ -8864,9 +8927,9 @@
8864
8927
  {
8865
8928
  "chunkIndex": 20,
8866
8929
  "chunkKind": "authoring_manifest",
8867
- "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\":[]}",
8930
+ "content": "{\"operationId\":\"field.optionSource.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8868
8931
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8869
- "contentHash": "c52dc52f97d5cdffe0d45b52e1d6eaed231dfc5089695487e31484374a0d87ad",
8932
+ "contentHash": "2df632d2eb8849cfd4a5a3edc0a20a6f92cc552042d20b6f921c7fa9a1764bc5",
8870
8933
  "sourceKind": "component_definition",
8871
8934
  "sourceId": "praxis-dynamic-form",
8872
8935
  "corpusVersion": "1.0.0"
@@ -8874,9 +8937,9 @@
8874
8937
  {
8875
8938
  "chunkIndex": 21,
8876
8939
  "chunkKind": "authoring_manifest",
8877
- "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\":[]}",
8940
+ "content": "{\"operationId\":\"field.local.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8878
8941
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8879
- "contentHash": "a6d619acb7a1b7d9f88eccc62930c09c29ed07b11f1a15d8661608d90a26505b",
8942
+ "contentHash": "15cb779bab2129df90c7b7b9d58e9dfc0c8527b2db5881426cb8947e22feb7b0",
8880
8943
  "sourceKind": "component_definition",
8881
8944
  "sourceId": "praxis-dynamic-form",
8882
8945
  "corpusVersion": "1.0.0"
@@ -8884,9 +8947,9 @@
8884
8947
  {
8885
8948
  "chunkIndex": 22,
8886
8949
  "chunkKind": "authoring_manifest",
8887
- "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\":[]}",
8950
+ "content": "{\"operationId\":\"field.local.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8888
8951
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8889
- "contentHash": "9b82aaa0a0ad6f25806e2d38501217f01e1436cf9badcefabbbba03f97e9e0a5",
8952
+ "contentHash": "c5bb56d5c7f57bea88c5c3c3671ff4fed00826df064c72ccc1f24a7007d7acc2",
8890
8953
  "sourceKind": "component_definition",
8891
8954
  "sourceId": "praxis-dynamic-form",
8892
8955
  "corpusVersion": "1.0.0"
@@ -8894,9 +8957,9 @@
8894
8957
  {
8895
8958
  "chunkIndex": 23,
8896
8959
  "chunkKind": "authoring_manifest",
8897
- "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\":[]}",
8960
+ "content": "{\"operationId\":\"field.submitPolicy.set\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8898
8961
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8899
- "contentHash": "7690f4f549ed630eaf9949071478c574e74087391fb10c420532dee7d89631a5",
8962
+ "contentHash": "b439cb4742d198bbf7ed3f66fa201831cdb459ed95f4e550ddb1fb7b904e7fc8",
8900
8963
  "sourceKind": "component_definition",
8901
8964
  "sourceId": "praxis-dynamic-form",
8902
8965
  "corpusVersion": "1.0.0"
@@ -8904,9 +8967,9 @@
8904
8967
  {
8905
8968
  "chunkIndex": 24,
8906
8969
  "chunkKind": "authoring_manifest",
8907
- "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\":[]}",
8970
+ "content": "{\"operationId\":\"layout.section.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8908
8971
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8909
- "contentHash": "b510d3b6b7c943230ac724f5b5d5fb06f35779d15f18298c042aa661abcd2687",
8972
+ "contentHash": "470b85071e4c1f05a57510580dd7976b0bc7d7a2621d04bc5ec6115e11d926d9",
8910
8973
  "sourceKind": "component_definition",
8911
8974
  "sourceId": "praxis-dynamic-form",
8912
8975
  "corpusVersion": "1.0.0"
@@ -8914,9 +8977,9 @@
8914
8977
  {
8915
8978
  "chunkIndex": 25,
8916
8979
  "chunkKind": "authoring_manifest",
8917
- "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\":[]}",
8980
+ "content": "{\"operationId\":\"layout.section.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8918
8981
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8919
- "contentHash": "97bc049b32c236e90d60881989deba5b228e50574e3e7eb4198dcf8b4eb94f0e",
8982
+ "contentHash": "8fed6ce4d54cfe1077f73eda19d5f213e1178c56f49600c5e5a8c2c2aef34449",
8920
8983
  "sourceKind": "component_definition",
8921
8984
  "sourceId": "praxis-dynamic-form",
8922
8985
  "corpusVersion": "1.0.0"
@@ -8924,9 +8987,9 @@
8924
8987
  {
8925
8988
  "chunkIndex": 26,
8926
8989
  "chunkKind": "authoring_manifest",
8927
- "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\":[]}",
8990
+ "content": "{\"operationId\":\"layout.row.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8928
8991
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8929
- "contentHash": "54c57565b20a4a12904c37e7fc13d9a0654e82802c93cfd25fbd116facd20822",
8992
+ "contentHash": "f05c0c9a06e78ec214f51e8f0e3fa7cf01515a218dfecf74ecf6d4a798bce445",
8930
8993
  "sourceKind": "component_definition",
8931
8994
  "sourceId": "praxis-dynamic-form",
8932
8995
  "corpusVersion": "1.0.0"
@@ -8934,9 +8997,9 @@
8934
8997
  {
8935
8998
  "chunkIndex": 27,
8936
8999
  "chunkKind": "authoring_manifest",
8937
- "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\":[]}",
9000
+ "content": "{\"operationId\":\"layout.column.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8938
9001
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8939
- "contentHash": "390cfeda1b33f8c0a9c11323a15bc14985ab5bc5fea1006695198b768a99f7a8",
9002
+ "contentHash": "d9cd7eabd59d945791cf264c5afc44bda1bd402e2f0412429aa5c4e597e79242",
8940
9003
  "sourceKind": "component_definition",
8941
9004
  "sourceId": "praxis-dynamic-form",
8942
9005
  "corpusVersion": "1.0.0"
@@ -8944,9 +9007,9 @@
8944
9007
  {
8945
9008
  "chunkIndex": 28,
8946
9009
  "chunkKind": "authoring_manifest",
8947
- "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\":[]}",
9010
+ "content": "{\"operationId\":\"layout.field.move\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8948
9011
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8949
- "contentHash": "150a29951f572a6ee723dd760a9c58ee792e3fb450835c58ed3b000256f341cc",
9012
+ "contentHash": "a1e5c2adbc9ddab9f8f837250ed25492ec563a84d5577d0ef2a920d6bad1f8d5",
8950
9013
  "sourceKind": "component_definition",
8951
9014
  "sourceId": "praxis-dynamic-form",
8952
9015
  "corpusVersion": "1.0.0"
@@ -8954,9 +9017,9 @@
8954
9017
  {
8955
9018
  "chunkIndex": 29,
8956
9019
  "chunkKind": "authoring_manifest",
8957
- "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\":[]}",
9020
+ "content": "{\"operationId\":\"layout.visualBlock.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8958
9021
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8959
- "contentHash": "e07ba18ac5af464456827c23c580456501bf2e6c389f8cf51a47e31bd602637c",
9022
+ "contentHash": "cbe6ba8952330f3a8ac47a84928ff9a3b2ba008a491bafe4239211e3ebbcc375",
8960
9023
  "sourceKind": "component_definition",
8961
9024
  "sourceId": "praxis-dynamic-form",
8962
9025
  "corpusVersion": "1.0.0"
@@ -8964,9 +9027,9 @@
8964
9027
  {
8965
9028
  "chunkIndex": 30,
8966
9029
  "chunkKind": "authoring_manifest",
8967
- "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\":[]}",
9030
+ "content": "{\"operationId\":\"layout.visualBlock.update\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8968
9031
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8969
- "contentHash": "bbf4bb87bf03170168dca18f787cdf0996cc7e6c6dbfc5e28c5c753f340beb6f",
9032
+ "contentHash": "13bfae1f36b994cbb2e962bd881f631028ab4d3f99fbd3d55443994d9c14cba8",
8970
9033
  "sourceKind": "component_definition",
8971
9034
  "sourceId": "praxis-dynamic-form",
8972
9035
  "corpusVersion": "1.0.0"
@@ -8974,9 +9037,9 @@
8974
9037
  {
8975
9038
  "chunkIndex": 31,
8976
9039
  "chunkKind": "authoring_manifest",
8977
- "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\":[]}",
9040
+ "content": "{\"operationId\":\"layout.visualBlock.move\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8978
9041
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8979
- "contentHash": "21110bbb3d65f1324014244526a643e0905ad48788628305539c1ed351409486",
9042
+ "contentHash": "78238511e836be4bd95387ed55c05387cce5cfa6083e8f52bc86d9567c15e65f",
8980
9043
  "sourceKind": "component_definition",
8981
9044
  "sourceId": "praxis-dynamic-form",
8982
9045
  "corpusVersion": "1.0.0"
@@ -8984,9 +9047,9 @@
8984
9047
  {
8985
9048
  "chunkIndex": 32,
8986
9049
  "chunkKind": "authoring_manifest",
8987
- "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\":[]}",
9050
+ "content": "{\"operationId\":\"layout.visualBlock.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8988
9051
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8989
- "contentHash": "7e0c83bf9eafbe7c8e67e661e65f5237cd58b5662eb3cbb9d0dce2d4669379ce",
9052
+ "contentHash": "873c258496ce36872ce2f142efbe787275001cd6959cea79783e0974c2fafc3c",
8990
9053
  "sourceKind": "component_definition",
8991
9054
  "sourceId": "praxis-dynamic-form",
8992
9055
  "corpusVersion": "1.0.0"
@@ -8994,9 +9057,9 @@
8994
9057
  {
8995
9058
  "chunkIndex": 33,
8996
9059
  "chunkKind": "authoring_manifest",
8997
- "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\":[]}",
9060
+ "content": "{\"operationId\":\"rule.visibility.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
8998
9061
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8999
- "contentHash": "7bfba2157490565149c01e705da2e9b21aea211df6cdeccafa7ad961e340431a",
9062
+ "contentHash": "7a4e925ff4dba25eb0b351e29e199706a43376e6d58073e156973d6ab6b8763a",
9000
9063
  "sourceKind": "component_definition",
9001
9064
  "sourceId": "praxis-dynamic-form",
9002
9065
  "corpusVersion": "1.0.0"
@@ -9004,9 +9067,9 @@
9004
9067
  {
9005
9068
  "chunkIndex": 34,
9006
9069
  "chunkKind": "authoring_manifest",
9007
- "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\":[]}",
9070
+ "content": "{\"operationId\":\"rule.validation.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
9008
9071
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9009
- "contentHash": "110e0c2816de7abcc55ce2a520c8984032de19b1bf187284cefbf0efe5029e6b",
9072
+ "contentHash": "a41ed62a1df5ab1b991ffff291d5660eeeb35581ceed058b7de77c2dee7df24f",
9010
9073
  "sourceKind": "component_definition",
9011
9074
  "sourceId": "praxis-dynamic-form",
9012
9075
  "corpusVersion": "1.0.0"
@@ -9014,9 +9077,9 @@
9014
9077
  {
9015
9078
  "chunkIndex": 35,
9016
9079
  "chunkKind": "authoring_manifest",
9017
- "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\":[]}",
9080
+ "content": "{\"operationId\":\"rule.computedValue.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
9018
9081
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9019
- "contentHash": "cca61e9b3a9a34d256349d84acc44846d1a648d40944cfb26b714b7df7020db1",
9082
+ "contentHash": "88f59c3add6ca72d30aadaf674579861f261289edcf33b7b696cc613460099c9",
9020
9083
  "sourceKind": "component_definition",
9021
9084
  "sourceId": "praxis-dynamic-form",
9022
9085
  "corpusVersion": "1.0.0"
@@ -9024,9 +9087,9 @@
9024
9087
  {
9025
9088
  "chunkIndex": 36,
9026
9089
  "chunkKind": "authoring_manifest",
9027
- "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\":[]}",
9090
+ "content": "{\"operationId\":\"rule.visualBlockGuidance.add\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
9028
9091
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9029
- "contentHash": "37e2212da7ed1a5b190ba5b342dfb6e6e0ddf1acedae2b29e754327a4481a4ff",
9092
+ "contentHash": "82d234a4fbaea6f5d9d01717eabd641a542e6f6b223343fa480370591c50e9d4",
9030
9093
  "sourceKind": "component_definition",
9031
9094
  "sourceId": "praxis-dynamic-form",
9032
9095
  "corpusVersion": "1.0.0"
@@ -9034,9 +9097,9 @@
9034
9097
  {
9035
9098
  "chunkIndex": 37,
9036
9099
  "chunkKind": "authoring_manifest",
9037
- "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\":[]}",
9100
+ "content": "{\"operationId\":\"rule.remove\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
9038
9101
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9039
- "contentHash": "fcaffdd1b20a6a3a7c69b16579e246363b6ffaf47e8441fb3e783694f09b52c8",
9102
+ "contentHash": "7eb91266aa54e0fff6a33a3887d9a2ce52c40a1aea2daeecac32c3e5b56371af",
9040
9103
  "sourceKind": "component_definition",
9041
9104
  "sourceId": "praxis-dynamic-form",
9042
9105
  "corpusVersion": "1.0.0"
@@ -9044,9 +9107,9 @@
9044
9107
  {
9045
9108
  "chunkIndex": 38,
9046
9109
  "chunkKind": "authoring_manifest",
9047
- "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\":[]}",
9110
+ "content": "{\"operationId\":\"action.submit.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
9048
9111
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9049
- "contentHash": "006445ac4a1120167679449bb2d27b56437d48b665bd95d6c644cb39ff44cebb",
9112
+ "contentHash": "23544b1ce1da78b72f351675029141fac19378046615bf80dcf3421c3e394ea1",
9050
9113
  "sourceKind": "component_definition",
9051
9114
  "sourceId": "praxis-dynamic-form",
9052
9115
  "corpusVersion": "1.0.0"
@@ -9054,9 +9117,9 @@
9054
9117
  {
9055
9118
  "chunkIndex": 39,
9056
9119
  "chunkKind": "authoring_manifest",
9057
- "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\":[]}",
9120
+ "content": "{\"operationId\":\"action.cancel.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
9058
9121
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9059
- "contentHash": "3dc79ee3d575906777697268de0dfca7d12fc6d8b8e88f51d84513cd627c02d9",
9122
+ "contentHash": "430e0aee48603ad7e1aa601948e65a3d8ee4c1f2f479c29b5b2811f5b8009924",
9060
9123
  "sourceKind": "component_definition",
9061
9124
  "sourceId": "praxis-dynamic-form",
9062
9125
  "corpusVersion": "1.0.0"
@@ -9064,9 +9127,9 @@
9064
9127
  {
9065
9128
  "chunkIndex": 40,
9066
9129
  "chunkKind": "authoring_manifest",
9067
- "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\":[]}",
9130
+ "content": "{\"operationId\":\"action.reset.configure\",\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":[]}",
9068
9131
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9069
- "contentHash": "e681f2d9c4ea4f1a58b5126a9c0d369507da74d658a9550c8545724cd6859487",
9132
+ "contentHash": "93efde779e55f401f5ee0ba2861acc154336c782fda7df1e4d8652216e7cf906",
9070
9133
  "sourceKind": "component_definition",
9071
9134
  "sourceId": "praxis-dynamic-form",
9072
9135
  "corpusVersion": "1.0.0"
@@ -9074,9 +9137,9 @@
9074
9137
  {
9075
9138
  "chunkIndex": 41,
9076
9139
  "chunkKind": "authoring_manifest",
9077
- "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"identity\"}",
9140
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"identity\"}",
9078
9141
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9079
- "contentHash": "9b87db909a9f1436c70294714f19e567b1e83df02c306bba28f6f25f9e8252db",
9142
+ "contentHash": "bf161127699c3d4025d7a950ddd508ca7b850e35b5955ce24ee01c05259886e7",
9080
9143
  "sourceKind": "component_definition",
9081
9144
  "sourceId": "praxis-dynamic-form",
9082
9145
  "corpusVersion": "1.0.0"
@@ -9084,9 +9147,9 @@
9084
9147
  {
9085
9148
  "chunkIndex": 42,
9086
9149
  "chunkKind": "authoring_manifest",
9087
- "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. Em groupedCommand, orphanFieldExpansion governa linhas com um unico campo; medium-and-wide e o default corporativo.\"},{\"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\"}]}",
9150
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\":\"configPersistenceStrategy\",\"type\":\"string\",\"allowedValues\":[\"local-first\",\"input-first\"],\"description\":\"Precedência entre configuração persistida e contrato explícito do host. Use input-first em dialogs e surfaces transitórias governadas por schema para preservar mode e estados operacionais publicados pelo servidor.\"},{\"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. Em groupedCommand, orphanFieldExpansion governa linhas com um unico campo; contextFields identifica campos do request hidratados pela surface que permanecem no payload sem criar controles redundantes.\"},{\"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\"}]}",
9088
9151
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9089
- "contentHash": "deda977596334922324e92095855ac5ec03b6e3cb069e7e4c6770f6b258dec1c",
9152
+ "contentHash": "4a45e150cfc13e1e71c8e0d59c4ffb1201a6a4e8e72cb3ded66ab2ace7cb1069",
9090
9153
  "sourceKind": "component_definition",
9091
9154
  "sourceId": "praxis-dynamic-form",
9092
9155
  "corpusVersion": "1.0.0"
@@ -9094,9 +9157,9 @@
9094
9157
  {
9095
9158
  "chunkIndex": 43,
9096
9159
  "chunkKind": "authoring_manifest",
9097
- "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\"}]}",
9160
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\"}]}",
9098
9161
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9099
- "contentHash": "7d8180f5b72dd55ee81f68c27177cbc000c08ecf4aee2a62f96a17bff0ea4f8b",
9162
+ "contentHash": "bf737f9e4af6cdde822ccf87b3feb7983eda72c10421218cdb4daf4c5a34a83a",
9100
9163
  "sourceKind": "component_definition",
9101
9164
  "sourceId": "praxis-dynamic-form",
9102
9165
  "corpusVersion": "1.0.0"
@@ -9104,9 +9167,9 @@
9104
9167
  {
9105
9168
  "chunkIndex": 44,
9106
9169
  "chunkKind": "authoring_manifest",
9107
- "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\"]}]}",
9170
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\"]}]}",
9108
9171
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9109
- "contentHash": "303ff29486849a61c1b509b6c1410fc3416a827fed09cf55d274f365ecebc1bc",
9172
+ "contentHash": "e23f9537159b54d7cd52792980f978492481b6248d30c9dc8422368937ffeb2b",
9110
9173
  "sourceKind": "component_definition",
9111
9174
  "sourceId": "praxis-dynamic-form",
9112
9175
  "corpusVersion": "1.0.0"
@@ -9114,9 +9177,9 @@
9114
9177
  {
9115
9178
  "chunkIndex": 45,
9116
9179
  "chunkKind": "authoring_manifest",
9117
- "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\"]}]}",
9180
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\"]}]}",
9118
9181
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9119
- "contentHash": "00f4147198136ee6914770808c98047b839e5a33da8607472a8331d87e7a36a6",
9182
+ "contentHash": "42c23f466e9aed9cfe527bc90ef850de4c83c3da12e37517fc220c99a06b6319",
9120
9183
  "sourceKind": "component_definition",
9121
9184
  "sourceId": "praxis-dynamic-form",
9122
9185
  "corpusVersion": "1.0.0"
@@ -9124,9 +9187,9 @@
9124
9187
  {
9125
9188
  "chunkIndex": 46,
9126
9189
  "chunkKind": "authoring_manifest",
9127
- "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\"]}]}",
9190
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\"]}]}",
9128
9191
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9129
- "contentHash": "214915fce646b82e90adfcf29bc3de187224140628f757a0832d717c63ae1115",
9192
+ "contentHash": "26d2bed02ddbff3bbba31fe4c6c313770df2491e34471f7931e08d127d937e36",
9130
9193
  "sourceKind": "component_definition",
9131
9194
  "sourceId": "praxis-dynamic-form",
9132
9195
  "corpusVersion": "1.0.0"
@@ -9134,9 +9197,9 @@
9134
9197
  {
9135
9198
  "chunkIndex": 47,
9136
9199
  "chunkKind": "authoring_manifest",
9137
- "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\"]}]}",
9200
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\"]}]}",
9138
9201
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9139
- "contentHash": "db95bed57633dfdc895ba3cee1d86e65f999ed0eb9ca3e9f830bb4f8b36bfc5c",
9202
+ "contentHash": "502ecada2fefb02d26395c60b7dc2708c8903029889924faf7fedb0907221099",
9140
9203
  "sourceKind": "component_definition",
9141
9204
  "sourceId": "praxis-dynamic-form",
9142
9205
  "corpusVersion": "1.0.0"
@@ -9144,9 +9207,9 @@
9144
9207
  {
9145
9208
  "chunkIndex": 48,
9146
9209
  "chunkKind": "authoring_manifest",
9147
- "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\"]}]}",
9210
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\"]}]}",
9148
9211
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9149
- "contentHash": "793df38d50e22391a84ffb79af38bd267b95d17a4c91e528ea4a4f825a7650b9",
9212
+ "contentHash": "bd8977546080177ca971347e2fd138cd419481d1b62747755807d4dff9101533",
9150
9213
  "sourceKind": "component_definition",
9151
9214
  "sourceId": "praxis-dynamic-form",
9152
9215
  "corpusVersion": "1.0.0"
@@ -9154,9 +9217,9 @@
9154
9217
  {
9155
9218
  "chunkIndex": 49,
9156
9219
  "chunkKind": "authoring_manifest",
9157
- "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.\"}]}",
9220
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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.\"}]}",
9158
9221
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9159
- "contentHash": "69329b63e8a8ee30ed74893c3e950e87f34957a945989b7cae4a72c1a1bd6047",
9222
+ "contentHash": "745087ecc107cfe196c3b263054d4973f335a335c47166ad4263290941dca41a",
9160
9223
  "sourceKind": "component_definition",
9161
9224
  "sourceId": "praxis-dynamic-form",
9162
9225
  "corpusVersion": "1.0.0"
@@ -9164,9 +9227,9 @@
9164
9227
  {
9165
9228
  "chunkIndex": 50,
9166
9229
  "chunkKind": "authoring_manifest",
9167
- "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\"]}",
9230
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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\"]}",
9168
9231
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9169
- "contentHash": "e7164e2e190a2324020f918879e0070e6d0ee59a77497dc9dca831708315b087",
9232
+ "contentHash": "96172ce622f3781a11a270a37b8dc1416e364acc359c63810255308a9fb8c86a",
9170
9233
  "sourceKind": "component_definition",
9171
9234
  "sourceId": "praxis-dynamic-form",
9172
9235
  "corpusVersion": "1.0.0"
@@ -9174,9 +9237,9 @@
9174
9237
  {
9175
9238
  "chunkIndex": 51,
9176
9239
  "chunkKind": "authoring_manifest",
9177
- "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}]}",
9240
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.1\",\"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}]}",
9178
9241
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
9179
- "contentHash": "db9e8a0ec84c1cb6035dc3b6491ce902f9b223cd48c1802103a5c26c40987dfd",
9242
+ "contentHash": "f773e45c3c4f0d13c847ce733454b46d8e0c5339cfa0b0a548d33eb6f00de658",
9180
9243
  "sourceKind": "component_definition",
9181
9244
  "sourceId": "praxis-dynamic-form",
9182
9245
  "corpusVersion": "1.0.0"
@@ -13460,6 +13523,24 @@
13460
13523
  ],
13461
13524
  "description": "Metodo HTTP canonico para o submit quando o backend publica operacao explicita."
13462
13525
  },
13526
+ {
13527
+ "path": "inputs.submitIdempotencyKey",
13528
+ "category": "inputs",
13529
+ "valueKind": "string",
13530
+ "description": "Identidade estavel da tentativa de comando, materializada a partir da politica execution da action."
13531
+ },
13532
+ {
13533
+ "path": "inputs.submitCorrelationId",
13534
+ "category": "inputs",
13535
+ "valueKind": "string",
13536
+ "description": "Identificador de correlacao governado para rastreabilidade ponta a ponta do comando."
13537
+ },
13538
+ {
13539
+ "path": "inputs.submitResourceVersion",
13540
+ "category": "inputs",
13541
+ "valueKind": "string",
13542
+ "description": "Versao persistida esperada, transportada como If-Match quando exigida pela action."
13543
+ },
13463
13544
  {
13464
13545
  "path": "inputs.responseSchemaUrl",
13465
13546
  "category": "inputs",
@@ -13509,6 +13590,17 @@
13509
13590
  "description": "Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.",
13510
13591
  "safetyNotes": "Nao reprocessa layouts ja persistidos ou authorados."
13511
13592
  },
13593
+ {
13594
+ "path": "inputs.configPersistenceStrategy",
13595
+ "category": "inputs",
13596
+ "valueKind": "enum",
13597
+ "allowedValues": [
13598
+ "local-first",
13599
+ "input-first"
13600
+ ],
13601
+ "description": "Define se preferências locais persistidas ou o contrato explícito do host governam a materialização corrente.",
13602
+ "safetyNotes": "Use input-first em commands e surfaces transitórias; isso impede que mode e estados operacionais antigos sobrescrevam o schema atual."
13603
+ },
13512
13604
  {
13513
13605
  "path": "inputs.layoutPolicy",
13514
13606
  "category": "inputs",
@@ -13579,6 +13671,13 @@
13579
13671
  "description": "Define como uma linha groupedCommand com um unico campo usa o espaco restante. O default medium-and-wide expande spans 6 ou 8 e preserva campos compactos.",
13580
13672
  "safetyNotes": "Use preserve quando o espaco vazio for intencional; use all apenas quando ate campos xs/sm devam ocupar a linha completa."
13581
13673
  },
13674
+ {
13675
+ "path": "inputs.layoutPolicy.groupedCommand.contextFields",
13676
+ "category": "inputs",
13677
+ "valueKind": "array",
13678
+ "description": "Campos canônicos do request cujo valor vem do contexto da surface. Eles permanecem no FormGroup e no payload, sem renderizar controles redundantes.",
13679
+ "safetyNotes": "Use somente para campos realmente hidratados por initialValue ou leitura da entidade; nunca use para esconder dados que a pessoa ainda precisa informar."
13680
+ },
13582
13681
  {
13583
13682
  "path": "inputs.layoutPolicy.detailSummary",
13584
13683
  "category": "inputs",
@@ -15566,9 +15665,9 @@
15566
15665
  {
15567
15666
  "chunkIndex": 10,
15568
15667
  "chunkKind": "capabilities",
15569
- "content": "Schema Capability:\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n\nSchema Capability:\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n\nSchema Capability:\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n\nSchema Capability:\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n\nSchema Capability:\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n\nSchema Capability:\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n\nSchema Capability:\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n\nSchema Capability:\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n\nSchema Capability:\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n\nComponent Capability:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n\nComponent Capability:\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n\nComponent Capability:\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n\nComponent Capability:\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n\nComponent Capability:\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n\nComponent Capability:\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\n\nComponent Capability:\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n\nComponent Capability:\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n\nComponent Capability:\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n\nComponent Capability:\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n\nComponent Capability:\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n\nComponent Capability:\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n\nComponent Capability:\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n\nComponent Capability:\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n\nComponent Capability:\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n\nComponent Capability:\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n\nComponent Capability:\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n\nComponent Capability:\n - Path: inputs.generatedLayoutPreset\n Category: inputs\n Kind: enum\n Description: Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.\n\nComponent Capability:\n - Path: inputs.layoutPolicy\n Category: inputs\n Kind: object\n Description: Politica opt-in para materializar layout diretamente do schema atual sem depender de FormConfig.sections authoradas.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.preset\n Category: inputs\n Kind: enum\n Description: Preset de layout schema-driven. compactPresentation cobre detalhe read-only; groupedCommand cobre create/edit.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.persistence\n Category: inputs\n Kind: enum\n Description: Define se sections geradas sao transient ou podem virar layout authorado apos detach explicito.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.orphanFieldExpansion\n Category: inputs\n Kind: enum\n Description: Define como uma linha groupedCommand com um unico campo usa o espaco restante. O default medium-and-wide expande spans 6 ou 8 e preserva campos compactos.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.",
15668
+ "content": "Schema Capability:\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n\nSchema Capability:\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n\nSchema Capability:\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n\nSchema Capability:\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n\nSchema Capability:\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n\nSchema Capability:\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n\nSchema Capability:\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n\nSchema Capability:\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n\nSchema Capability:\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n\nComponent Capability:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n\nComponent Capability:\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n\nComponent Capability:\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n\nComponent Capability:\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n\nComponent Capability:\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n\nComponent Capability:\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\n\nComponent Capability:\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n\nComponent Capability:\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n\nComponent Capability:\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n\nComponent Capability:\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n\nComponent Capability:\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n\nComponent Capability:\n - Path: inputs.submitIdempotencyKey\n Category: inputs\n Kind: string\n Description: Identidade estavel da tentativa de comando, materializada a partir da politica execution da action.\n\nComponent Capability:\n - Path: inputs.submitCorrelationId\n Category: inputs\n Kind: string\n Description: Identificador de correlacao governado para rastreabilidade ponta a ponta do comando.\n\nComponent Capability:\n - Path: inputs.submitResourceVersion\n Category: inputs\n Kind: string\n Description: Versao persistida esperada, transportada como If-Match quando exigida pela action.\n\nComponent Capability:\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n\nComponent Capability:\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n\nComponent Capability:\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n\nComponent Capability:\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n\nComponent Capability:\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n\nComponent Capability:\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n\nComponent Capability:\n - Path: inputs.generatedLayoutPreset\n Category: inputs\n Kind: enum\n Description: Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.\n\nComponent Capability:\n - Path: inputs.configPersistenceStrategy\n Category: inputs\n Kind: enum\n Description: Define se preferências locais persistidas ou o contrato explícito do host governam a materialização corrente.\n\nComponent Capability:\n - Path: inputs.layoutPolicy\n Category: inputs\n Kind: object\n Description: Politica opt-in para materializar layout diretamente do schema atual sem depender de FormConfig.sections authoradas.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.preset\n Category: inputs\n Kind: enum\n Description: Preset de layout schema-driven. compactPresentation cobre detalhe read-only; groupedCommand cobre create/edit.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.persistence\n Category: inputs\n Kind: enum\n Description: Define se sections geradas sao transient ou podem virar layout authorado apos detach explicito.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.orphanFieldExpansion\n Category: inputs\n Kind: enum\n Description: Define como uma linha groupedCommand com um unico campo usa o espaco restante. O default medium-and-wide expande spans 6 ou 8 e preserva campos compactos.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.groupedCommand.contextFields\n Category: inputs\n Kind: array\n Description: Campos canônicos do request cujo valor vem do contexto da surface. Eles permanecem no FormGroup e no payload, sem renderizar controles redundantes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.",
15570
15669
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15571
- "contentHash": "e89e40f565c3d190defcdd4bb253f57ddde076effae96d6b2a0c9d85aa2cc82f",
15670
+ "contentHash": "c0a08ef89a122e2e5ec62606017281c689a4e7e35662112e4ea5c00dbd4e3055",
15572
15671
  "sourceKind": "component_definition",
15573
15672
  "sourceId": "praxis-filter-form",
15574
15673
  "corpusVersion": "1.0.0"
@@ -15576,9 +15675,9 @@
15576
15675
  {
15577
15676
  "chunkIndex": 11,
15578
15677
  "chunkKind": "capabilities",
15579
- "content": "Component Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.widthPrecedence\n Category: inputs\n Kind: enum\n Description: Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.\n\nComponent Capability:\n - Path: inputs.fieldIconPolicy\n Category: inputs\n Kind: enum\n Description: Controla se icones prefix/suffix dos metadados aparecem em todos os modos, apenas apresentacao, ou nunca.\n\nComponent Capability:\n - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n\nComponent Capability:\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n\nComponent Capability:\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n\nComponent Capability:\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n\nComponent Capability:\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n\nComponent Capability:\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n\nComponent Capability:\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n\nComponent Capability:\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n\nComponent Capability:\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n\nComponent Capability:\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n\nComponent Capability:\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n\nComponent Capability:\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n\nComponent Capability:\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n\nComponent Capability:\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n\nComponent Capability:\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n\nComponent Capability:\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n\nComponent Capability:\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n\nComponent Capability:\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n\nComponent Capability:\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n\nComponent Capability:\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n\nComponent Capability:\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n\nComponent Capability:\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n\nComponent Capability:\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n\nComponent Capability:\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n\nComponent Capability:\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.",
15678
+ "content": "Component Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.widthPrecedence\n Category: inputs\n Kind: enum\n Description: Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.\n\nComponent Capability:\n - Path: inputs.fieldIconPolicy\n Category: inputs\n Kind: enum\n Description: Controla se icones prefix/suffix dos metadados aparecem em todos os modos, apenas apresentacao, ou nunca.\n\nComponent Capability:\n - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n\nComponent Capability:\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n\nComponent Capability:\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n\nComponent Capability:\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n\nComponent Capability:\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n\nComponent Capability:\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n\nComponent Capability:\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n\nComponent Capability:\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n\nComponent Capability:\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n\nComponent Capability:\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n\nComponent Capability:\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n\nComponent Capability:\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n\nComponent Capability:\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n\nComponent Capability:\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n\nComponent Capability:\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n\nComponent Capability:\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n\nComponent Capability:\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n\nComponent Capability:\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n\nComponent Capability:\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n\nComponent Capability:\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n\nComponent Capability:\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n\nComponent Capability:\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n\nComponent Capability:\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.",
15580
15679
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15581
- "contentHash": "3201790d3d1d9216e42135caea0bdbc3ff94f7c46bbeb54a48bb5d700c53d8ff",
15680
+ "contentHash": "e04d360e46c5cf6d9856c9b55a6f140cc7a2fa07a670575bfe1319fd5079b158",
15582
15681
  "sourceKind": "component_definition",
15583
15682
  "sourceId": "praxis-filter-form",
15584
15683
  "corpusVersion": "1.0.0"
@@ -15586,9 +15685,9 @@
15586
15685
  {
15587
15686
  "chunkIndex": 12,
15588
15687
  "chunkKind": "capabilities",
15589
- "content": "Component Capability:\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n\nComponent Capability:\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n\nComponent Capability:\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n\nComponent Capability:\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n\nComponent Capability:\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n\nComponent Capability:\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.\n\nComponent Capability:\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n\nComponent Capability:\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n\nComponent Capability:\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n\nComponent Capability:\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n\nComponent Capability:\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n\nComponent Capability:\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n\nComponent Capability:\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\n\nCapability Note:\n - Este catalogo descreve inputs e outputs do componente.\n\nCapability Note:\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n\nCapability Note:\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n\nCapability Note:\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n\nCapability Note:\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n\nCapability Note:\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.",
15688
+ "content": "Component Capability:\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n\nComponent Capability:\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n\nComponent Capability:\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n\nComponent Capability:\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n\nComponent Capability:\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n\nComponent Capability:\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n\nComponent Capability:\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n\nComponent Capability:\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n\nComponent Capability:\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.\n\nComponent Capability:\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n\nComponent Capability:\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n\nComponent Capability:\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n\nComponent Capability:\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n\nComponent Capability:\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n\nComponent Capability:\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n\nComponent Capability:\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\n\nCapability Note:\n - Este catalogo descreve inputs e outputs do componente.\n\nCapability Note:\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n\nCapability Note:\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n\nCapability Note:\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n\nCapability Note:\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n\nCapability Note:\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.",
15590
15689
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15591
- "contentHash": "0e9fb6b721474a0c25bacf19e9b00e48e90c790f721745ed2438da208ad4a9a0",
15690
+ "contentHash": "beda7b0e56767eb05d2104f64b078e5d582354da389421f4cc5db0853bf87a2a",
15592
15691
  "sourceKind": "component_definition",
15593
15692
  "sourceId": "praxis-filter-form",
15594
15693
  "corpusVersion": "1.0.0"