@praxisui/dynamic-form 9.0.0-beta.25 → 9.0.0-beta.27
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-
|
|
3
|
+
"generatedAt": "2026-07-01T19:52:01.852Z",
|
|
4
4
|
"packageName": "@praxisui/dynamic-form",
|
|
5
|
-
"packageVersion": "9.0.0-beta.
|
|
5
|
+
"packageVersion": "9.0.0-beta.27",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 2,
|
|
@@ -3516,6 +3516,38 @@
|
|
|
3516
3516
|
"remover do filtro"
|
|
3517
3517
|
]
|
|
3518
3518
|
},
|
|
3519
|
+
{
|
|
3520
|
+
"path": "fieldMetadata[].fieldAccess",
|
|
3521
|
+
"category": "behavior",
|
|
3522
|
+
"valueKind": "object",
|
|
3523
|
+
"description": "Politica canonica de UX para visibilidade/edicao por authorities publicadas pelo backend.",
|
|
3524
|
+
"safetyNotes": "Nao e barreira de seguranca. O backend continua responsavel por filtrar dados sensiveis e validar payloads.",
|
|
3525
|
+
"intentExamples": [
|
|
3526
|
+
"campo visivel somente para RH",
|
|
3527
|
+
"bloquear edicao por perfil corporativo"
|
|
3528
|
+
]
|
|
3529
|
+
},
|
|
3530
|
+
{
|
|
3531
|
+
"path": "fieldMetadata[].fieldAccess.visibleForAuthorities",
|
|
3532
|
+
"category": "behavior",
|
|
3533
|
+
"valueKind": "array",
|
|
3534
|
+
"description": "Authorities que podem ver o campo no runtime quando a UX tiver claims explicitas.",
|
|
3535
|
+
"safetyNotes": "Nao inferir a partir de capabilities sem mapeamento canonico publicado."
|
|
3536
|
+
},
|
|
3537
|
+
{
|
|
3538
|
+
"path": "fieldMetadata[].fieldAccess.editableForAuthorities",
|
|
3539
|
+
"category": "behavior",
|
|
3540
|
+
"valueKind": "array",
|
|
3541
|
+
"description": "Authorities que podem editar o campo no runtime quando a UX tiver claims explicitas.",
|
|
3542
|
+
"safetyNotes": "Edicao concedida implica materializacao visivel no runtime; a validacao final permanece no backend."
|
|
3543
|
+
},
|
|
3544
|
+
{
|
|
3545
|
+
"path": "fieldMetadata[].fieldAccess.reason",
|
|
3546
|
+
"category": "misc",
|
|
3547
|
+
"valueKind": "string",
|
|
3548
|
+
"description": "Justificativa explicativa/auditavel da politica de acesso do campo.",
|
|
3549
|
+
"safetyNotes": "Reason sozinho nao deve decidir acesso nem revelar detalhes sensiveis para usuarios sem permissao."
|
|
3550
|
+
},
|
|
3519
3551
|
{
|
|
3520
3552
|
"path": "fieldMetadata[].dependencyFields",
|
|
3521
3553
|
"category": "dependency",
|
|
@@ -5564,7 +5596,7 @@
|
|
|
5564
5596
|
}
|
|
5565
5597
|
]
|
|
5566
5598
|
},
|
|
5567
|
-
"safetyNotes": "
|
|
5599
|
+
"safetyNotes": "Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao."
|
|
5568
5600
|
},
|
|
5569
5601
|
{
|
|
5570
5602
|
"id": "rule.remove",
|
|
@@ -5633,7 +5665,14 @@
|
|
|
5633
5665
|
"{{params.targetField}}"
|
|
5634
5666
|
],
|
|
5635
5667
|
"effect": {
|
|
5636
|
-
"condition":
|
|
5668
|
+
"condition": {
|
|
5669
|
+
"==": [
|
|
5670
|
+
{
|
|
5671
|
+
"var": "{{params.triggerField}}"
|
|
5672
|
+
},
|
|
5673
|
+
"{{params.conditionValue}}"
|
|
5674
|
+
]
|
|
5675
|
+
},
|
|
5637
5676
|
"properties": {
|
|
5638
5677
|
"hidden": "{{params.effectType === 'visibility' ? false : undefined}}",
|
|
5639
5678
|
"required": "{{params.effectType === 'required' ? true : undefined}}",
|
|
@@ -5669,7 +5708,7 @@
|
|
|
5669
5708
|
{
|
|
5670
5709
|
"name": "condition",
|
|
5671
5710
|
"type": "STRING",
|
|
5672
|
-
"description": "
|
|
5711
|
+
"description": "Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \"and\": [{ \">\": [{ \"var\": \"idade\" }, 18] }, { \"==\": [{ \"var\": \"possuiHabilitacao\" }, true] }] })"
|
|
5673
5712
|
},
|
|
5674
5713
|
{
|
|
5675
5714
|
"name": "targetField",
|
|
@@ -8327,9 +8366,9 @@
|
|
|
8327
8366
|
{
|
|
8328
8367
|
"chunkIndex": 1,
|
|
8329
8368
|
"chunkKind": "capabilities",
|
|
8330
|
-
"content": "Schema Capabilities:\n - Path: metadata.version\n Category: metadata\n Kind: string\n Description: Versão da configuração do formulário para controle de migração.\n - Path: metadata.source\n Category: metadata\n Kind: enum\n Description: Origem da configuração do formulário.\n - Path: metadata.lastUpdated\n Category: metadata\n Kind: string\n Description: Timestamp da última atualização da configuração (ISO-8601).\n - Path: metadata.schemaId\n Category: metadata\n Kind: string\n Description: ID do schema de origem para reconciliação no servidor.\n - Path: metadata.schemaContext\n Category: metadata\n Kind: object\n Description: Contexto do schema usado para compor o formulário.\n - Path: metadata.schemaContext.path\n Category: metadata\n Kind: string\n Description: Path do schema de origem.\n - Path: metadata.schemaContext.operation\n Category: metadata\n Kind: string\n Description: Operação do schema (ex.: \"get\", \"post\").\n - Path: metadata.schemaContext.schemaType\n Category: metadata\n Kind: enum\n Description: Tipo do schema (response/request).\n - Path: metadata.schemaContext.internal\n Category: metadata\n Kind: boolean\n Description: Indica se o schema é interno.\n - Path: metadata.schemaContext.tenant\n Category: metadata\n Kind: string\n Description: Tenant do schema (se aplicável).\n - Path: metadata.schemaContext.locale\n Category: metadata\n Kind: string\n Description: Locale do schema (se aplicável).\n - Path: metadata.serverHash\n Category: metadata\n Kind: string\n Description: Hash dos dados do servidor para detecção de mudanças.\n - Path: metadata.customizations\n Category: metadata\n Kind: array\n Description: Log de customizações manuais aplicadas ao formulário.\n - Path: fieldMetadata\n Category: fields\n Kind: array\n Description: Array de metadados dos campos. Usado para referenciar a configuração de campos.\n - Path: fieldMetadata[]\n Category: fields\n Kind: object\n Description: Item de metadados do campo (FieldMetadata).\n - Path: helpPresentation\n Category: appearance\n Kind: object\n Description: Politica visual do formulario para exibir hint/helpText dos campos sem alterar a semantica publicada pelos DTOs.\n - Path: helpPresentation.display\n Category: appearance\n Kind: enum\n Description: Define se a ajuda semantica dos campos fica inline, em icone de ajuda, automatica por densidade, ou oculta visualmente.\n - Path: helpPresentation.inlineMaxLength\n Category: appearance\n Kind: number\n Description: Tamanho maximo para manter ajuda inline quando display=\"auto\".\n - Path: helpPresentation.preferPopoverForControls\n Category: appearance\n Kind: array\n Description: Tipos de controle que devem preferir icone de ajuda quando display=\"auto\", como toggle, checkbox ou select.\n - Path: editorialContext\n Category: editorial\n Kind: object\n Description: Contexto editorial compartilhado entre os blocos hospedados antes/depois do formulario.\n - Path: editorialContext.[token]\n Category: editorial\n Kind: string\n Description: Valor simples exposto no contexto editorial.\n - Path: formBlocksBefore\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado antes do formulario.\n - Path: formBlocksBefore.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content.\n - Path: formBlocksBefore.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content editorial.\n - Path: formBlocksBefore.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes do formulario.\n - Path: formBlocksBefore.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes do formulario.\n - Path: formBlocksBefore.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content hospedado antes do formulario.\n - Path: formBlocksBeforeActions\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado depois das seções e antes da área principal de ações.\n - Path: formBlocksBeforeActions.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content antes das ações.\n - Path: formBlocksBeforeActions.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content antes das ações.\n - Path: formBlocksBeforeActions.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes da área principal de ações.\n - Path: formBlocksBeforeActions.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes da área principal de ações.\n - Path: formBlocksBeforeActions.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content antes das ações.\n - Path: formBlocksAfter\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado depois do formulario inteiro, incluindo a área principal de ações.\n - Path: formBlocksAfter.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content de fechamento.\n - Path: formBlocksAfter.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content de fechamento.\n - Path: formBlocksAfter.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados depois do formulario.\n - Path: formBlocksAfter.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado depois do formulario.\n - Path: formBlocksAfter.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content de fechamento.\n - Path: sections[].id\n Category: layout\n Kind: string\n Description: ID único da seção.\n - Path: sections[].title\n Category: layout\n Kind: string\n Description: TÃtulo exibido para cada seção do formulário.\n - Path: sections[].description\n Category: layout\n Kind: string\n Description: Descrição auxiliar exibida abaixo do tÃtulo da seção.\n - Path: sections[].icon\n Category: layout\n Kind: string\n Description: Nome do Ãcone (Material Icons) para o cabeçalho da seção.\n - Path: sections[].sectionHeader\n Category: layout\n Kind: object\n Description: Configuração rica do header visual da seção, com suporte a avatar por imagem, iniciais ou modo automático.\n - Path: sections[].sectionHeader.mode\n Category: layout\n Kind: enum\n Description: Estratégia visual do header da seção.\n - Path: sections[].sectionHeader.sourceField\n Category: layout\n Kind: string\n Description: Campo do formulário usado como origem da imagem do avatar.\n - Path: sections[].sectionHeader.initialsSourceField\n Category: layout\n Kind: string\n Description: Campo textual usado para derivar iniciais do avatar.\n - Path: sections[].sectionHeader.altField\n Category: layout\n Kind: string\n Description: Campo textual usado como texto acessivel do avatar e como fallback textual para iniciais quando initialsSourceField nao estiver definido.\n - Path: sections[].sectionHeader.fallbackIcon\n Category: layout\n Kind: string\n Description: Ãcone opcional usado quando o avatar dinâmico estiver vazio ou inválido.\n - Path: sections[].sectionHeader.emptyState\n Category: layout\n Kind: enum\n Description: Comportamento do header quando os campos de origem ainda não possuem valor.\n - Path: sections[].sectionHeader.size\n Category: layout\n Kind: enum\n Description: Tamanho semântico do avatar da seção, materializado pelo runtime via tokens.\n - Path: sections[].sectionHeader.initialsMaxLength\n Category: layout\n Kind: number\n Description: Máximo de letras exibidas no avatar textual.\n - Path: sections[].collapsible\n Category: layout\n Kind: boolean\n Description: Define se a seção pode ser colapsada/expandida pelo usuário.\n - Path: sections[].collapsed\n Category: layout\n Kind: boolean\n Description: Estado inicial da seção (colapsada/expandida) quando `collapsible` é true.\n - Path: sections[].gapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após a seção.\n - Path: sections[].titleGapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) abaixo do tÃtulo da seção.\n - Path: sections[].descriptionGapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) abaixo da descrição da seção.\n - Path: sections[].appearance\n Category: appearance\n Kind: enum\n Description: Preset visual do container/cabeçalho da seção.\n - Path: sections[].stepLabel\n Category: content\n Kind: string\n Description: Rótulo curto do passo exibido antes do tÃtulo da seção.\n - Path: sections[].titleStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para o tÃtulo da seção.\n - Path: sections[].descriptionStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para a descrição da seção.\n - Path: sections[].titleColor\n Category: appearance\n Kind: string\n Description: Cor do tÃtulo da seção (CSS color ou token).\n - Path: sections[].descriptionColor\n Category: appearance\n Kind: string\n Description: Cor da descrição da seção (CSS color ou token).\n - Path: sections[].headerAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento horizontal do conteúdo do cabeçalho da seção.\n - Path: sections[].headerTooltip\n Category: layout\n Kind: string\n Description: Texto de tooltip para o cabeçalho da seção.\n - Path: sections[].headerActions\n Category: layout\n Kind: array\n Description: Lista de ações iconográficas renderizadas no canto direito do cabeçalho da seção.\n - Path: sections[].headerActions[].id\n Category: layout\n Kind: string\n Description: ID estável da ação de cabeçalho da seção.\n - Path: sections[].headerActions[].label\n Category: layout\n Kind: string\n Description: Label acessÃvel usada em tooltip e aria-label da ação.\n - Path: sections[].headerActions[].icon\n Category: layout\n Kind: string\n Description: Ãcone renderizado na ação do cabeçalho da seção.\n - Path: sections[].headerActions[].action\n Category: layout\n Kind: string\n Description: Nome opcional da ação emitida no customAction; se ausente, o runtime usa o ID.\n - Path: sections[].headerActions[].tooltip\n Category: layout\n Kind: string\n Description: Tooltip opcional da ação; se ausente, o runtime usa a label.\n - Path: sections[].headerActions[].color\n Category: appearance\n Kind: enum\n Description: Tom visual da ação do cabeçalho da seção.\n - Path: sections[].headerActions[].visible\n Category: layout\n Kind: boolean\n Description: Controla a visibilidade da ação do cabeçalho da seção.\n - Path: sections[].headerActions[].disabled\n Category: layout\n Kind: boolean\n Description: Controla o estado desabilitado da ação do cabeçalho da seção.\n - Path: sections[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da seção.\n - Path: sections[].styles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da seção.\n - Path: sections[].rows[].id\n Category: layout\n Kind: string\n Description: ID único da linha dentro de uma seção.\n - Path: sections[].rows[].title\n Category: layout\n Kind: string\n Description: TÃtulo interno da linha (usado em editores e labels).\n - Path: sections[].rows[].gap\n Category: layout\n Kind: number\n Description: Espaçamento horizontal (em px) entre colunas nesta linha.\n - Path: sections[].rows[].rowGap\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após esta linha.\n - Path: sections[].rows[].columns[].id\n Category: layout\n Kind: string\n Description: ID único da coluna dentro de uma linha.\n - Path: sections[].rows[].columns[].title\n Category: layout\n Kind: string\n Description: TÃtulo interno da coluna (usado em editores e labels).\n - Path: sections[].rows[].columns[].testId\n Category: layout\n Kind: string\n Description: Atributo data-testid aplicado ao container da coluna.\n - Path: sections[].rows[].columns[].fields\n Category: layout\n Kind: array\n Description: Projeção legada/derivada dos itens kind:\"field\" dentro da coluna.\n - Path: sections[].rows[].columns[].fields[]\n Category: layout\n Kind: string\n Description: Nome do campo dentro da projeção legada/derivada da coluna.\n - Path: sections[].rows[].columns[].items\n Category: layout\n Kind: array\n Description: Lista canônica ordenada de itens da coluna: campos e blocos visuais.\n - Path: sections[].rows[].columns[].items[].kind\n Category: layout\n Kind: enum\n Description: Tipo do item de layout da coluna.\n - Path: sections[].rows[].columns[].items[].id\n Category: layout\n Kind: string\n Description: ID estável do item de layout dentro do formulário.\n - Path: sections[].rows[].columns[].items[].fieldName\n Category: layout\n Kind: string\n Description: Nome do campo quando kind é \"field\".\n - Path: sections[].rows[].columns[].items[].document\n Category: editorial\n Kind: object\n Description: RichContentDocument do bloco visual quando kind é \"richContent\".\n - Path: sections[].rows[].columns[].items[].layout\n Category: editorial\n Kind: enum\n Description: Modo de renderização do bloco visual richContent dentro da coluna.\n - Path: sections[].rows[].columns[].items[].rootClassName\n Category: appearance\n Kind: string\n Description: Classe CSS opcional aplicada ao bloco visual richContent.\n - Path: sections[].rows[].columns[].span.xs\n Category: layout\n Kind: number\n Description: Largura da coluna para telas extra pequenas (xs) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.sm\n Category: layout\n Kind: number\n Description: Largura da coluna para telas pequenas (sm) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.md\n Category: layout\n Kind: number\n Description: Largura da coluna para telas médias (md) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.lg\n Category: layout\n Kind: number\n Description: Largura da coluna para telas grandes (lg) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.xl\n Category: layout\n Kind: number\n Description: Largura da coluna para telas extra grandes (xl) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.xs\n Category: layout\n Kind: number\n Description: Offset da coluna para telas extra pequenas (xs) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.sm\n Category: layout\n Kind: number\n Description: Offset da coluna para telas pequenas (sm) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.md\n Category: layout\n Kind: number\n Description: Offset da coluna para telas médias (md) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.lg\n Category: layout\n Kind: number\n Description: Offset da coluna para telas grandes (lg) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.xl\n Category: layout\n Kind: number\n Description: Offset da coluna para telas extra grandes (xl) no grid system (1-12).\n - Path: sections[].rows[].columns[].order.xs\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas extra pequenas (xs).\n - Path: sections[].rows[].columns[].order.sm\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas pequenas (sm).\n - Path: sections[].rows[].columns[].order.md\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas médias (md).\n - Path: sections[].rows[].columns[].order.lg\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas grandes (lg).\n - Path: sections[].rows[].columns[].order.xl\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas extra grandes (xl).\n - Path: sections[].rows[].columns[].hidden.xs\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra pequenas (xs).\n - Path: sections[].rows[].columns[].hidden.sm\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas pequenas (sm).\n - Path: sections[].rows[].columns[].hidden.md\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas médias (md).\n - Path: sections[].rows[].columns[].hidden.lg\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas grandes (lg).\n - Path: sections[].rows[].columns[].hidden.xl\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra grandes (xl).\n - Path: sections[].rows[].columns[].align\n Category: layout\n Kind: enum\n Description: Alinhamento vertical do conteúdo da coluna.\n - Path: sections[].rows[].columns[].padding\n Category: layout\n Kind: number\n Description: Padding (em px) interno da coluna.\n - Path: sections[].rows[].columns[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada à coluna.\n - Path: actions.submit.id\n Category: actions\n Kind: string\n Description: ID do botão de submissão.\n - Path: actions.submit.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de submissão.\n - Path: actions.submit.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de submissão.\n - Path: actions.submit.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de submissão.\n - Path: actions.submit.color\n Category: actions\n Kind: enum\n Description: Cor do botão de submissão.\n - Path: actions.submit.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de submissão.\n - Path: actions.submit.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de submissão.\n - Path: actions.submit.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de submissão.\n - Path: actions.submit.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de submissão.\n - Path: actions.submit.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de submissão.\n - Path: actions.submit.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de submissão.\n - Path: actions.submit.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.submit.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de submissão.\n - Path: actions.submit.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de submissão.\n - Path: actions.submit.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"ctrl+s\") para o botão de submissão.\n - Path: actions.cancel.id\n Category: actions\n Kind: string\n Description: ID do botão de cancelar.\n - Path: actions.cancel.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de cancelar.\n - Path: actions.cancel.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de cancelar.\n - Path: actions.cancel.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de cancelar.\n - Path: actions.cancel.color\n Category: actions\n Kind: enum\n Description: Cor do botão de cancelar.\n - Path: actions.cancel.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de cancelar.\n - Path: actions.cancel.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de cancelar.\n - Path: actions.cancel.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de cancelar.\n - Path: actions.cancel.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de cancelar.\n - Path: actions.cancel.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de cancelar.\n - Path: actions.cancel.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de cancelar.\n - Path: actions.cancel.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.cancel.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de cancelar.\n - Path: actions.cancel.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de cancelar.\n - Path: actions.cancel.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"esc\") para o botão de cancelar.\n - Path: actions.reset.id\n Category: actions\n Kind: string\n Description: ID do botão de reset.\n - Path: actions.reset.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de reset.\n - Path: actions.reset.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de reset.\n - Path: actions.reset.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de reset.\n - Path: actions.reset.color\n Category: actions\n Kind: enum\n Description: Cor do botão de reset.\n - Path: actions.reset.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de reset.\n - Path: actions.reset.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de reset.\n - Path: actions.reset.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de reset.\n - Path: actions.reset.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de reset.\n - Path: actions.reset.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de reset.\n - Path: actions.reset.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de reset.\n - Path: actions.reset.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.reset.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de reset.\n - Path: actions.reset.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de reset.\n - Path: actions.reset.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"ctrl+shift+r\") para o botão de reset.\n - Path: actions.custom\n Category: actions\n Kind: array\n Description: Lista de botões de ação customizados.\n - Path: actions.custom[]\n Category: actions\n Kind: object\n Description: Configuração de um botão de ação customizado.\n - Path: actions.custom[].id\n Category: actions\n Kind: string\n Description: ID da ação customizada.\n - Path: actions.custom[].visible\n Category: actions\n Kind: boolean\n Description: Visibilidade da ação customizada.\n - Path: actions.custom[].label\n Category: actions\n Kind: string\n Description: Rótulo da ação customizada.\n - Path: actions.custom[].icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para a ação customizada.\n - Path: actions.custom[].color\n Category: actions\n Kind: enum\n Description: Cor da ação customizada.\n - Path: actions.custom[].variant\n Category: actions\n Kind: enum\n Description: Variante visual da ação customizada.\n - Path: actions.custom[].size\n Category: actions\n Kind: enum\n Description: Tamanho da ação customizada.\n - Path: actions.custom[].className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada à ação customizada.\n - Path: actions.custom[].style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados à ação customizada.\n - Path: actions.custom[].disabled\n Category: actions\n Kind: boolean\n Description: Desabilita a ação customizada.\n - Path: actions.custom[].type\n Category: actions\n Kind: enum\n Description: Tipo do botão da ação customizada.\n - Path: actions.custom[].action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.custom[].tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido na ação customizada.\n - Path: actions.custom[].loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento na ação customizada.\n - Path: actions.custom[].shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado para a ação customizada.\n - Path: actions.position\n Category: layout\n Kind: enum\n Description: Posicionamento horizontal da barra de ações.\n - Path: actions.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões dentro da barra de ações (horizontal/vertical).\n - Path: actions.spacing\n Category: layout\n Kind: enum\n Description: Espaçamento entre os botões na barra de ações.\n - Path: actions.sticky\n Category: layout\n Kind: boolean\n Description: Define se a barra de ações deve permanecer visÃvel ao rolar a página.\n - Path: actions.divider\n Category: layout\n Kind: boolean\n Description: Exibe um divisor superior acima da barra de ações.\n - Path: actions.placement\n Category: layout\n Kind: enum\n Description: Localização estrutural da barra de ações no layout.\n - Path: actions.mobile.position\n Category: layout\n Kind: enum\n Description: Posicionamento da barra de ações em dispositivos móveis.\n - Path: actions.mobile.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões em dispositivos móveis.\n - Path: actions.mobile.collapseToMenu\n Category: behavior\n Kind: boolean\n Description: Em mobile, agrupa ações em um menu (se houver muitas).\n - Path: actions.containerClassName\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da barra de ações.\n - Path: actions.containerStyles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da barra de ações.\n - Path: actions.showSaveButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de submit.\n - Path: actions.submitButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de submit.\n - Path: actions.showCancelButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de cancel.\n - Path: actions.cancelButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de cancel.\n - Path: actions.showResetButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de reset.\n - Path: actions.resetButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de reset.\n - Path: behavior.confirmOnUnsavedChanges\n Category: behavior\n Kind: boolean\n Description: Exibe um alerta se o usuário tentar sair com mudanças não salvas.\n - Path: behavior.trackHistory\n Category: behavior\n Kind: boolean\n Description: Habilita rastreamento de histórico para desfazer/refazer (se suportado).\n - Path: behavior.focusFirstError\n Category: behavior\n Kind: boolean\n Description: Ao submeter, foca automaticamente no primeiro campo com erro.\n - Path: behavior.scrollToErrors\n Category: behavior\n Kind: boolean\n Description: Ao submeter, rola a página para exibir o primeiro erro.\n - Path: behavior.clearAfterSave\n Category: behavior\n Kind: boolean\n Description: Limpa o formulário após uma submissão bem-sucedida.\n - Path: behavior.redirectAfterSave\n Category: behavior\n Kind: string\n Description: URL para redirecionar após uma submissão bem-sucedida.\n - Path: behavior.reactiveValidation\n Category: validation\n Kind: boolean\n Description: Ativa validação reativa (em tempo real) em `valueChanges`.\n - Path: behavior.reactiveValidationDebounceMs\n Category: validation\n Kind: number\n Description: Debounce (em ms) para a validação reativa.\n - Path: api.saveEndpoint\n Category: api\n Kind: string\n Description: URL para onde os dados do formulário serão enviados (POST/PUT/PATCH).\n - Path: api.loadEndpoint\n Category: api\n Kind: string\n Description: URL para buscar dados para popular o formulário (GET).\n - Path: api.saveMethod\n Category: api\n Kind: enum\n Description: Método HTTP para a requisição de salvar.\n - Path: api.timeout\n Category: api\n Kind: number\n Description: Tempo limite (em ms) para as requisições API.\n - Path: api.headers\n Category: api\n Kind: object\n Description: Cabeçalhos HTTP personalizados para as requisições API.\n - Path: api.idField\n Category: api\n Kind: string\n Description: Nome do campo que representa o ID do registro no payload (para PUT/PATCH).\n - Path: api.beforeSave\n Category: hooks\n Kind: expression\n Description: Hook para pré-processamento de dados antes de enviar para a API.\n - Path: api.afterLoad\n Category: hooks\n Kind: expression\n Description: Hook para pós-processamento de dados após carregar da API.\n - Path: messages.updateRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após atualização de registro.\n - Path: messages.createRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após criação de registro.\n - Path: messages.updateRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após atualização de registro.\n - Path: messages.createRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após criação de registro.\n - Path: messages.confirmations.submit\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de submeter o formulário.\n - Path: messages.confirmations.cancel\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de cancelar.\n - Path: messages.confirmations.reset\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de resetar o formulário.\n - Path: messages.confirmations.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para ações customizadas. Substitua `[actionId]` pelo ID da ação.\n - Path: messages.customActions.[actionId]\n Category: messages\n Kind: object\n Description: Mensagens da ação customizada (success/error/confirmation). Substitua `[actionId]` pelo ID da ação.\n - Path: messages.customActions.[actionId].success\n Category: messages\n Kind: string\n Description: Mensagem de sucesso para a ação customizada.\n - Path: messages.customActions.[actionId].error\n Category: messages\n Kind: string\n Description: Mensagem de erro para a ação customizada.\n - Path: messages.customActions.[actionId].confirmation\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para a ação customizada.\n - Path: messages.loading.submit\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o envio do formulário.\n - Path: messages.loading.cancel\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o cancelamento.\n - Path: messages.loading.reset\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o reset do formulário.\n - Path: messages.loading.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem exibida durante a execução de uma ação customizada. Substitua `[actionId]` pelo ID da ação.\n - Path: formRules[].id\n Category: rules\n Kind: string\n Description: ID único da regra de layout.\n - Path: formRules[].name\n Category: rules\n Kind: string\n Description: Nome amigável da regra de layout.\n - Path: formRules[].description\n Category: rules\n Kind: string\n Description: Descrição da regra de layout para documentação.\n - Path: formRules[].metadata.origin\n Category: rules\n Kind: enum\n Description: Origem da regra sugerida pela IA.\n - Path: formRules[].metadata.reviewStatus\n Category: rules\n Kind: enum\n Description: Status de revisão humana da regra sugerida pela IA.\n - Path: formRules[].targetType\n Category: rules\n Kind: enum\n Description: Tipo do elemento alvo da regra (campo, seção, ação, linha, coluna ou bloco visual).\n - Path: formRules[].context\n Category: rules\n Kind: enum\n Description: Contexto legado da regra (quando properties não forem informadas).\n - Path: formRules[].targets\n Category: rules\n Kind: array\n Description: Lista de IDs dos elementos alvo da regra. O tipo do ID depende de `targetType`.\n - Path: formRules[].targets[]\n Category: rules\n Kind: string\n Description: ID do alvo da regra.\n - Path: formRules[].targetFields\n Category: rules\n Kind: array\n Description: Alias legado para alvos de campo.\n - Path: formRules[].targetFields[]\n Category: rules\n Kind: string\n Description: ID do campo alvo (alias legado).\n - Path: formRules[].effect.condition\n Category: rules\n Kind: expression\n Description: Condicao canonica da regra, expressa em Json Logic.\n - Path: formCommandRules\n Category: rules\n Kind: array\n Description: Regras condicionais de comando avaliadas depois que formRules estabilizam valores calculados.\n - Path: formCommandRules[].condition\n Category: rules\n Kind: expression\n Description: Condicao Json Logic avaliada sobre formData estabilizado, incluindo field values calculados.\n - Path: formCommandRules[].effects[].kind\n Category: rules\n Kind: enum\n Description: Tipo do efeito de comando. O primeiro corte suporta apenas global-action.\n - Path: formCommandRules[].effects[].globalAction\n Category: rules\n Kind: object\n Description: GlobalActionRef estruturado executado por GlobalActionService.executeRef quando a regra entra na condicao.\n - Path: formCommandRules[].policy\n Category: rules\n Kind: object\n Description: Politica operacional do comando: trigger, distinct, distinctBy, debounceMs, errorPolicy e runOnInitialEvaluation.\n - Path: formRulesState\n Category: rules\n Kind: object\n Description: Estado interno do builder de regras (metadados visuais).\n - Path: hooks\n Category: hooks\n Kind: object\n Description: Declarações de hooks por estágio do ciclo de vida do formulário.\n - Path: hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeInit.\n - Path: hooks.beforeInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterInit.\n - Path: hooks.afterInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeValidate.\n - Path: hooks.beforeValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterValidate.\n - Path: hooks.afterValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeSubmit.\n - Path: hooks.beforeSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterSubmit.\n - Path: hooks.afterSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.onError[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para onError.\n - Path: hooks.onError[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.onError[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.onError[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.onError[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hints.dataModes.create\n Category: form_config\n Kind: string\n Description: Dica para o modo de criação de dados.\n - Path: hints.dataModes.edit\n Category: form_config\n Kind: string\n Description: Dica para o modo de edição de dados.\n - Path: hints.dataModes.view\n Category: form_config\n Kind: string\n Description: Dica para o modo de visualização de dados.\n - Path: hints.uiModes.presentation\n Category: form_config\n Kind: string\n Description: Dica para o modo de apresentação da UI.\n - Path: hints.uiModes.readonly\n Category: form_config\n Kind: string\n Description: Dica para o modo de somente leitura da UI.\n - Path: hints.uiModes.disabled\n Category: form_config\n Kind: string\n Description: Dica para o modo desabilitado da UI.\n - Path: hints.uiModes.visible\n Category: form_config\n Kind: string\n Description: Dica para o modo de visibilidade da UI.\n - Path: fieldMetadata[].id\n Category: identity\n Kind: string\n Description: Identificador unico da instancia do componente.\n - Path: fieldMetadata[].version\n Category: identity\n Kind: string\n Description: Versao do schema de metadata (migracao).\n - Path: fieldMetadata[].context\n Category: identity\n Kind: enum\n Description: Contexto de uso do componente (form/filter/table/dialog/standalone).\n - Path: fieldMetadata[].createdAt\n Category: misc\n Kind: string\n Description: Timestamp de criacao (ISO).\n - Path: fieldMetadata[].updatedAt\n Category: misc\n Kind: string\n Description: Timestamp de atualizacao (ISO).\n - Path: fieldMetadata[].tags\n Category: identity\n Kind: array\n Description: Tags para categorizacao e busca.\n - Path: fieldMetadata[].cssClass\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao host do componente.\n - Path: fieldMetadata[].style\n Category: appearance\n Kind: object\n Description: Estilos inline (objeto CSS).\n - Path: fieldMetadata[].dataAttributes\n Category: data\n Kind: object\n Description: Data attributes para teste/analytics.\n - Path: fieldMetadata[].name\n Category: identity\n Kind: string\n Description: Identificador único do campo. Essencial para binding.\n - Path: fieldMetadata[].label\n Category: identity\n Kind: string\n Description: Rótulo principal exibido para o usuário.\n - Path: fieldMetadata[].placeholder\n Category: identity\n Kind: string\n Description: Texto temporário exibido quando vazio.\n - Path: fieldMetadata[].hint\n Category: identity\n Kind: string\n Description: Texto de ajuda exibido abaixo do campo.\n - Path: fieldMetadata[].helpText\n Category: identity\n Kind: string\n Description: Texto semântico de ajuda publicado pelo schema/DTO.\n - Path: fieldMetadata[].tooltip\n Category: identity\n Kind: string\n Description: Texto exibido ao passar o mouse.\n - Path: fieldMetadata[].tooltipOnHover\n Category: identity\n Kind: boolean\n Description: Habilita apresentação do tooltip no hover quando suportado pelo renderer.\n - Path: fieldMetadata[].description\n Category: identity\n Kind: string\n Description: Descrição detalhada (usada em documentação ou helps extensos).\n - Path: fieldMetadata[].selectionMode\n Category: behavior\n Kind: enum\n Description: Semântica de seleção explícita para controles de escolha.\n - Path: fieldMetadata[].variant\n Category: appearance\n Kind: string\n Description: Variante visual/semântica do controle.\n - Path: fieldMetadata[].density\n Category: appearance\n Kind: enum\n Description: Densidade visual do shell do controle.\n - Path: fieldMetadata[].links\n Category: identity\n Kind: array\n Description: Links ricos associados ao campo, úteis em consentimentos e conteúdo legal.\n - Path: fieldMetadata[].group\n Category: identity\n Kind: string\n Description: Agrupador lógico do campo.\n - Path: fieldMetadata[].order\n Category: layout\n Kind: number\n Description: Ordem de exibição do campo.\n - Path: fieldMetadata[].width\n Category: layout\n Kind: string\n Description: Largura do campo (ex: 50%, 100px).\n - Path: fieldMetadata[].isFlex\n Category: layout\n Kind: boolean\n Description: Se true, usa flex-grow para preencher espaço.\n - Path: fieldMetadata[].controlType\n Category: behavior\n Kind: enum\n Description: Tipo do componente de UI (input, select, datepicker, etc).\n - Path: fieldMetadata[].dataType\n Category: data\n Kind: enum\n Description: Tipo de dado do campo (text, number, date, etc).\n - Path: fieldMetadata[].source\n Category: data\n Kind: enum\n Description: Origem semântica do campo. Use local para campos do host que não vêm do schema backend.\n - Path: fieldMetadata[].transient\n Category: data\n Kind: boolean\n Description: Marca o campo como temporário/local para preenchimento. O dynamic-form omite do submit por padrão.\n - Path: fieldMetadata[].submitPolicy\n Category: behavior\n Kind: enum\n Description: Política de submit para sobrescrever o padrão de campos locais/transient.\n - Path: fieldMetadata[].materialDesign.appearance\n Category: appearance\n Kind: enum\n Description: Aparência do campo Material (fill/outline).\n - Path: fieldMetadata[].materialDesign.color\n Category: appearance\n Kind: enum\n Description: Tema de cor Material (primary/accent/warn).\n - Path: fieldMetadata[].materialDesign.floatLabel\n Category: appearance\n Kind: enum\n Description: Comportamento do rótulo flutuante.\n - Path: fieldMetadata[].materialDesign.subscriptSizing\n Category: appearance\n Kind: enum\n Description: Estratégia de sizing do subscript (erros/hints).\n - Path: fieldMetadata[].materialDesign.hideRequiredMarker\n Category: appearance\n Kind: boolean\n Description: Oculta o asterisco de campo obrigatório.\n - Path: fieldMetadata[].materialDesign.density\n Category: appearance\n Kind: enum\n Description: Densidade do campo Material.\n - Path: fieldMetadata[].materialDesign.disableRipple\n Category: appearance\n Kind: boolean\n Description: Desativa ripple/ondulação em componentes Material.\n - Path: fieldMetadata[].materialDesign.customPalette\n Category: appearance\n Kind: object\n Description: Override de paleta (primary/accent/warn).\n - Path: fieldMetadata[].materialDesign.animations\n Category: appearance\n Kind: object\n Description: Configuração de animações (disable, duration, easing).\n - Path: fieldMetadata[].prefixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido antes do valor.\n - Path: fieldMetadata[].suffixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido depois do valor.\n - Path: fieldMetadata[].iconPosition\n Category: appearance\n Kind: enum\n Description: Posição preferencial do ícone principal.\n - Path: fieldMetadata[].iconSize\n Category: appearance\n Kind: enum\n Description: Tamanho do ícone.\n - Path: fieldMetadata[].iconColor\n Category: appearance\n Kind: string\n Description: Cor semântica ou token de cor aplicado ao ícone principal.\n - Path: fieldMetadata[].iconClass\n Category: appearance\n Kind: string\n Description: Classe CSS controlada pelo host para o ícone principal.\n - Path: fieldMetadata[].iconStyle\n Category: appearance\n Kind: string\n Description: Estilo visual semântico do ícone quando o renderer suportar variações.\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n - Path: fieldMetadata[].valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n - Path: fieldMetadata[].presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n - Path: fieldMetadata[].presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n - Path: fieldMetadata[].presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n - Path: fieldMetadata[].presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n - Path: fieldMetadata[].presentation.visualization.fallbackText\n Category: accessibility\n Kind: string\n Description: Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.\n - Path: fieldMetadata[].presentationRules\n Category: appearance\n Kind: array\n Description: Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.\n - Path: fieldMetadata[].presentationRules[].when\n Category: behavior\n Kind: object\n Description: Guarda Json Logic avaliada contra o contexto de apresentacao do campo.\n - Path: fieldMetadata[].presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n - Path: fieldMetadata[].options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\nComponent Capabilities:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\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 - 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 - 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 - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\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 - 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 - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\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 - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\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 - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\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 - 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 - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\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 - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\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 - 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 - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\nCapability Notes:\n - Este catalogo descreve inputs e outputs do componente.\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.\n",
|
|
8369
|
+
"content": "Schema Capabilities:\n - Path: metadata.version\n Category: metadata\n Kind: string\n Description: Versão da configuração do formulário para controle de migração.\n - Path: metadata.source\n Category: metadata\n Kind: enum\n Description: Origem da configuração do formulário.\n - Path: metadata.lastUpdated\n Category: metadata\n Kind: string\n Description: Timestamp da última atualização da configuração (ISO-8601).\n - Path: metadata.schemaId\n Category: metadata\n Kind: string\n Description: ID do schema de origem para reconciliação no servidor.\n - Path: metadata.schemaContext\n Category: metadata\n Kind: object\n Description: Contexto do schema usado para compor o formulário.\n - Path: metadata.schemaContext.path\n Category: metadata\n Kind: string\n Description: Path do schema de origem.\n - Path: metadata.schemaContext.operation\n Category: metadata\n Kind: string\n Description: Operação do schema (ex.: \"get\", \"post\").\n - Path: metadata.schemaContext.schemaType\n Category: metadata\n Kind: enum\n Description: Tipo do schema (response/request).\n - Path: metadata.schemaContext.internal\n Category: metadata\n Kind: boolean\n Description: Indica se o schema é interno.\n - Path: metadata.schemaContext.tenant\n Category: metadata\n Kind: string\n Description: Tenant do schema (se aplicável).\n - Path: metadata.schemaContext.locale\n Category: metadata\n Kind: string\n Description: Locale do schema (se aplicável).\n - Path: metadata.serverHash\n Category: metadata\n Kind: string\n Description: Hash dos dados do servidor para detecção de mudanças.\n - Path: metadata.customizations\n Category: metadata\n Kind: array\n Description: Log de customizações manuais aplicadas ao formulário.\n - Path: fieldMetadata\n Category: fields\n Kind: array\n Description: Array de metadados dos campos. Usado para referenciar a configuração de campos.\n - Path: fieldMetadata[]\n Category: fields\n Kind: object\n Description: Item de metadados do campo (FieldMetadata).\n - Path: helpPresentation\n Category: appearance\n Kind: object\n Description: Politica visual do formulario para exibir hint/helpText dos campos sem alterar a semantica publicada pelos DTOs.\n - Path: helpPresentation.display\n Category: appearance\n Kind: enum\n Description: Define se a ajuda semantica dos campos fica inline, em icone de ajuda, automatica por densidade, ou oculta visualmente.\n - Path: helpPresentation.inlineMaxLength\n Category: appearance\n Kind: number\n Description: Tamanho maximo para manter ajuda inline quando display=\"auto\".\n - Path: helpPresentation.preferPopoverForControls\n Category: appearance\n Kind: array\n Description: Tipos de controle que devem preferir icone de ajuda quando display=\"auto\", como toggle, checkbox ou select.\n - Path: editorialContext\n Category: editorial\n Kind: object\n Description: Contexto editorial compartilhado entre os blocos hospedados antes/depois do formulario.\n - Path: editorialContext.[token]\n Category: editorial\n Kind: string\n Description: Valor simples exposto no contexto editorial.\n - Path: formBlocksBefore\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado antes do formulario.\n - Path: formBlocksBefore.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content.\n - Path: formBlocksBefore.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content editorial.\n - Path: formBlocksBefore.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes do formulario.\n - Path: formBlocksBefore.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes do formulario.\n - Path: formBlocksBefore.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content hospedado antes do formulario.\n - Path: formBlocksBeforeActions\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado depois das seções e antes da área principal de ações.\n - Path: formBlocksBeforeActions.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content antes das ações.\n - Path: formBlocksBeforeActions.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content antes das ações.\n - Path: formBlocksBeforeActions.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes da área principal de ações.\n - Path: formBlocksBeforeActions.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes da área principal de ações.\n - Path: formBlocksBeforeActions.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content antes das ações.\n - Path: formBlocksAfter\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado depois do formulario inteiro, incluindo a área principal de ações.\n - Path: formBlocksAfter.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content de fechamento.\n - Path: formBlocksAfter.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content de fechamento.\n - Path: formBlocksAfter.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados depois do formulario.\n - Path: formBlocksAfter.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado depois do formulario.\n - Path: formBlocksAfter.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content de fechamento.\n - Path: sections[].id\n Category: layout\n Kind: string\n Description: ID único da seção.\n - Path: sections[].title\n Category: layout\n Kind: string\n Description: TÃtulo exibido para cada seção do formulário.\n - Path: sections[].description\n Category: layout\n Kind: string\n Description: Descrição auxiliar exibida abaixo do tÃtulo da seção.\n - Path: sections[].icon\n Category: layout\n Kind: string\n Description: Nome do Ãcone (Material Icons) para o cabeçalho da seção.\n - Path: sections[].sectionHeader\n Category: layout\n Kind: object\n Description: Configuração rica do header visual da seção, com suporte a avatar por imagem, iniciais ou modo automático.\n - Path: sections[].sectionHeader.mode\n Category: layout\n Kind: enum\n Description: Estratégia visual do header da seção.\n - Path: sections[].sectionHeader.sourceField\n Category: layout\n Kind: string\n Description: Campo do formulário usado como origem da imagem do avatar.\n - Path: sections[].sectionHeader.initialsSourceField\n Category: layout\n Kind: string\n Description: Campo textual usado para derivar iniciais do avatar.\n - Path: sections[].sectionHeader.altField\n Category: layout\n Kind: string\n Description: Campo textual usado como texto acessivel do avatar e como fallback textual para iniciais quando initialsSourceField nao estiver definido.\n - Path: sections[].sectionHeader.fallbackIcon\n Category: layout\n Kind: string\n Description: Ãcone opcional usado quando o avatar dinâmico estiver vazio ou inválido.\n - Path: sections[].sectionHeader.emptyState\n Category: layout\n Kind: enum\n Description: Comportamento do header quando os campos de origem ainda não possuem valor.\n - Path: sections[].sectionHeader.size\n Category: layout\n Kind: enum\n Description: Tamanho semântico do avatar da seção, materializado pelo runtime via tokens.\n - Path: sections[].sectionHeader.initialsMaxLength\n Category: layout\n Kind: number\n Description: Máximo de letras exibidas no avatar textual.\n - Path: sections[].collapsible\n Category: layout\n Kind: boolean\n Description: Define se a seção pode ser colapsada/expandida pelo usuário.\n - Path: sections[].collapsed\n Category: layout\n Kind: boolean\n Description: Estado inicial da seção (colapsada/expandida) quando `collapsible` é true.\n - Path: sections[].gapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após a seção.\n - Path: sections[].titleGapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) abaixo do tÃtulo da seção.\n - Path: sections[].descriptionGapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) abaixo da descrição da seção.\n - Path: sections[].appearance\n Category: appearance\n Kind: enum\n Description: Preset visual do container/cabeçalho da seção.\n - Path: sections[].stepLabel\n Category: content\n Kind: string\n Description: Rótulo curto do passo exibido antes do tÃtulo da seção.\n - Path: sections[].titleStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para o tÃtulo da seção.\n - Path: sections[].descriptionStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para a descrição da seção.\n - Path: sections[].titleColor\n Category: appearance\n Kind: string\n Description: Cor do tÃtulo da seção (CSS color ou token).\n - Path: sections[].descriptionColor\n Category: appearance\n Kind: string\n Description: Cor da descrição da seção (CSS color ou token).\n - Path: sections[].headerAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento horizontal do conteúdo do cabeçalho da seção.\n - Path: sections[].headerTooltip\n Category: layout\n Kind: string\n Description: Texto de tooltip para o cabeçalho da seção.\n - Path: sections[].headerActions\n Category: layout\n Kind: array\n Description: Lista de ações iconográficas renderizadas no canto direito do cabeçalho da seção.\n - Path: sections[].headerActions[].id\n Category: layout\n Kind: string\n Description: ID estável da ação de cabeçalho da seção.\n - Path: sections[].headerActions[].label\n Category: layout\n Kind: string\n Description: Label acessÃvel usada em tooltip e aria-label da ação.\n - Path: sections[].headerActions[].icon\n Category: layout\n Kind: string\n Description: Ãcone renderizado na ação do cabeçalho da seção.\n - Path: sections[].headerActions[].action\n Category: layout\n Kind: string\n Description: Nome opcional da ação emitida no customAction; se ausente, o runtime usa o ID.\n - Path: sections[].headerActions[].tooltip\n Category: layout\n Kind: string\n Description: Tooltip opcional da ação; se ausente, o runtime usa a label.\n - Path: sections[].headerActions[].color\n Category: appearance\n Kind: enum\n Description: Tom visual da ação do cabeçalho da seção.\n - Path: sections[].headerActions[].visible\n Category: layout\n Kind: boolean\n Description: Controla a visibilidade da ação do cabeçalho da seção.\n - Path: sections[].headerActions[].disabled\n Category: layout\n Kind: boolean\n Description: Controla o estado desabilitado da ação do cabeçalho da seção.\n - Path: sections[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da seção.\n - Path: sections[].styles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da seção.\n - Path: sections[].rows[].id\n Category: layout\n Kind: string\n Description: ID único da linha dentro de uma seção.\n - Path: sections[].rows[].title\n Category: layout\n Kind: string\n Description: TÃtulo interno da linha (usado em editores e labels).\n - Path: sections[].rows[].gap\n Category: layout\n Kind: number\n Description: Espaçamento horizontal (em px) entre colunas nesta linha.\n - Path: sections[].rows[].rowGap\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após esta linha.\n - Path: sections[].rows[].columns[].id\n Category: layout\n Kind: string\n Description: ID único da coluna dentro de uma linha.\n - Path: sections[].rows[].columns[].title\n Category: layout\n Kind: string\n Description: TÃtulo interno da coluna (usado em editores e labels).\n - Path: sections[].rows[].columns[].testId\n Category: layout\n Kind: string\n Description: Atributo data-testid aplicado ao container da coluna.\n - Path: sections[].rows[].columns[].fields\n Category: layout\n Kind: array\n Description: Projeção legada/derivada dos itens kind:\"field\" dentro da coluna.\n - Path: sections[].rows[].columns[].fields[]\n Category: layout\n Kind: string\n Description: Nome do campo dentro da projeção legada/derivada da coluna.\n - Path: sections[].rows[].columns[].items\n Category: layout\n Kind: array\n Description: Lista canônica ordenada de itens da coluna: campos e blocos visuais.\n - Path: sections[].rows[].columns[].items[].kind\n Category: layout\n Kind: enum\n Description: Tipo do item de layout da coluna.\n - Path: sections[].rows[].columns[].items[].id\n Category: layout\n Kind: string\n Description: ID estável do item de layout dentro do formulário.\n - Path: sections[].rows[].columns[].items[].fieldName\n Category: layout\n Kind: string\n Description: Nome do campo quando kind é \"field\".\n - Path: sections[].rows[].columns[].items[].document\n Category: editorial\n Kind: object\n Description: RichContentDocument do bloco visual quando kind é \"richContent\".\n - Path: sections[].rows[].columns[].items[].layout\n Category: editorial\n Kind: enum\n Description: Modo de renderização do bloco visual richContent dentro da coluna.\n - Path: sections[].rows[].columns[].items[].rootClassName\n Category: appearance\n Kind: string\n Description: Classe CSS opcional aplicada ao bloco visual richContent.\n - Path: sections[].rows[].columns[].span.xs\n Category: layout\n Kind: number\n Description: Largura da coluna para telas extra pequenas (xs) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.sm\n Category: layout\n Kind: number\n Description: Largura da coluna para telas pequenas (sm) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.md\n Category: layout\n Kind: number\n Description: Largura da coluna para telas médias (md) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.lg\n Category: layout\n Kind: number\n Description: Largura da coluna para telas grandes (lg) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.xl\n Category: layout\n Kind: number\n Description: Largura da coluna para telas extra grandes (xl) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.xs\n Category: layout\n Kind: number\n Description: Offset da coluna para telas extra pequenas (xs) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.sm\n Category: layout\n Kind: number\n Description: Offset da coluna para telas pequenas (sm) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.md\n Category: layout\n Kind: number\n Description: Offset da coluna para telas médias (md) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.lg\n Category: layout\n Kind: number\n Description: Offset da coluna para telas grandes (lg) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.xl\n Category: layout\n Kind: number\n Description: Offset da coluna para telas extra grandes (xl) no grid system (1-12).\n - Path: sections[].rows[].columns[].order.xs\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas extra pequenas (xs).\n - Path: sections[].rows[].columns[].order.sm\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas pequenas (sm).\n - Path: sections[].rows[].columns[].order.md\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas médias (md).\n - Path: sections[].rows[].columns[].order.lg\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas grandes (lg).\n - Path: sections[].rows[].columns[].order.xl\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas extra grandes (xl).\n - Path: sections[].rows[].columns[].hidden.xs\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra pequenas (xs).\n - Path: sections[].rows[].columns[].hidden.sm\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas pequenas (sm).\n - Path: sections[].rows[].columns[].hidden.md\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas médias (md).\n - Path: sections[].rows[].columns[].hidden.lg\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas grandes (lg).\n - Path: sections[].rows[].columns[].hidden.xl\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra grandes (xl).\n - Path: sections[].rows[].columns[].align\n Category: layout\n Kind: enum\n Description: Alinhamento vertical do conteúdo da coluna.\n - Path: sections[].rows[].columns[].padding\n Category: layout\n Kind: number\n Description: Padding (em px) interno da coluna.\n - Path: sections[].rows[].columns[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada à coluna.\n - Path: actions.submit.id\n Category: actions\n Kind: string\n Description: ID do botão de submissão.\n - Path: actions.submit.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de submissão.\n - Path: actions.submit.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de submissão.\n - Path: actions.submit.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de submissão.\n - Path: actions.submit.color\n Category: actions\n Kind: enum\n Description: Cor do botão de submissão.\n - Path: actions.submit.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de submissão.\n - Path: actions.submit.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de submissão.\n - Path: actions.submit.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de submissão.\n - Path: actions.submit.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de submissão.\n - Path: actions.submit.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de submissão.\n - Path: actions.submit.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de submissão.\n - Path: actions.submit.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.submit.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de submissão.\n - Path: actions.submit.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de submissão.\n - Path: actions.submit.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"ctrl+s\") para o botão de submissão.\n - Path: actions.cancel.id\n Category: actions\n Kind: string\n Description: ID do botão de cancelar.\n - Path: actions.cancel.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de cancelar.\n - Path: actions.cancel.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de cancelar.\n - Path: actions.cancel.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de cancelar.\n - Path: actions.cancel.color\n Category: actions\n Kind: enum\n Description: Cor do botão de cancelar.\n - Path: actions.cancel.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de cancelar.\n - Path: actions.cancel.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de cancelar.\n - Path: actions.cancel.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de cancelar.\n - Path: actions.cancel.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de cancelar.\n - Path: actions.cancel.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de cancelar.\n - Path: actions.cancel.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de cancelar.\n - Path: actions.cancel.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.cancel.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de cancelar.\n - Path: actions.cancel.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de cancelar.\n - Path: actions.cancel.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"esc\") para o botão de cancelar.\n - Path: actions.reset.id\n Category: actions\n Kind: string\n Description: ID do botão de reset.\n - Path: actions.reset.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de reset.\n - Path: actions.reset.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de reset.\n - Path: actions.reset.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de reset.\n - Path: actions.reset.color\n Category: actions\n Kind: enum\n Description: Cor do botão de reset.\n - Path: actions.reset.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de reset.\n - Path: actions.reset.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de reset.\n - Path: actions.reset.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de reset.\n - Path: actions.reset.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de reset.\n - Path: actions.reset.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de reset.\n - Path: actions.reset.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de reset.\n - Path: actions.reset.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.reset.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de reset.\n - Path: actions.reset.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de reset.\n - Path: actions.reset.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"ctrl+shift+r\") para o botão de reset.\n - Path: actions.custom\n Category: actions\n Kind: array\n Description: Lista de botões de ação customizados.\n - Path: actions.custom[]\n Category: actions\n Kind: object\n Description: Configuração de um botão de ação customizado.\n - Path: actions.custom[].id\n Category: actions\n Kind: string\n Description: ID da ação customizada.\n - Path: actions.custom[].visible\n Category: actions\n Kind: boolean\n Description: Visibilidade da ação customizada.\n - Path: actions.custom[].label\n Category: actions\n Kind: string\n Description: Rótulo da ação customizada.\n - Path: actions.custom[].icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para a ação customizada.\n - Path: actions.custom[].color\n Category: actions\n Kind: enum\n Description: Cor da ação customizada.\n - Path: actions.custom[].variant\n Category: actions\n Kind: enum\n Description: Variante visual da ação customizada.\n - Path: actions.custom[].size\n Category: actions\n Kind: enum\n Description: Tamanho da ação customizada.\n - Path: actions.custom[].className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada à ação customizada.\n - Path: actions.custom[].style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados à ação customizada.\n - Path: actions.custom[].disabled\n Category: actions\n Kind: boolean\n Description: Desabilita a ação customizada.\n - Path: actions.custom[].type\n Category: actions\n Kind: enum\n Description: Tipo do botão da ação customizada.\n - Path: actions.custom[].action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.custom[].tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido na ação customizada.\n - Path: actions.custom[].loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento na ação customizada.\n - Path: actions.custom[].shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado para a ação customizada.\n - Path: actions.position\n Category: layout\n Kind: enum\n Description: Posicionamento horizontal da barra de ações.\n - Path: actions.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões dentro da barra de ações (horizontal/vertical).\n - Path: actions.spacing\n Category: layout\n Kind: enum\n Description: Espaçamento entre os botões na barra de ações.\n - Path: actions.sticky\n Category: layout\n Kind: boolean\n Description: Define se a barra de ações deve permanecer visÃvel ao rolar a página.\n - Path: actions.divider\n Category: layout\n Kind: boolean\n Description: Exibe um divisor superior acima da barra de ações.\n - Path: actions.placement\n Category: layout\n Kind: enum\n Description: Localização estrutural da barra de ações no layout.\n - Path: actions.mobile.position\n Category: layout\n Kind: enum\n Description: Posicionamento da barra de ações em dispositivos móveis.\n - Path: actions.mobile.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões em dispositivos móveis.\n - Path: actions.mobile.collapseToMenu\n Category: behavior\n Kind: boolean\n Description: Em mobile, agrupa ações em um menu (se houver muitas).\n - Path: actions.containerClassName\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da barra de ações.\n - Path: actions.containerStyles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da barra de ações.\n - Path: actions.showSaveButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de submit.\n - Path: actions.submitButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de submit.\n - Path: actions.showCancelButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de cancel.\n - Path: actions.cancelButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de cancel.\n - Path: actions.showResetButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de reset.\n - Path: actions.resetButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de reset.\n - Path: behavior.confirmOnUnsavedChanges\n Category: behavior\n Kind: boolean\n Description: Exibe um alerta se o usuário tentar sair com mudanças não salvas.\n - Path: behavior.trackHistory\n Category: behavior\n Kind: boolean\n Description: Habilita rastreamento de histórico para desfazer/refazer (se suportado).\n - Path: behavior.focusFirstError\n Category: behavior\n Kind: boolean\n Description: Ao submeter, foca automaticamente no primeiro campo com erro.\n - Path: behavior.scrollToErrors\n Category: behavior\n Kind: boolean\n Description: Ao submeter, rola a página para exibir o primeiro erro.\n - Path: behavior.clearAfterSave\n Category: behavior\n Kind: boolean\n Description: Limpa o formulário após uma submissão bem-sucedida.\n - Path: behavior.redirectAfterSave\n Category: behavior\n Kind: string\n Description: URL para redirecionar após uma submissão bem-sucedida.\n - Path: behavior.reactiveValidation\n Category: validation\n Kind: boolean\n Description: Ativa validação reativa (em tempo real) em `valueChanges`.\n - Path: behavior.reactiveValidationDebounceMs\n Category: validation\n Kind: number\n Description: Debounce (em ms) para a validação reativa.\n - Path: api.saveEndpoint\n Category: api\n Kind: string\n Description: URL para onde os dados do formulário serão enviados (POST/PUT/PATCH).\n - Path: api.loadEndpoint\n Category: api\n Kind: string\n Description: URL para buscar dados para popular o formulário (GET).\n - Path: api.saveMethod\n Category: api\n Kind: enum\n Description: Método HTTP para a requisição de salvar.\n - Path: api.timeout\n Category: api\n Kind: number\n Description: Tempo limite (em ms) para as requisições API.\n - Path: api.headers\n Category: api\n Kind: object\n Description: Cabeçalhos HTTP personalizados para as requisições API.\n - Path: api.idField\n Category: api\n Kind: string\n Description: Nome do campo que representa o ID do registro no payload (para PUT/PATCH).\n - Path: api.beforeSave\n Category: hooks\n Kind: expression\n Description: Hook para pré-processamento de dados antes de enviar para a API.\n - Path: api.afterLoad\n Category: hooks\n Kind: expression\n Description: Hook para pós-processamento de dados após carregar da API.\n - Path: messages.updateRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após atualização de registro.\n - Path: messages.createRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após criação de registro.\n - Path: messages.updateRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após atualização de registro.\n - Path: messages.createRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após criação de registro.\n - Path: messages.confirmations.submit\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de submeter o formulário.\n - Path: messages.confirmations.cancel\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de cancelar.\n - Path: messages.confirmations.reset\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de resetar o formulário.\n - Path: messages.confirmations.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para ações customizadas. Substitua `[actionId]` pelo ID da ação.\n - Path: messages.customActions.[actionId]\n Category: messages\n Kind: object\n Description: Mensagens da ação customizada (success/error/confirmation). Substitua `[actionId]` pelo ID da ação.\n - Path: messages.customActions.[actionId].success\n Category: messages\n Kind: string\n Description: Mensagem de sucesso para a ação customizada.\n - Path: messages.customActions.[actionId].error\n Category: messages\n Kind: string\n Description: Mensagem de erro para a ação customizada.\n - Path: messages.customActions.[actionId].confirmation\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para a ação customizada.\n - Path: messages.loading.submit\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o envio do formulário.\n - Path: messages.loading.cancel\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o cancelamento.\n - Path: messages.loading.reset\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o reset do formulário.\n - Path: messages.loading.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem exibida durante a execução de uma ação customizada. Substitua `[actionId]` pelo ID da ação.\n - Path: formRules[].id\n Category: rules\n Kind: string\n Description: ID único da regra de layout.\n - Path: formRules[].name\n Category: rules\n Kind: string\n Description: Nome amigável da regra de layout.\n - Path: formRules[].description\n Category: rules\n Kind: string\n Description: Descrição da regra de layout para documentação.\n - Path: formRules[].metadata.origin\n Category: rules\n Kind: enum\n Description: Origem da regra sugerida pela IA.\n - Path: formRules[].metadata.reviewStatus\n Category: rules\n Kind: enum\n Description: Status de revisão humana da regra sugerida pela IA.\n - Path: formRules[].targetType\n Category: rules\n Kind: enum\n Description: Tipo do elemento alvo da regra (campo, seção, ação, linha, coluna ou bloco visual).\n - Path: formRules[].context\n Category: rules\n Kind: enum\n Description: Contexto legado da regra (quando properties não forem informadas).\n - Path: formRules[].targets\n Category: rules\n Kind: array\n Description: Lista de IDs dos elementos alvo da regra. O tipo do ID depende de `targetType`.\n - Path: formRules[].targets[]\n Category: rules\n Kind: string\n Description: ID do alvo da regra.\n - Path: formRules[].targetFields\n Category: rules\n Kind: array\n Description: Alias legado para alvos de campo.\n - Path: formRules[].targetFields[]\n Category: rules\n Kind: string\n Description: ID do campo alvo (alias legado).\n - Path: formRules[].effect.condition\n Category: rules\n Kind: expression\n Description: Condicao canonica da regra, expressa em Json Logic.\n - Path: formCommandRules\n Category: rules\n Kind: array\n Description: Regras condicionais de comando avaliadas depois que formRules estabilizam valores calculados.\n - Path: formCommandRules[].condition\n Category: rules\n Kind: expression\n Description: Condicao Json Logic avaliada sobre formData estabilizado, incluindo field values calculados.\n - Path: formCommandRules[].effects[].kind\n Category: rules\n Kind: enum\n Description: Tipo do efeito de comando. O primeiro corte suporta apenas global-action.\n - Path: formCommandRules[].effects[].globalAction\n Category: rules\n Kind: object\n Description: GlobalActionRef estruturado executado por GlobalActionService.executeRef quando a regra entra na condicao.\n - Path: formCommandRules[].policy\n Category: rules\n Kind: object\n Description: Politica operacional do comando: trigger, distinct, distinctBy, debounceMs, errorPolicy e runOnInitialEvaluation.\n - Path: formRulesState\n Category: rules\n Kind: object\n Description: Estado interno do builder de regras (metadados visuais).\n - Path: hooks\n Category: hooks\n Kind: object\n Description: Declarações de hooks por estágio do ciclo de vida do formulário.\n - Path: hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeInit.\n - Path: hooks.beforeInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterInit.\n - Path: hooks.afterInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeValidate.\n - Path: hooks.beforeValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterValidate.\n - Path: hooks.afterValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeSubmit.\n - Path: hooks.beforeSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterSubmit.\n - Path: hooks.afterSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.onError[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para onError.\n - Path: hooks.onError[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.onError[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.onError[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.onError[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hints.dataModes.create\n Category: form_config\n Kind: string\n Description: Dica para o modo de criação de dados.\n - Path: hints.dataModes.edit\n Category: form_config\n Kind: string\n Description: Dica para o modo de edição de dados.\n - Path: hints.dataModes.view\n Category: form_config\n Kind: string\n Description: Dica para o modo de visualização de dados.\n - Path: hints.uiModes.presentation\n Category: form_config\n Kind: string\n Description: Dica para o modo de apresentação da UI.\n - Path: hints.uiModes.readonly\n Category: form_config\n Kind: string\n Description: Dica para o modo de somente leitura da UI.\n - Path: hints.uiModes.disabled\n Category: form_config\n Kind: string\n Description: Dica para o modo desabilitado da UI.\n - Path: hints.uiModes.visible\n Category: form_config\n Kind: string\n Description: Dica para o modo de visibilidade da UI.\n - Path: fieldMetadata[].id\n Category: identity\n Kind: string\n Description: Identificador unico da instancia do componente.\n - Path: fieldMetadata[].version\n Category: identity\n Kind: string\n Description: Versao do schema de metadata (migracao).\n - Path: fieldMetadata[].context\n Category: identity\n Kind: enum\n Description: Contexto de uso do componente (form/filter/table/dialog/standalone).\n - Path: fieldMetadata[].createdAt\n Category: misc\n Kind: string\n Description: Timestamp de criacao (ISO).\n - Path: fieldMetadata[].updatedAt\n Category: misc\n Kind: string\n Description: Timestamp de atualizacao (ISO).\n - Path: fieldMetadata[].tags\n Category: identity\n Kind: array\n Description: Tags para categorizacao e busca.\n - Path: fieldMetadata[].cssClass\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao host do componente.\n - Path: fieldMetadata[].style\n Category: appearance\n Kind: object\n Description: Estilos inline (objeto CSS).\n - Path: fieldMetadata[].dataAttributes\n Category: data\n Kind: object\n Description: Data attributes para teste/analytics.\n - Path: fieldMetadata[].name\n Category: identity\n Kind: string\n Description: Identificador único do campo. Essencial para binding.\n - Path: fieldMetadata[].label\n Category: identity\n Kind: string\n Description: Rótulo principal exibido para o usuário.\n - Path: fieldMetadata[].placeholder\n Category: identity\n Kind: string\n Description: Texto temporário exibido quando vazio.\n - Path: fieldMetadata[].hint\n Category: identity\n Kind: string\n Description: Texto de ajuda exibido abaixo do campo.\n - Path: fieldMetadata[].helpText\n Category: identity\n Kind: string\n Description: Texto semântico de ajuda publicado pelo schema/DTO.\n - Path: fieldMetadata[].tooltip\n Category: identity\n Kind: string\n Description: Texto exibido ao passar o mouse.\n - Path: fieldMetadata[].tooltipOnHover\n Category: identity\n Kind: boolean\n Description: Habilita apresentação do tooltip no hover quando suportado pelo renderer.\n - Path: fieldMetadata[].description\n Category: identity\n Kind: string\n Description: Descrição detalhada (usada em documentação ou helps extensos).\n - Path: fieldMetadata[].selectionMode\n Category: behavior\n Kind: enum\n Description: Semântica de seleção explícita para controles de escolha.\n - Path: fieldMetadata[].variant\n Category: appearance\n Kind: string\n Description: Variante visual/semântica do controle.\n - Path: fieldMetadata[].density\n Category: appearance\n Kind: enum\n Description: Densidade visual do shell do controle.\n - Path: fieldMetadata[].links\n Category: identity\n Kind: array\n Description: Links ricos associados ao campo, úteis em consentimentos e conteúdo legal.\n - Path: fieldMetadata[].group\n Category: identity\n Kind: string\n Description: Agrupador lógico do campo.\n - Path: fieldMetadata[].order\n Category: layout\n Kind: number\n Description: Ordem de exibição do campo.\n - Path: fieldMetadata[].width\n Category: layout\n Kind: string\n Description: Largura do campo (ex: 50%, 100px).\n - Path: fieldMetadata[].isFlex\n Category: layout\n Kind: boolean\n Description: Se true, usa flex-grow para preencher espaço.\n - Path: fieldMetadata[].controlType\n Category: behavior\n Kind: enum\n Description: Tipo do componente de UI (input, select, datepicker, etc).\n - Path: fieldMetadata[].dataType\n Category: data\n Kind: enum\n Description: Tipo de dado do campo (text, number, date, etc).\n - Path: fieldMetadata[].source\n Category: data\n Kind: enum\n Description: Origem semântica do campo. Use local para campos do host que não vêm do schema backend.\n - Path: fieldMetadata[].transient\n Category: data\n Kind: boolean\n Description: Marca o campo como temporário/local para preenchimento. O dynamic-form omite do submit por padrão.\n - Path: fieldMetadata[].submitPolicy\n Category: behavior\n Kind: enum\n Description: Política de submit para sobrescrever o padrão de campos locais/transient.\n - Path: fieldMetadata[].materialDesign.appearance\n Category: appearance\n Kind: enum\n Description: Aparência do campo Material (fill/outline).\n - Path: fieldMetadata[].materialDesign.color\n Category: appearance\n Kind: enum\n Description: Tema de cor Material (primary/accent/warn).\n - Path: fieldMetadata[].materialDesign.floatLabel\n Category: appearance\n Kind: enum\n Description: Comportamento do rótulo flutuante.\n - Path: fieldMetadata[].materialDesign.subscriptSizing\n Category: appearance\n Kind: enum\n Description: Estratégia de sizing do subscript (erros/hints).\n - Path: fieldMetadata[].materialDesign.hideRequiredMarker\n Category: appearance\n Kind: boolean\n Description: Oculta o asterisco de campo obrigatório.\n - Path: fieldMetadata[].materialDesign.density\n Category: appearance\n Kind: enum\n Description: Densidade do campo Material.\n - Path: fieldMetadata[].materialDesign.disableRipple\n Category: appearance\n Kind: boolean\n Description: Desativa ripple/ondulação em componentes Material.\n - Path: fieldMetadata[].materialDesign.customPalette\n Category: appearance\n Kind: object\n Description: Override de paleta (primary/accent/warn).\n - Path: fieldMetadata[].materialDesign.animations\n Category: appearance\n Kind: object\n Description: Configuração de animações (disable, duration, easing).\n - Path: fieldMetadata[].prefixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido antes do valor.\n - Path: fieldMetadata[].suffixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido depois do valor.\n - Path: fieldMetadata[].iconPosition\n Category: appearance\n Kind: enum\n Description: Posição preferencial do ícone principal.\n - Path: fieldMetadata[].iconSize\n Category: appearance\n Kind: enum\n Description: Tamanho do ícone.\n - Path: fieldMetadata[].iconColor\n Category: appearance\n Kind: string\n Description: Cor semântica ou token de cor aplicado ao ícone principal.\n - Path: fieldMetadata[].iconClass\n Category: appearance\n Kind: string\n Description: Classe CSS controlada pelo host para o ícone principal.\n - Path: fieldMetadata[].iconStyle\n Category: appearance\n Kind: string\n Description: Estilo visual semântico do ícone quando o renderer suportar variações.\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n - Path: fieldMetadata[].valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n - Path: fieldMetadata[].presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n - Path: fieldMetadata[].presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n - Path: fieldMetadata[].presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n - Path: fieldMetadata[].presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n - Path: fieldMetadata[].presentation.visualization.fallbackText\n Category: accessibility\n Kind: string\n Description: Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.\n - Path: fieldMetadata[].presentationRules\n Category: appearance\n Kind: array\n Description: Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.\n - Path: fieldMetadata[].presentationRules[].when\n Category: behavior\n Kind: object\n Description: Guarda Json Logic avaliada contra o contexto de apresentacao do campo.\n - Path: fieldMetadata[].presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n - Path: fieldMetadata[].options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n - Path: fieldMetadata[].fieldAccess\n Category: behavior\n Kind: object\n Description: Politica canonica de UX para visibilidade/edicao por authorities publicadas pelo backend.\n - Path: fieldMetadata[].fieldAccess.visibleForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem ver o campo no runtime quando a UX tiver claims explicitas.\n - Path: fieldMetadata[].fieldAccess.editableForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem editar o campo no runtime quando a UX tiver claims explicitas.\n - Path: fieldMetadata[].fieldAccess.reason\n Category: misc\n Kind: string\n Description: Justificativa explicativa/auditavel da politica de acesso do campo.\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\nComponent Capabilities:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\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 - 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 - 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 - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\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 - 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 - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\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 - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\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 - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\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 - 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 - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\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 - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\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 - 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 - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\nCapability Notes:\n - Este catalogo descreve inputs e outputs do componente.\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.\n",
|
|
8331
8370
|
"sourcePointer": "praxis-ui-angular/projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
|
|
8332
|
-
"contentHash": "
|
|
8371
|
+
"contentHash": "4a5b5fb3096039768a14041ba1941db8cefe37003e03fdd9fad6a6fd46a223ee",
|
|
8333
8372
|
"sourceKind": "component_definition",
|
|
8334
8373
|
"sourceId": "praxis-dynamic-form",
|
|
8335
8374
|
"corpusVersion": "1.0.0"
|
|
@@ -8347,9 +8386,9 @@
|
|
|
8347
8386
|
{
|
|
8348
8387
|
"chunkIndex": 3,
|
|
8349
8388
|
"chunkKind": "context_pack",
|
|
8350
|
-
"content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"optionsByPath\": {\n \"fieldMetadata[].controlType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"input\",\n \"label\": \"Input\"\n },\n {\n \"value\": \"textarea\",\n \"label\": \"Textarea\"\n },\n {\n \"value\": \"email\",\n \"label\": \"Email\"\n },\n {\n \"value\": \"password\",\n \"label\": \"Password\"\n },\n {\n \"value\": \"search\",\n \"label\": \"Search\"\n },\n {\n \"value\": \"url\",\n \"label\": \"URL\"\n },\n {\n \"value\": \"phone\",\n \"label\": \"Phone\"\n },\n {\n \"value\": \"cpfCnpjInput\",\n \"label\": \"CPF/CNPJ\"\n },\n {\n \"value\": \"numericTextBox\",\n \"label\": \"Number\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"priceRange\",\n \"label\": \"Price range\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date picker\"\n },\n {\n \"value\": \"dateRange\",\n \"label\": \"Date range\"\n },\n {\n \"value\": \"dateInput\",\n \"label\": \"Date input\"\n },\n {\n \"value\": \"dateTime\",\n \"label\": \"Datetime\"\n },\n {\n \"value\": \"dateTimeRange\",\n \"label\": \"Datetime range\"\n },\n {\n \"value\": \"dateTimeLocal\",\n \"label\": \"Datetime local\"\n },\n {\n \"value\": \"time\",\n \"label\": \"Time input\"\n },\n {\n \"value\": \"timePicker\",\n \"label\": \"Time picker\"\n },\n {\n \"value\": \"timeRange\",\n \"label\": \"Time range\"\n },\n {\n \"value\": \"week\",\n \"label\": \"Week input\"\n },\n {\n \"value\": \"month\",\n \"label\": \"Month input\"\n },\n {\n \"value\": \"year\",\n \"label\": \"Year input\"\n },\n {\n \"value\": \"select\",\n \"label\": \"Select\"\n },\n {\n \"value\": \"multiSelect\",\n \"label\": \"Multi select\"\n },\n {\n \"value\": \"multiSelectTree\",\n \"label\": \"Multi select tree\"\n },\n {\n \"value\": \"treeSelect\",\n \"label\": \"Tree select\"\n },\n {\n \"value\": \"transferList\",\n \"label\": \"Transfer list\"\n },\n {\n \"value\": \"autoComplete\",\n \"label\": \"Autocomplete\"\n },\n {\n \"value\": \"searchable-select\",\n \"label\": \"Searchable select\"\n },\n {\n \"value\": \"async-select\",\n \"label\": \"Async select\"\n },\n {\n \"value\": \"radio\",\n \"label\": \"Radio group\"\n },\n {\n \"value\": \"checkbox\",\n \"label\": \"Checkbox group\"\n },\n {\n \"value\": \"selectionList\",\n \"label\": \"Selection list\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"buttonToggle\",\n \"label\": \"Button toggle\"\n },\n {\n \"value\": \"slider\",\n \"label\": \"Slider\"\n },\n {\n \"value\": \"rangeSlider\",\n \"label\": \"Range slider\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"chipInput\",\n \"label\": \"Chips\"\n },\n {\n \"value\": \"chipList\",\n \"label\": \"Chip list\"\n },\n {\n \"value\": \"upload\",\n \"label\": \"File upload\"\n },\n {\n \"value\": \"color\",\n \"label\": \"Color input\"\n },\n {\n \"value\": \"colorPicker\",\n \"label\": \"Color picker\"\n },\n {\n \"value\": \"cronBuilder\",\n \"label\": \"Cron builder\"\n }\n ]\n },\n \"fieldMetadata[].source\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"schema\",\n \"label\": \"Schema field\"\n },\n {\n \"value\": \"local\",\n \"label\": \"Local field\"\n }\n ]\n },\n \"fieldMetadata[].submitPolicy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"omit\",\n \"label\": \"Omit from submit payload\"\n },\n {\n \"value\": \"include\",\n \"label\": \"Include in submit payload\"\n },\n {\n \"value\": \"includeWhenDirty\",\n \"label\": \"Include only when dirty\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"fill\",\n \"label\": \"Fill\"\n },\n {\n \"value\": \"outline\",\n \"label\": \"Outline\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.floatLabel\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n },\n {\n \"value\": \"always\",\n \"label\": \"Always\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.density\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"comfortable\",\n \"label\": \"Comfortable\"\n },\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"dense\",\n \"label\": \"Dense\"\n }\n ]\n },\n \"actions.position\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"left\",\n \"label\": \"Left\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"right\",\n \"label\": \"Right\"\n },\n {\n \"value\": \"justified\",\n \"label\": \"Justified\"\n },\n {\n \"value\": \"split\",\n \"label\": \"Split\"\n }\n ]\n },\n \"actions.orientation\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"horizontal\",\n \"label\": \"Horizontal\"\n },\n {\n \"value\": \"vertical\",\n \"label\": \"Vertical\"\n }\n ]\n },\n \"actions.spacing\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"normal\",\n \"label\": \"Normal\"\n },\n {\n \"value\": \"spacious\",\n \"label\": \"Spacious\"\n }\n ]\n },\n \"actions.placement\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"insideLastSection\",\n \"label\": \"Inside last section\"\n },\n {\n \"value\": \"afterSections\",\n \"label\": \"After sections\"\n },\n {\n \"value\": \"top\",\n \"label\": \"Top\"\n }\n ]\n },\n \"actions.submit.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"submit\",\n \"label\": \"Submit\"\n },\n {\n \"value\": \"reset\",\n \"label\": \"Reset\"\n }\n ]\n },\n \"actions.submit.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"raised\",\n \"label\": \"Raised\"\n },\n {\n \"value\": \"stroked\",\n \"label\": \"Stroked\"\n },\n {\n \"value\": \"flat\",\n \"label\": \"Flat\"\n },\n {\n \"value\": \"fab\",\n \"label\": \"Fab\"\n }\n ]\n },\n \"actions.submit.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"small\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"medium\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"large\",\n \"label\": \"Large\"\n }\n ]\n },\n \"actions.submit.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n },\n {\n \"value\": \"basic\",\n \"label\": \"Basic\"\n }\n ]\n },\n \"sections[].headerAlign\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n }\n ]\n },\n \"sections[].appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"card\",\n \"label\": \"Card\"\n },\n {\n \"value\": \"plain\",\n \"label\": \"Plain\"\n },\n {\n \"value\": \"step\",\n \"label\": \"Step\"\n }\n ]\n },\n \"sections[].sectionHeader.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"avatar-image\",\n \"label\": \"Avatar image\"\n },\n {\n \"value\": \"avatar-initials\",\n \"label\": \"Avatar initials\"\n },\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n }\n ]\n },\n \"sections[].sectionHeader.emptyState\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"placeholder-avatar\",\n \"label\": \"Neutral placeholder\"\n },\n {\n \"value\": \"fallback-icon\",\n \"label\": \"Fallback icon\"\n },\n {\n \"value\": \"none\",\n \"label\": \"None\"\n }\n ]\n },\n \"sections[].sectionHeader.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"sm\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"md\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"lg\",\n \"label\": \"Large\"\n }\n ]\n },\n \"sections[].stepLabel\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"Dados básicos\",\n \"label\": \"Dados básicos\"\n },\n {\n \"value\": \"Detalhes\",\n \"label\": \"Detalhes\"\n },\n {\n \"value\": \"Confirmação\",\n \"label\": \"Confirmação\"\n }\n ]\n },\n \"sections[].titleStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"titleLarge\",\n \"label\": \"Title large\"\n },\n {\n \"value\": \"titleMedium\",\n \"label\": \"Title medium\"\n },\n {\n \"value\": \"titleSmall\",\n \"label\": \"Title small\"\n },\n {\n \"value\": \"headlineSmall\",\n \"label\": \"Headline small\"\n }\n ]\n },\n \"sections[].descriptionStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"bodyLarge\",\n \"label\": \"Body large\"\n },\n {\n \"value\": \"bodyMedium\",\n \"label\": \"Body medium\"\n },\n {\n \"value\": \"bodySmall\",\n \"label\": \"Body small\"\n }\n ]\n },\n \"sections[].rows[].columns[].align\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"end\",\n \"label\": \"End\"\n },\n {\n \"value\": \"stretch\",\n \"label\": \"Stretch\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].kind\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"richContent\",\n \"label\": \"Rich content\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].layout\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"block\",\n \"label\": \"Block\"\n },\n {\n \"value\": \"inline\",\n \"label\": \"Inline\"\n }\n ]\n },\n \"formRules[].targetType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"section\",\n \"label\": \"Section\"\n },\n {\n \"value\": \"row\",\n \"label\": \"Row\"\n },\n {\n \"value\": \"column\",\n \"label\": \"Column\"\n },\n {\n \"value\": \"action\",\n \"label\": \"Action\"\n },\n {\n \"value\": \"visualBlock\",\n \"label\": \"Visual block\"\n }\n ]\n },\n \"formRules[].context\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"visibility\",\n \"label\": \"Visibility\"\n },\n {\n \"value\": \"readOnly\",\n \"label\": \"Read only\"\n },\n {\n \"value\": \"style\",\n \"label\": \"Style\"\n },\n {\n \"value\": \"validation\",\n \"label\": \"Validation\"\n },\n {\n \"value\": \"notification\",\n \"label\": \"Notification\"\n }\n ]\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"field.visibility.hide\",\n \"intentExamples\": [\n \"hide field\",\n \"ocultar campo\",\n \"esconder campo\",\n \"invisible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.visibility.show\",\n \"intentExamples\": [\n \"show field\",\n \"mostrar campo\",\n \"exibir campo\",\n \"visible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.label.set\",\n \"intentExamples\": [\n \"label\",\n \"rename field\",\n \"renomear campo\",\n \"titulo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"label\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.placeholder.set\",\n \"intentExamples\": [\n \"placeholder\",\n \"hint text\",\n \"texto de ajuda\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"placeholder\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.required.enable\",\n \"intentExamples\": [\n \"required\",\n \"obrigatorio\",\n \"mandatory\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.required.disable\",\n \"intentExamples\": [\n \"optional\",\n \"nao obrigatorio\",\n \"opcional\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.enable\",\n \"intentExamples\": [\n \"readonly\",\n \"somente leitura\",\n \"read only\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.disable\",\n \"intentExamples\": [\n \"editable\",\n \"editavel\",\n \"read write\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.enable\",\n \"intentExamples\": [\n \"disable field\",\n \"desabilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.disable\",\n \"intentExamples\": [\n \"enable field\",\n \"habilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.controlType.set\",\n \"intentExamples\": [\n \"control type\",\n \"tipo de campo\",\n \"controlType\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"controlType\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.prefix.set\",\n \"intentExamples\": [\n \"prefix icon\",\n \"icone prefixo\",\n \"icon before\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"prefixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.suffix.set\",\n \"intentExamples\": [\n \"suffix icon\",\n \"icone sufixo\",\n \"icon after\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"suffixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.title.set\",\n \"intentExamples\": [\n \"section title\",\n \"titulo da secao\",\n \"section name\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"title\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.description.set\",\n \"intentExamples\": [\n \"section description\",\n \"descricao da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"description\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.add\",\n \"intentExamples\": [\n \"add section\",\n \"adicionar secao\",\n \"nova secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{value}}\",\n \"title\": \"{{value}}\",\n \"rows\": []\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da seção é único e relevante.\"\n },\n {\n \"id\": \"section.remove\",\n \"intentExamples\": [\n \"remove section\",\n \"remover secao\",\n \"excluir secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"section.order.set\",\n \"intentExamples\": [\n \"order section\",\n \"reordenar secao\",\n \"mover secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_order\": \"{{value}}\"\n }\n ]\n },\n \"safetyNotes\": \"A reordenação de seções é uma operação que deve ser revisada.\"\n },\n {\n \"id\": \"row.add\",\n \"intentExamples\": [\n \"add row\",\n \"adicionar linha\",\n \"nova linha na secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"columns\": []\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da linha é único e relevante na seção.\"\n },\n {\n \"id\": \"row.remove\",\n \"intentExamples\": [\n \"remove row\",\n \"remover linha\",\n \"excluir linha da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.add\",\n \"intentExamples\": [\n \"add column\",\n \"adicionar coluna\",\n \"nova coluna na linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"items\": []\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da coluna é único e relevante na linha.\"\n },\n {\n \"id\": \"column.remove\",\n \"intentExamples\": [\n \"remove column\",\n \"remover coluna\",\n \"excluir coluna da linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.field.add\",\n \"intentExamples\": [\n \"add field to column\",\n \"adicionar campo a coluna\",\n \"colocar campo na coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"id\": \"field-{{value}}\",\n \"fieldName\": \"{{value}}\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"\n },\n {\n \"id\": \"column.field.remove\",\n \"intentExamples\": [\n \"remove field from column\",\n \"remover campo da coluna\",\n \"tirar campo da coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"fieldName\": \"{{value}}\",\n \"_remove\": true\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover um campo de uma coluna pode alterar o layout do formulário.\"\n },\n {\n \"id\": \"actions.submit.label.set\",\n \"intentExamples\": [\n \"submit label\",\n \"rotulo salvar\",\n \"texto botao enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.submit.visible.set\",\n \"intentExamples\": [\n \"show submit\",\n \"esconder salvar\",\n \"visibilidade enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.label.set\",\n \"intentExamples\": [\n \"cancel label\",\n \"rotulo cancelar\",\n \"texto botao cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.visible.set\",\n \"intentExamples\": [\n \"show cancel\",\n \"esconder cancelar\",\n \"visibilidade cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.label.set\",\n \"intentExamples\": [\n \"reset label\",\n \"rotulo resetar\",\n \"texto botao limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.visible.set\",\n \"intentExamples\": [\n \"show reset\",\n \"esconder reset\",\n \"visibilidade limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"rule.add.visibility\",\n \"intentExamples\": [\n \"add visibility rule\",\n \"regra de visibilidade\",\n \"campo condicional\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{value.id}}\",\n \"name\": \"{{value.name}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{target}}\"\n ],\n \"effect\": {\n \"condition\": \"{{value.condition}}\",\n \"properties\": {\n \"hidden\": false\n },\n \"propertiesWhenFalse\": {\n \"hidden\": true\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Criação de regras requer atenção à lógica e IDs de campos. Teste a regra após a criação.\"\n },\n {\n \"id\": \"rule.remove\",\n \"intentExamples\": [\n \"remove rule\",\n \"excluir regra\",\n \"apagar regra\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"\n },\n {\n \"id\": \"rule.add.dependency\",\n \"intentExamples\": [\n \"adicionar dependencia\",\n \"campo depende de\",\n \"mostrar se\",\n \"obrigatorio se\",\n \"desabilitar se\",\n \"campo condicional\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"triggerField\",\n \"type\": \"STRING\",\n \"description\": \"Campo que controla a regra (ex: tipoPessoa)\"\n },\n {\n \"name\": \"conditionValue\",\n \"type\": \"STRING\",\n \"description\": \"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado pela regra (ex: cnpj)\"\n },\n {\n \"name\": \"effectType\",\n \"type\": \"ENUM\",\n \"options\": [\n \"visibility\",\n \"required\",\n \"disabled\"\n ],\n \"description\": \"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"rule_{{params.triggerField}}_{{params.targetField}}\",\n \"name\": \"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": \"{{params.triggerField}} == \\\"{{params.conditionValue}}\\\"\",\n \"properties\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? false : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? true : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? true : undefined}}\"\n },\n \"propertiesWhenFalse\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? true : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? false : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? false : undefined}}\"\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"\n },\n {\n \"id\": \"rule.add.custom\",\n \"intentExamples\": [\n \"adicionar regra customizada\",\n \"regra complexa\",\n \"logica de formulario\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"id\",\n \"type\": \"STRING\",\n \"description\": \"ID único da regra\"\n },\n {\n \"name\": \"condition\",\n \"type\": \"STRING\",\n \"description\": \"Expressão condicional (ex: idade > 18 && possuiHabilitacao)\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado\"\n },\n {\n \"name\": \"propertyName\",\n \"type\": \"STRING\",\n \"description\": \"Propriedade afetada (hidden, required, disabled, readOnly)\"\n },\n {\n \"name\": \"valueIfTrue\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for verdadeira\"\n },\n {\n \"name\": \"valueIfFalse\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for falsa\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{params.id}}\",\n \"name\": \"Regra Customizada: {{params.id}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": \"{{params.condition}}\",\n \"properties\": {\n \"{{params.propertyName}}\": \"{{params.valueIfTrue}}\"\n },\n \"propertiesWhenFalse\": {\n \"{{params.propertyName}}\": \"{{params.valueIfFalse}}\"\n }\n }\n }\n ]\n }\n }\n ],\n \"fieldResolvers\": {\n \"fieldMetadata[]\": [\n \"name\",\n \"label\"\n ],\n \"sections[]\": [\n \"id\",\n \"title\"\n ],\n \"sections[].rows[].columns[].items[]\": [\n \"id\",\n \"fieldName\"\n ],\n \"sections[].rows[].columns[].fields[]\": []\n },\n \"hints\": [\n \"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\n \"Local fields are real form controls. Create them in fieldMetadata[] with source:\\\"local\\\", usually transient:true and submitPolicy:\\\"omit\\\", then place them as kind:\\\"field\\\" layout items.\",\n \"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\n \"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\n \"Use sections[].rows[].columns[].items[] as the canonical mixed layout order. kind:\\\"field\\\" items reference fieldMetadata; kind:\\\"richContent\\\" items are visual blocks outside submit payload.\",\n \"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\n \"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\n \"For field formRules that must calculate a FormControl value, use effect.properties.value with the closed envelope { expression: <JSON Logic> }, such as { expression: { yearsSince: [{ var: \\\"birthDate\\\" }] } }. Use the closed envelope { literal: <value> } for structured literal objects; do not add extra keys and do not generate TypeScript functions.\",\n \"For conditional side effects, use formCommandRules with effects[].kind:\\\"global-action\\\" and a structured globalAction ref. The visual editor authors the primary effect and preserves secondary effects from advanced JSON. Do not put alert/modal/navigation commands inside formRules[].effect.properties.\",\n \"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\n \"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\n \"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\n \"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\n \"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\n \"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\n \"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\n \"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\n \"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\n \"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\n \"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"\n ]\n }\n}",
|
|
8389
|
+
"content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"optionsByPath\": {\n \"fieldMetadata[].controlType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"input\",\n \"label\": \"Input\"\n },\n {\n \"value\": \"textarea\",\n \"label\": \"Textarea\"\n },\n {\n \"value\": \"email\",\n \"label\": \"Email\"\n },\n {\n \"value\": \"password\",\n \"label\": \"Password\"\n },\n {\n \"value\": \"search\",\n \"label\": \"Search\"\n },\n {\n \"value\": \"url\",\n \"label\": \"URL\"\n },\n {\n \"value\": \"phone\",\n \"label\": \"Phone\"\n },\n {\n \"value\": \"cpfCnpjInput\",\n \"label\": \"CPF/CNPJ\"\n },\n {\n \"value\": \"numericTextBox\",\n \"label\": \"Number\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"priceRange\",\n \"label\": \"Price range\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date picker\"\n },\n {\n \"value\": \"dateRange\",\n \"label\": \"Date range\"\n },\n {\n \"value\": \"dateInput\",\n \"label\": \"Date input\"\n },\n {\n \"value\": \"dateTime\",\n \"label\": \"Datetime\"\n },\n {\n \"value\": \"dateTimeRange\",\n \"label\": \"Datetime range\"\n },\n {\n \"value\": \"dateTimeLocal\",\n \"label\": \"Datetime local\"\n },\n {\n \"value\": \"time\",\n \"label\": \"Time input\"\n },\n {\n \"value\": \"timePicker\",\n \"label\": \"Time picker\"\n },\n {\n \"value\": \"timeRange\",\n \"label\": \"Time range\"\n },\n {\n \"value\": \"week\",\n \"label\": \"Week input\"\n },\n {\n \"value\": \"month\",\n \"label\": \"Month input\"\n },\n {\n \"value\": \"year\",\n \"label\": \"Year input\"\n },\n {\n \"value\": \"select\",\n \"label\": \"Select\"\n },\n {\n \"value\": \"multiSelect\",\n \"label\": \"Multi select\"\n },\n {\n \"value\": \"multiSelectTree\",\n \"label\": \"Multi select tree\"\n },\n {\n \"value\": \"treeSelect\",\n \"label\": \"Tree select\"\n },\n {\n \"value\": \"transferList\",\n \"label\": \"Transfer list\"\n },\n {\n \"value\": \"autoComplete\",\n \"label\": \"Autocomplete\"\n },\n {\n \"value\": \"searchable-select\",\n \"label\": \"Searchable select\"\n },\n {\n \"value\": \"async-select\",\n \"label\": \"Async select\"\n },\n {\n \"value\": \"radio\",\n \"label\": \"Radio group\"\n },\n {\n \"value\": \"checkbox\",\n \"label\": \"Checkbox group\"\n },\n {\n \"value\": \"selectionList\",\n \"label\": \"Selection list\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"buttonToggle\",\n \"label\": \"Button toggle\"\n },\n {\n \"value\": \"slider\",\n \"label\": \"Slider\"\n },\n {\n \"value\": \"rangeSlider\",\n \"label\": \"Range slider\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"chipInput\",\n \"label\": \"Chips\"\n },\n {\n \"value\": \"chipList\",\n \"label\": \"Chip list\"\n },\n {\n \"value\": \"upload\",\n \"label\": \"File upload\"\n },\n {\n \"value\": \"color\",\n \"label\": \"Color input\"\n },\n {\n \"value\": \"colorPicker\",\n \"label\": \"Color picker\"\n },\n {\n \"value\": \"cronBuilder\",\n \"label\": \"Cron builder\"\n }\n ]\n },\n \"fieldMetadata[].source\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"schema\",\n \"label\": \"Schema field\"\n },\n {\n \"value\": \"local\",\n \"label\": \"Local field\"\n }\n ]\n },\n \"fieldMetadata[].submitPolicy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"omit\",\n \"label\": \"Omit from submit payload\"\n },\n {\n \"value\": \"include\",\n \"label\": \"Include in submit payload\"\n },\n {\n \"value\": \"includeWhenDirty\",\n \"label\": \"Include only when dirty\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"fill\",\n \"label\": \"Fill\"\n },\n {\n \"value\": \"outline\",\n \"label\": \"Outline\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.floatLabel\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n },\n {\n \"value\": \"always\",\n \"label\": \"Always\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.density\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"comfortable\",\n \"label\": \"Comfortable\"\n },\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"dense\",\n \"label\": \"Dense\"\n }\n ]\n },\n \"actions.position\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"left\",\n \"label\": \"Left\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"right\",\n \"label\": \"Right\"\n },\n {\n \"value\": \"justified\",\n \"label\": \"Justified\"\n },\n {\n \"value\": \"split\",\n \"label\": \"Split\"\n }\n ]\n },\n \"actions.orientation\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"horizontal\",\n \"label\": \"Horizontal\"\n },\n {\n \"value\": \"vertical\",\n \"label\": \"Vertical\"\n }\n ]\n },\n \"actions.spacing\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"normal\",\n \"label\": \"Normal\"\n },\n {\n \"value\": \"spacious\",\n \"label\": \"Spacious\"\n }\n ]\n },\n \"actions.placement\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"insideLastSection\",\n \"label\": \"Inside last section\"\n },\n {\n \"value\": \"afterSections\",\n \"label\": \"After sections\"\n },\n {\n \"value\": \"top\",\n \"label\": \"Top\"\n }\n ]\n },\n \"actions.submit.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"submit\",\n \"label\": \"Submit\"\n },\n {\n \"value\": \"reset\",\n \"label\": \"Reset\"\n }\n ]\n },\n \"actions.submit.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"raised\",\n \"label\": \"Raised\"\n },\n {\n \"value\": \"stroked\",\n \"label\": \"Stroked\"\n },\n {\n \"value\": \"flat\",\n \"label\": \"Flat\"\n },\n {\n \"value\": \"fab\",\n \"label\": \"Fab\"\n }\n ]\n },\n \"actions.submit.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"small\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"medium\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"large\",\n \"label\": \"Large\"\n }\n ]\n },\n \"actions.submit.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n },\n {\n \"value\": \"basic\",\n \"label\": \"Basic\"\n }\n ]\n },\n \"sections[].headerAlign\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n }\n ]\n },\n \"sections[].appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"card\",\n \"label\": \"Card\"\n },\n {\n \"value\": \"plain\",\n \"label\": \"Plain\"\n },\n {\n \"value\": \"step\",\n \"label\": \"Step\"\n }\n ]\n },\n \"sections[].sectionHeader.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"avatar-image\",\n \"label\": \"Avatar image\"\n },\n {\n \"value\": \"avatar-initials\",\n \"label\": \"Avatar initials\"\n },\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n }\n ]\n },\n \"sections[].sectionHeader.emptyState\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"placeholder-avatar\",\n \"label\": \"Neutral placeholder\"\n },\n {\n \"value\": \"fallback-icon\",\n \"label\": \"Fallback icon\"\n },\n {\n \"value\": \"none\",\n \"label\": \"None\"\n }\n ]\n },\n \"sections[].sectionHeader.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"sm\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"md\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"lg\",\n \"label\": \"Large\"\n }\n ]\n },\n \"sections[].stepLabel\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"Dados básicos\",\n \"label\": \"Dados básicos\"\n },\n {\n \"value\": \"Detalhes\",\n \"label\": \"Detalhes\"\n },\n {\n \"value\": \"Confirmação\",\n \"label\": \"Confirmação\"\n }\n ]\n },\n \"sections[].titleStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"titleLarge\",\n \"label\": \"Title large\"\n },\n {\n \"value\": \"titleMedium\",\n \"label\": \"Title medium\"\n },\n {\n \"value\": \"titleSmall\",\n \"label\": \"Title small\"\n },\n {\n \"value\": \"headlineSmall\",\n \"label\": \"Headline small\"\n }\n ]\n },\n \"sections[].descriptionStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"bodyLarge\",\n \"label\": \"Body large\"\n },\n {\n \"value\": \"bodyMedium\",\n \"label\": \"Body medium\"\n },\n {\n \"value\": \"bodySmall\",\n \"label\": \"Body small\"\n }\n ]\n },\n \"sections[].rows[].columns[].align\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"end\",\n \"label\": \"End\"\n },\n {\n \"value\": \"stretch\",\n \"label\": \"Stretch\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].kind\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"richContent\",\n \"label\": \"Rich content\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].layout\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"block\",\n \"label\": \"Block\"\n },\n {\n \"value\": \"inline\",\n \"label\": \"Inline\"\n }\n ]\n },\n \"formRules[].targetType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"section\",\n \"label\": \"Section\"\n },\n {\n \"value\": \"row\",\n \"label\": \"Row\"\n },\n {\n \"value\": \"column\",\n \"label\": \"Column\"\n },\n {\n \"value\": \"action\",\n \"label\": \"Action\"\n },\n {\n \"value\": \"visualBlock\",\n \"label\": \"Visual block\"\n }\n ]\n },\n \"formRules[].context\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"visibility\",\n \"label\": \"Visibility\"\n },\n {\n \"value\": \"readOnly\",\n \"label\": \"Read only\"\n },\n {\n \"value\": \"style\",\n \"label\": \"Style\"\n },\n {\n \"value\": \"validation\",\n \"label\": \"Validation\"\n },\n {\n \"value\": \"notification\",\n \"label\": \"Notification\"\n }\n ]\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"field.visibility.hide\",\n \"intentExamples\": [\n \"hide field\",\n \"ocultar campo\",\n \"esconder campo\",\n \"invisible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.visibility.show\",\n \"intentExamples\": [\n \"show field\",\n \"mostrar campo\",\n \"exibir campo\",\n \"visible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.label.set\",\n \"intentExamples\": [\n \"label\",\n \"rename field\",\n \"renomear campo\",\n \"titulo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"label\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.placeholder.set\",\n \"intentExamples\": [\n \"placeholder\",\n \"hint text\",\n \"texto de ajuda\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"placeholder\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.required.enable\",\n \"intentExamples\": [\n \"required\",\n \"obrigatorio\",\n \"mandatory\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.required.disable\",\n \"intentExamples\": [\n \"optional\",\n \"nao obrigatorio\",\n \"opcional\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.enable\",\n \"intentExamples\": [\n \"readonly\",\n \"somente leitura\",\n \"read only\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.disable\",\n \"intentExamples\": [\n \"editable\",\n \"editavel\",\n \"read write\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.enable\",\n \"intentExamples\": [\n \"disable field\",\n \"desabilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.disable\",\n \"intentExamples\": [\n \"enable field\",\n \"habilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.controlType.set\",\n \"intentExamples\": [\n \"control type\",\n \"tipo de campo\",\n \"controlType\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"controlType\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.prefix.set\",\n \"intentExamples\": [\n \"prefix icon\",\n \"icone prefixo\",\n \"icon before\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"prefixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.suffix.set\",\n \"intentExamples\": [\n \"suffix icon\",\n \"icone sufixo\",\n \"icon after\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"suffixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.title.set\",\n \"intentExamples\": [\n \"section title\",\n \"titulo da secao\",\n \"section name\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"title\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.description.set\",\n \"intentExamples\": [\n \"section description\",\n \"descricao da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"description\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.add\",\n \"intentExamples\": [\n \"add section\",\n \"adicionar secao\",\n \"nova secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{value}}\",\n \"title\": \"{{value}}\",\n \"rows\": []\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da seção é único e relevante.\"\n },\n {\n \"id\": \"section.remove\",\n \"intentExamples\": [\n \"remove section\",\n \"remover secao\",\n \"excluir secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"section.order.set\",\n \"intentExamples\": [\n \"order section\",\n \"reordenar secao\",\n \"mover secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_order\": \"{{value}}\"\n }\n ]\n },\n \"safetyNotes\": \"A reordenação de seções é uma operação que deve ser revisada.\"\n },\n {\n \"id\": \"row.add\",\n \"intentExamples\": [\n \"add row\",\n \"adicionar linha\",\n \"nova linha na secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"columns\": []\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da linha é único e relevante na seção.\"\n },\n {\n \"id\": \"row.remove\",\n \"intentExamples\": [\n \"remove row\",\n \"remover linha\",\n \"excluir linha da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.add\",\n \"intentExamples\": [\n \"add column\",\n \"adicionar coluna\",\n \"nova coluna na linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"items\": []\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da coluna é único e relevante na linha.\"\n },\n {\n \"id\": \"column.remove\",\n \"intentExamples\": [\n \"remove column\",\n \"remover coluna\",\n \"excluir coluna da linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.field.add\",\n \"intentExamples\": [\n \"add field to column\",\n \"adicionar campo a coluna\",\n \"colocar campo na coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"id\": \"field-{{value}}\",\n \"fieldName\": \"{{value}}\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"\n },\n {\n \"id\": \"column.field.remove\",\n \"intentExamples\": [\n \"remove field from column\",\n \"remover campo da coluna\",\n \"tirar campo da coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"fieldName\": \"{{value}}\",\n \"_remove\": true\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover um campo de uma coluna pode alterar o layout do formulário.\"\n },\n {\n \"id\": \"actions.submit.label.set\",\n \"intentExamples\": [\n \"submit label\",\n \"rotulo salvar\",\n \"texto botao enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.submit.visible.set\",\n \"intentExamples\": [\n \"show submit\",\n \"esconder salvar\",\n \"visibilidade enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.label.set\",\n \"intentExamples\": [\n \"cancel label\",\n \"rotulo cancelar\",\n \"texto botao cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.visible.set\",\n \"intentExamples\": [\n \"show cancel\",\n \"esconder cancelar\",\n \"visibilidade cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.label.set\",\n \"intentExamples\": [\n \"reset label\",\n \"rotulo resetar\",\n \"texto botao limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.visible.set\",\n \"intentExamples\": [\n \"show reset\",\n \"esconder reset\",\n \"visibilidade limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"rule.add.visibility\",\n \"intentExamples\": [\n \"add visibility rule\",\n \"regra de visibilidade\",\n \"campo condicional\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{value.id}}\",\n \"name\": \"{{value.name}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{target}}\"\n ],\n \"effect\": {\n \"condition\": \"{{value.condition}}\",\n \"properties\": {\n \"hidden\": false\n },\n \"propertiesWhenFalse\": {\n \"hidden\": true\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao.\"\n },\n {\n \"id\": \"rule.remove\",\n \"intentExamples\": [\n \"remove rule\",\n \"excluir regra\",\n \"apagar regra\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"\n },\n {\n \"id\": \"rule.add.dependency\",\n \"intentExamples\": [\n \"adicionar dependencia\",\n \"campo depende de\",\n \"mostrar se\",\n \"obrigatorio se\",\n \"desabilitar se\",\n \"campo condicional\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"triggerField\",\n \"type\": \"STRING\",\n \"description\": \"Campo que controla a regra (ex: tipoPessoa)\"\n },\n {\n \"name\": \"conditionValue\",\n \"type\": \"STRING\",\n \"description\": \"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado pela regra (ex: cnpj)\"\n },\n {\n \"name\": \"effectType\",\n \"type\": \"ENUM\",\n \"options\": [\n \"visibility\",\n \"required\",\n \"disabled\"\n ],\n \"description\": \"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"rule_{{params.triggerField}}_{{params.targetField}}\",\n \"name\": \"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"{{params.triggerField}}\"\n },\n \"{{params.conditionValue}}\"\n ]\n },\n \"properties\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? false : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? true : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? true : undefined}}\"\n },\n \"propertiesWhenFalse\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? true : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? false : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? false : undefined}}\"\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"\n },\n {\n \"id\": \"rule.add.custom\",\n \"intentExamples\": [\n \"adicionar regra customizada\",\n \"regra complexa\",\n \"logica de formulario\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"id\",\n \"type\": \"STRING\",\n \"description\": \"ID único da regra\"\n },\n {\n \"name\": \"condition\",\n \"type\": \"STRING\",\n \"description\": \"Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \\\"and\\\": [{ \\\">\\\": [{ \\\"var\\\": \\\"idade\\\" }, 18] }, { \\\"==\\\": [{ \\\"var\\\": \\\"possuiHabilitacao\\\" }, true] }] })\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado\"\n },\n {\n \"name\": \"propertyName\",\n \"type\": \"STRING\",\n \"description\": \"Propriedade afetada (hidden, required, disabled, readOnly)\"\n },\n {\n \"name\": \"valueIfTrue\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for verdadeira\"\n },\n {\n \"name\": \"valueIfFalse\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for falsa\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{params.id}}\",\n \"name\": \"Regra Customizada: {{params.id}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": \"{{params.condition}}\",\n \"properties\": {\n \"{{params.propertyName}}\": \"{{params.valueIfTrue}}\"\n },\n \"propertiesWhenFalse\": {\n \"{{params.propertyName}}\": \"{{params.valueIfFalse}}\"\n }\n }\n }\n ]\n }\n }\n ],\n \"fieldResolvers\": {\n \"fieldMetadata[]\": [\n \"name\",\n \"label\"\n ],\n \"sections[]\": [\n \"id\",\n \"title\"\n ],\n \"sections[].rows[].columns[].items[]\": [\n \"id\",\n \"fieldName\"\n ],\n \"sections[].rows[].columns[].fields[]\": []\n },\n \"hints\": [\n \"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\n \"Local fields are real form controls. Create them in fieldMetadata[] with source:\\\"local\\\", usually transient:true and submitPolicy:\\\"omit\\\", then place them as kind:\\\"field\\\" layout items.\",\n \"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\n \"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\n \"Use sections[].rows[].columns[].items[] as the canonical mixed layout order. kind:\\\"field\\\" items reference fieldMetadata; kind:\\\"richContent\\\" items are visual blocks outside submit payload.\",\n \"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\n \"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\n \"For field formRules that must calculate a FormControl value, use effect.properties.value with the closed envelope { expression: <JSON Logic> }, such as { expression: { yearsSince: [{ var: \\\"birthDate\\\" }] } }. Use the closed envelope { literal: <value> } for structured literal objects; do not add extra keys and do not generate TypeScript functions.\",\n \"For conditional side effects, use formCommandRules with effects[].kind:\\\"global-action\\\" and a structured globalAction ref. The visual editor authors the primary effect and preserves secondary effects from advanced JSON. Do not put alert/modal/navigation commands inside formRules[].effect.properties.\",\n \"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\n \"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\n \"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\n \"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\n \"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\n \"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\n \"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\n \"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\n \"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\n \"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\n \"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"\n ]\n }\n}",
|
|
8351
8390
|
"sourcePointer": "praxis-ui-angular/projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
8352
|
-
"contentHash": "
|
|
8391
|
+
"contentHash": "fce0638895fb6284d9f1f6c896a2eeb5945f4877b418f942a1872f60b1541c15",
|
|
8353
8392
|
"sourceKind": "component_definition",
|
|
8354
8393
|
"sourceId": "praxis-dynamic-form",
|
|
8355
8394
|
"corpusVersion": "1.0.0"
|
|
@@ -8387,9 +8426,9 @@
|
|
|
8387
8426
|
{
|
|
8388
8427
|
"chunkIndex": 7,
|
|
8389
8428
|
"chunkKind": "recipe",
|
|
8390
|
-
"content": "{\n \"_comment\": \"Generic recipe for PraxisDynamicForm (FormConfig). Values are placeholders for AI examples.\",\n \"templateMeta\": {\n \"variantId\": \"form-config\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"tags\": [\n \"full\",\n \"config\"\n ],\n \"useWhen\": \"gerar form completo com layout, campos e regras\",\n \"examplePrompts\": [\n \"gere um formulario completo com campos e layout\",\n \"crie um form completo baseado no schema\"\n ]\n },\n \"metadata\": {\n \"version\": \"2.0.0\",\n \"lastUpdated\": \"2024-02-01T12:00:00Z\",\n \"source\": \"local\",\n \"serverHash\": \"hash-abc-123\",\n \"schemaId\": \"path:/api/employees#request\",\n \"schemaContext\": {\n \"path\": \"/api/employees\",\n \"operation\": \"POST\",\n \"schemaType\": \"request\",\n \"internal\": false,\n \"tenant\": \"default\",\n \"locale\": \"pt-BR\"\n },\n \"customizations\": [\n {\n \"fieldName\": \"salary\",\n \"property\": \"label\",\n \"oldValue\": \"Salary\",\n \"newValue\": \"Salario\",\n \"timestamp\": \"2024-01-20T10:00:00Z\",\n \"source\": \"user\"\n }\n ]\n },\n \"api\": {\n \"saveEndpoint\": \"/api/employees\",\n \"loadEndpoint\": \"/api/employees/${id}\",\n \"saveMethod\": \"POST\",\n \"timeout\": 15000,\n \"headers\": {\n \"X-Module\": \"HR\",\n \"X-Request-Source\": \"dynamic-form\"\n },\n \"idField\": \"id\",\n \"beforeSave\": \"sanitizeEmployee\",\n \"afterLoad\": \"mapEmployee\"\n },\n \"behavior\": {\n \"confirmOnUnsavedChanges\": true,\n \"trackHistory\": true,\n \"focusFirstError\": true,\n \"scrollToErrors\": true,\n \"clearAfterSave\": false,\n \"redirectAfterSave\": \"/employees\",\n \"reactiveValidation\": true,\n \"reactiveValidationDebounceMs\": 200\n },\n \"messages\": {\n \"createRegistrySuccess\": \"Registro criado com sucesso.\",\n \"updateRegistrySuccess\": \"Registro atualizado com sucesso.\",\n \"createRegistryError\": \"Falha ao criar registro.\",\n \"updateRegistryError\": \"Falha ao atualizar registro.\",\n \"confirmations\": {\n \"submit\": \"Salvar alteracoes?\",\n \"cancel\": \"Descartar alteracoes?\",\n \"reset\": \"Limpar o formulario?\",\n \"archive\": \"Arquivar este registro?\"\n },\n \"customActions\": {\n \"archive\": {\n \"success\": \"Registro arquivado.\",\n \"error\": \"Falha ao arquivar.\",\n \"confirmation\": \"Arquivar registro agora?\"\n },\n \"preview\": {\n \"confirmation\": \"Gerar pre-visualizacao?\"\n }\n },\n \"loading\": {\n \"submit\": \"Salvando...\",\n \"cancel\": \"Cancelando...\",\n \"reset\": \"Limpando...\",\n \"archive\": \"Arquivando...\"\n }\n },\n \"hints\": {\n \"dataModes\": {\n \"create\": \"Preencha os dados para criar um novo registro.\",\n \"edit\": \"Atualize os dados e salve as alteracoes.\",\n \"view\": \"Visualize os dados do registro.\"\n },\n \"uiModes\": {\n \"presentation\": \"Modo apresentacao exibe apenas leitura.\",\n \"readonly\": \"Modo leitura bloqueia edicao.\",\n \"disabled\": \"Campos desabilitados nao permitem interacao.\",\n \"visible\": \"Controle de visibilidade sem destruir controles.\"\n }\n },\n \"hooks\": {\n \"beforeInit\": [\n {\n \"priority\": 100,\n \"timeoutMs\": 1500,\n \"args\": {\n \"source\": \"cache\"\n },\n \"id\": \"load-static-options\"\n }\n ],\n \"afterInit\": [\n {\n \"priority\": 50,\n \"timeoutMs\": 1200,\n \"args\": {\n \"enable\": true\n },\n \"id\": \"attach-shortcuts\"\n }\n ],\n \"beforeValidate\": [\n {\n \"priority\": 80,\n \"timeoutMs\": 1200,\n \"args\": {\n \"country\": \"BR\"\n },\n \"id\": \"normalize-phones\"\n }\n ],\n \"afterValidate\": [\n {\n \"priority\": 10,\n \"timeoutMs\": 1000,\n \"args\": {\n \"report\": \"warnings\"\n },\n \"id\": \"collect-warnings\"\n }\n ],\n \"beforeSubmit\": [\n {\n \"priority\": 100,\n \"timeoutMs\": 2000,\n \"args\": {\n \"trimStrings\": true\n },\n \"id\": \"sanitize-employee\"\n }\n ],\n \"afterSubmit\": [\n {\n \"priority\": 20,\n \"timeoutMs\": 1500,\n \"args\": {\n \"messageKey\": \"employeeSaved\"\n },\n \"id\": \"notify-success\"\n }\n ],\n \"onError\": [\n {\n \"priority\": 0,\n \"timeoutMs\": 1500,\n \"args\": {\n \"messageKey\": \"employeeSaveError\"\n },\n \"id\": \"notify-error\"\n }\n ]\n },\n \"fieldMetadata\": [\n {\n \"name\": \"id\",\n \"label\": \"ID\",\n \"controlType\": \"numericTextBox\",\n \"dataType\": \"number\",\n \"hidden\": true,\n \"readOnly\": true,\n \"description\": \"Backend generated identifier.\"\n },\n {\n \"name\": \"fullName\",\n \"label\": \"Full name\",\n \"controlType\": \"input\",\n \"dataType\": \"text\",\n \"placeholder\": \"Example: Ana Souza\",\n \"prefixIcon\": \"person\",\n \"iconPosition\": \"start\",\n \"iconSize\": \"small\",\n \"validators\": {\n \"required\": true,\n \"minLength\": 3,\n \"maxLength\": 120,\n \"requiredMessage\": \"Name is required\",\n \"minLengthMessage\": \"Min 3 chars\",\n \"minWords\": 2\n },\n \"validationMode\": \"blur\",\n \"debounceTime\": 200,\n \"materialDesign\": {\n \"appearance\": \"outline\",\n \"color\": \"primary\",\n \"floatLabel\": \"auto\",\n \"density\": \"comfortable\",\n \"subscriptSizing\": \"dynamic\",\n \"hideRequiredMarker\": false,\n \"disableRipple\": true,\n \"customPalette\": {\n \"primary\": \"#005f73\",\n \"accent\": \"#0a9396\",\n \"warn\": \"#bb3e03\"\n },\n \"animations\": {\n \"disabled\": false,\n \"duration\": \"150ms\",\n \"easing\": \"ease-out\"\n }\n },\n \"group\": \"identity\",\n \"order\": 1,\n \"width\": \"50%\",\n \"isFlex\": true,\n \"id\": \"field-full-name\",\n \"version\": \"1.0.0\",\n \"context\": \"form\",\n \"createdAt\": \"2024-01-01T00:00:00Z\",\n \"updatedAt\": \"2024-02-01T00:00:00Z\",\n \"tags\": [\n \"identity\",\n \"employee\"\n ],\n \"cssClass\": \"field-full-name\",\n \"style\": {\n \"maxWidth\": \"480px\"\n },\n \"dataAttributes\": {\n \"data-qa\": \"full-name\"\n },\n \"required\": true\n },\n {\n \"name\": \"email\",\n \"label\": \"Email\",\n \"controlType\": \"email\",\n \"dataType\": \"email\",\n \"placeholder\": \"name@company.com\",\n \"validators\": {\n \"required\": true,\n \"email\": true,\n \"emailMessage\": \"Use a valid email.\"\n },\n \"unique\": true,\n \"ariaLabel\": \"Email address\",\n \"ariaDescribedBy\": \"email-help\",\n \"tabIndex\": 2,\n \"accessKey\": \"e\"\n },\n {\n \"name\": \"phone\",\n \"label\": \"Phone\",\n \"controlType\": \"maskedTextBox\",\n \"dataType\": \"text\",\n \"mask\": \"(99) 99999-9999\",\n \"validators\": {\n \"pattern\": \"^\\\\(\\\\d{2}\\\\) \\\\d{4,5}-\\\\d{4}$\",\n \"patternMessage\": \"Use (11) 99999-9999\"\n },\n \"hint\": \"Include area code.\"\n },\n {\n \"name\": \"status\",\n \"label\": \"Status\",\n \"controlType\": \"select\",\n \"options\": [\n {\n \"text\": \"Active\",\n \"value\": \"ACTIVE\",\n \"icon\": \"check_circle\"\n },\n {\n \"text\": \"Inactive\",\n \"value\": \"INACTIVE\",\n \"icon\": \"block\"\n },\n {\n \"text\": \"On leave\",\n \"value\": \"ON_LEAVE\",\n \"icon\": \"schedule\"\n }\n ],\n \"defaultValue\": \"ACTIVE\",\n \"validators\": {\n \"required\": true\n },\n \"materialDesign\": {\n \"appearance\": \"outline\",\n \"color\": \"accent\"\n }\n },\n {\n \"name\": \"departmentId\",\n \"label\": \"Department\",\n \"controlType\": \"select\",\n \"endpoint\": \"/api/departments\",\n \"valueField\": \"id\",\n \"displayField\": \"name\",\n \"queryParams\": {\n \"active\": true\n },\n \"cacheDuration\": 300000,\n \"validators\": {\n \"required\": true\n },\n \"resourcePath\": \"/api/departments\",\n \"filterCriteria\": {\n \"active\": true\n },\n \"optionLabelKey\": \"name\",\n \"optionValueKey\": \"id\",\n \"searchable\": true\n },\n {\n \"name\": \"teamId\",\n \"label\": \"Team\",\n \"controlType\": \"select\",\n \"endpoint\": \"/api/teams\",\n \"valueField\": \"id\",\n \"displayField\": \"name\",\n \"dependencyFields\": [\n \"departmentId\"\n ],\n \"dependencyFilterMap\": {\n \"departmentId\": \"departmentId\"\n },\n \"dependencyValuePath\": \"id\",\n \"dependencyLoadOnChange\": \"immediate\",\n \"dependencyMergeStrategy\": \"replace\",\n \"dependencyDebounceMs\": 200,\n \"resetOnDependentChange\": true,\n \"enableDependencyCascade\": true,\n \"suppressInlineErrorsOnCascade\": true\n },\n {\n \"name\": \"managerId\",\n \"label\": \"Manager\",\n \"controlType\": \"autoComplete\",\n \"endpoint\": \"/api/employees\",\n \"queryParams\": {\n \"role\": \"manager\"\n },\n \"valueField\": \"id\",\n \"displayField\": \"name\",\n \"filterField\": \"name\",\n \"dependencyFields\": [\n \"departmentId\"\n ],\n \"dependencyFilterMap\": {\n \"departmentId\": \"departmentId\"\n },\n \"dependencyLoadOnChange\": \"respectLoadOn\",\n \"disabled\": false\n },\n {\n \"name\": \"hireDate\",\n \"label\": \"Hire date\",\n \"controlType\": \"date\",\n \"dataType\": \"date\",\n \"validators\": {\n \"required\": true\n },\n \"minDate\": \"2020-01-01\",\n \"maxDate\": \"2030-12-31\",\n \"startView\": \"multi-year\",\n \"datepickerTogglePosition\": \"suffix\",\n \"touchUi\": true\n },\n {\n \"name\": \"terminationDate\",\n \"label\": \"Termination date\",\n \"controlType\": \"date\",\n \"conditionalDisplay\": \"status == 'INACTIVE'\",\n \"conditionalRequired\": \"status == 'INACTIVE'\"\n },\n {\n \"name\": \"salary\",\n \"label\": \"Salary\",\n \"controlType\": \"currency\",\n \"dataType\": \"number\",\n \"format\": \"BRL|symbol|2\",\n \"validators\": {\n \"min\": 0,\n \"max\": 999999,\n \"minMessage\": \"Salary must be >= 0\"\n },\n \"min\": 0,\n \"max\": 999999,\n \"step\": 100,\n \"precision\": \"fixed\",\n \"currencyCode\": \"BRL\",\n \"currencyDisplay\": \"symbol\",\n \"prefix\": \"R$\",\n \"suffix\": \"bruto\",\n \"inlineEditing\": true,\n \"transformDisplayValue\": \"formatCurrency\",\n \"transformSaveValue\": \"parseCurrency\"\n },\n {\n \"name\": \"bonusPercent\",\n \"label\": \"Bonus %\",\n \"controlType\": \"slider\",\n \"dataType\": \"number\",\n \"defaultValue\": 10,\n \"validators\": {\n \"min\": 0,\n \"max\": 50\n },\n \"suffixIcon\": \"percent\",\n \"min\": 0,\n \"max\": 50,\n \"step\": 5,\n \"thumbLabel\": true,\n \"showTicks\": true,\n \"vertical\": false,\n \"invert\": false\n },\n {\n \"name\": \"workMode\",\n \"label\": \"Work mode\",\n \"controlType\": \"radio\",\n \"options\": [\n {\n \"text\": \"CLT\",\n \"value\": \"CLT\"\n },\n {\n \"text\": \"PJ\",\n \"value\": \"PJ\"\n },\n {\n \"text\": \"Intern\",\n \"value\": \"INTERN\"\n }\n ],\n \"defaultValue\": \"CLT\"\n },\n {\n \"name\": \"skills\",\n \"label\": \"Skills\",\n \"controlType\": \"multiSelect\",\n \"options\": [\n {\n \"text\": \"Angular\",\n \"value\": \"ANG\"\n },\n {\n \"text\": \"React\",\n \"value\": \"RE\"\n },\n {\n \"text\": \"Node\",\n \"value\": \"NODE\"\n }\n ],\n \"visibleIn\": [\n \"form\",\n \"filter\"\n ],\n \"multiple\": true,\n \"searchable\": true,\n \"clearable\": true,\n \"selectAll\": true,\n \"maxSelections\": 5,\n \"virtualScroll\": true,\n \"emptyOptionText\": \"None\"\n },\n {\n \"name\": \"availability\",\n \"label\": \"Availability\",\n \"controlType\": \"dateRange\",\n \"rangeSeparator\": \" to \"\n },\n {\n \"name\": \"notes\",\n \"label\": \"Notes\",\n \"controlType\": \"textarea\",\n \"validators\": {\n \"maxLength\": 500\n },\n \"hint\": \"Add relevant notes.\",\n \"textTransformApply\": \"displayOnly\",\n \"rows\": 4,\n \"minRows\": 3,\n \"maxRows\": 8,\n \"resize\": \"vertical\",\n \"spellcheck\": true,\n \"inputMode\": \"text\",\n \"textTransform\": \"uppercase\",\n \"readonly\": false,\n \"formHidden\": false,\n \"tableHidden\": true,\n \"filterHidden\": false\n },\n {\n \"name\": \"isActive\",\n \"label\": \"Active\",\n \"controlType\": \"toggle\",\n \"dataType\": \"boolean\",\n \"defaultValue\": true\n },\n {\n \"name\": \"avatar\",\n \"label\": \"Photo\",\n \"controlType\": \"upload\",\n \"accept\": \".png,.jpg,.jpeg\",\n \"multiple\": false,\n \"materialDesign\": {\n \"appearance\": \"outline\"\n },\n \"uploadUrl\": \"/api/uploads/avatars\",\n \"autoUpload\": true,\n \"maxFileSize\": 5242880,\n \"maxFiles\": 2,\n \"fileRestrictions\": {\n \"minResolution\": \"128x128\",\n \"maxResolution\": \"2048x2048\"\n },\n \"chunkSize\": 1048576,\n \"withCredentials\": false,\n \"headers\": {\n \"X-Upload-Source\": \"dynamic-form\"\n },\n \"method\": \"POST\",\n \"saveField\": \"file\"\n },\n {\n \"name\": \"terms\",\n \"label\": \"Accept terms\",\n \"controlType\": \"checkbox\",\n \"validators\": {\n \"requiredChecked\": true\n },\n \"tooltip\": \"Required to submit.\"\n },\n {\n \"name\": \"username\",\n \"label\": \"Username\",\n \"controlType\": \"input\",\n \"dataType\": \"text\",\n \"type\": \"text\",\n \"minLength\": 3,\n \"maxLength\": 20,\n \"pattern\": \"^[a-zA-Z0-9_]+$\",\n \"validators\": {\n \"required\": true,\n \"patternMessage\": \"Use letters, numbers, underscore\"\n },\n \"inputMode\": \"text\",\n \"autoComplete\": \"username\",\n \"readonly\": false,\n \"spellcheck\": false,\n \"textTransform\": \"lowercase\",\n \"placeholder\": \"user_name\"\n },\n {\n \"name\": \"password\",\n \"label\": \"Password\",\n \"controlType\": \"password\",\n \"dataType\": \"text\",\n \"type\": \"password\",\n \"showPasswordToggle\": true,\n \"autoComplete\": \"current-password\",\n \"validators\": {\n \"required\": true,\n \"minLength\": 8\n }\n },\n {\n \"name\": \"country\",\n \"label\": \"Country\",\n \"controlType\": \"select\",\n \"dataType\": \"text\",\n \"options\": [\n {\n \"text\": \"Brazil\",\n \"value\": \"BR\"\n },\n {\n \"text\": \"United States\",\n \"value\": \"US\"\n },\n {\n \"text\": \"Canada\",\n \"value\": \"CA\"\n }\n ],\n \"optionLabelKey\": \"text\",\n \"optionValueKey\": \"value\",\n \"emptyOptionText\": \"Select a country\",\n \"searchable\": true,\n \"clearable\": true,\n \"resourcePath\": \"/api/countries\",\n \"filterCriteria\": {\n \"active\": true\n },\n \"multiple\": false\n },\n {\n \"name\": \"orgTree\",\n \"label\": \"Organization\",\n \"controlType\": \"treeSelect\",\n \"treeConfig\": {\n \"expandByDefault\": true,\n \"selectionMode\": \"single\"\n },\n \"nodes\": [\n {\n \"label\": \"HQ\",\n \"value\": \"hq\",\n \"children\": [\n {\n \"label\": \"Finance\",\n \"value\": \"finance\"\n }\n ]\n },\n {\n \"label\": \"Branch\",\n \"value\": \"branch\"\n }\n ],\n \"multiple\": false\n },\n {\n \"name\": \"ratingScore\",\n \"label\": \"Satisfaction\",\n \"controlType\": \"rating\",\n \"value\": 3,\n \"max\": 5,\n \"ratingMax\": 5,\n \"ratingPrecision\": 0.5,\n \"ratingIcon\": \"star\",\n \"ratingEmptyIcon\": \"star_border\",\n \"ratingAllowHalf\": true\n },\n {\n \"name\": \"progress\",\n \"label\": \"Progress\",\n \"controlType\": \"slider\",\n \"min\": 0,\n \"max\": 100,\n \"step\": 5,\n \"defaultValue\": 65,\n \"thumbLabel\": true,\n \"showTicks\": true\n },\n {\n \"name\": \"avatarDisplay\",\n \"label\": \"Avatar display\",\n \"controlType\": \"avatar\",\n \"imageSrc\": \"https://cdn.example.com/avatars/ana.png\",\n \"imageAlt\": \"User avatar\",\n \"initials\": \"AS\",\n \"avatarShape\": \"circle\",\n \"avatarSize\": \"medium\"\n },\n {\n \"name\": \"ctaButton\",\n \"label\": \"Request access\",\n \"controlType\": \"button\",\n \"icon\": \"send\",\n \"color\": \"primary\",\n \"variant\": \"raised\",\n \"size\": \"medium\",\n \"disabled\": false,\n \"loading\": false,\n \"action\": \"requestAccess\",\n \"actionPayload\": {\n \"role\": \"manager\"\n }\n },\n {\n \"name\": \"aiAssist\",\n \"label\": \"AI assist\",\n \"controlType\": \"button\",\n \"icon\": \"smart_toy\",\n \"color\": \"accent\",\n \"variant\": \"stroked\",\n \"size\": \"medium\",\n \"action\": \"aiAssist\",\n \"actionPayload\": {\n \"prompt\": \"Summarize the candidate profile\",\n \"history\": [\n {\n \"role\": \"user\",\n \"content\": \"Summarize this CV.\"\n },\n {\n \"role\": \"assistant\",\n \"content\": \"Summary goes here.\"\n }\n ]\n },\n \"tooltip\": \"Ask AI to summarize the candidate profile\"\n },\n {\n \"name\": \"themeColor\",\n \"label\": \"Theme color\",\n \"controlType\": \"colorPicker\",\n \"format\": \"hex\",\n \"views\": [\n \"palette\",\n \"gradient\"\n ],\n \"activeView\": \"palette\",\n \"preview\": true,\n \"clearButton\": true,\n \"actionsLayout\": \"end\",\n \"adaptiveMode\": true,\n \"adaptiveTitle\": \"Pick a color\",\n \"adaptiveSubtitle\": \"Brand palette\",\n \"popupSettings\": {\n \"width\": 320\n },\n \"gradientSettings\": {\n \"opacity\": true\n },\n \"paletteSettings\": {\n \"columns\": 8\n },\n \"fillMode\": \"solid\",\n \"rounded\": \"medium\",\n \"size\": \"medium\",\n \"icon\": \"palette\",\n \"iconClass\": \"color-icon\",\n \"svgIcon\": \"custom-palette\",\n \"tabindex\": 0\n },\n {\n \"name\": \"cpf\",\n \"label\": \"CPF/CNPJ\",\n \"controlType\": \"cpfCnpjInput\",\n \"maskType\": \"cpf-cnpj\",\n \"unmaskOnSubmit\": true,\n \"validators\": {\n \"cpf\": true,\n \"cnpj\": true\n }\n },\n {\n \"name\": \"meetingTime\",\n \"label\": \"Meeting time\",\n \"controlType\": \"timePicker\",\n \"enableSeconds\": true,\n \"stepMinute\": 15,\n \"stepSecond\": 30\n }\n ],\n \"sections\": [\n {\n \"id\": \"basic\",\n \"title\": \"Basic data\",\n \"description\": \"Primary profile and status fields.\",\n \"icon\": \"person\",\n \"collapsible\": true,\n \"collapsed\": false,\n \"gapBottom\": 16,\n \"titleGapBottom\": 6,\n \"descriptionGapBottom\": 8,\n \"titleStyle\": \"titleMedium\",\n \"descriptionStyle\": \"bodyMedium\",\n \"titleColor\": \"#1a1a1a\",\n \"descriptionColor\": \"#666666\",\n \"headerAlign\": \"start\",\n \"headerTooltip\": \"Main data\",\n \"rows\": [\n {\n \"id\": \"row-basic-1\",\n \"gap\": 16,\n \"rowGap\": 12,\n \"columns\": [\n {\n \"id\": \"col-basic-1\",\n \"fields\": [\n \"fullName\",\n \"email\"\n ],\n \"span\": {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 6,\n \"lg\": 6,\n \"xl\": 6\n },\n \"padding\": 8,\n \"className\": \"col-basic-main\",\n \"testId\": \"col-basic-main\",\n \"title\": \"Identity\"\n },\n {\n \"id\": \"col-basic-2\",\n \"fields\": [\n \"status\",\n \"hireDate\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n },\n \"hidden\": {\n \"xs\": true,\n \"sm\": false,\n \"md\": false,\n \"lg\": false,\n \"xl\": false\n },\n \"order\": {\n \"xs\": 2,\n \"sm\": 1,\n \"md\": 2,\n \"lg\": 2,\n \"xl\": 1\n }\n }\n ],\n \"title\": \"Core fields\"\n },\n {\n \"id\": \"row-basic-2\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-basic-3\",\n \"fields\": [\n \"phone\",\n \"isActive\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n },\n \"offset\": {\n \"xs\": 0,\n \"sm\": 0,\n \"md\": 1,\n \"lg\": 0,\n \"xl\": 0\n }\n },\n {\n \"id\": \"col-basic-4\",\n \"fields\": [\n \"departmentId\",\n \"teamId\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-basic-3\",\n \"columns\": [\n {\n \"id\": \"col-basic-5\",\n \"fields\": [\n \"managerId\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n }\n ]\n },\n {\n \"id\": \"employment\",\n \"title\": \"Employment\",\n \"description\": \"Contract and compensation.\",\n \"icon\": \"badge\",\n \"collapsible\": true,\n \"collapsed\": false,\n \"rows\": [\n {\n \"id\": \"row-employment-1\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-employment-1\",\n \"fields\": [\n \"salary\",\n \"bonusPercent\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-employment-2\",\n \"fields\": [\n \"workMode\",\n \"terminationDate\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-employment-2\",\n \"rowGap\": 16,\n \"columns\": [\n {\n \"id\": \"col-employment-3\",\n \"fields\": [\n \"skills\",\n \"availability\"\n ],\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n }\n }\n ]\n }\n ]\n },\n {\n \"id\": \"extras\",\n \"title\": \"Extras\",\n \"description\": \"Additional notes and context.\",\n \"collapsible\": true,\n \"collapsed\": false,\n \"rows\": [\n {\n \"id\": \"row-extras-1\",\n \"columns\": [\n {\n \"id\": \"col-extras-1\",\n \"fields\": [\n \"notes\"\n ],\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n },\n \"align\": \"stretch\",\n \"padding\": 8\n }\n ]\n }\n ]\n },\n {\n \"id\": \"attachments\",\n \"title\": \"Attachments\",\n \"description\": \"Files and confirmations.\",\n \"collapsible\": true,\n \"collapsed\": true,\n \"rows\": [\n {\n \"id\": \"row-attachments-1\",\n \"columns\": [\n {\n \"id\": \"col-attachments-1\",\n \"fields\": [\n \"avatar\",\n \"terms\"\n ],\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n },\n \"align\": \"center\"\n }\n ]\n }\n ]\n },\n {\n \"id\": \"advanced\",\n \"title\": \"Advanced\",\n \"description\": \"Extra controls and integrations.\",\n \"collapsible\": true,\n \"collapsed\": true,\n \"rows\": [\n {\n \"id\": \"row-advanced-1\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-advanced-1\",\n \"fields\": [\n \"username\",\n \"password\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-advanced-2\",\n \"fields\": [\n \"country\",\n \"orgTree\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-advanced-2\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-advanced-3\",\n \"fields\": [\n \"themeColor\",\n \"cpf\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-advanced-4\",\n \"fields\": [\n \"meetingTime\",\n \"ratingScore\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-advanced-3\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-advanced-5\",\n \"fields\": [\n \"progress\",\n \"avatarDisplay\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-advanced-6\",\n \"fields\": [\n \"ctaButton\",\n \"aiAssist\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n }\n ]\n }\n ],\n \"actions\": {\n \"submit\": {\n \"visible\": true,\n \"label\": \"Save\",\n \"icon\": \"save\",\n \"color\": \"primary\",\n \"variant\": \"raised\",\n \"size\": \"medium\",\n \"type\": \"submit\",\n \"shortcut\": \"Ctrl+S\",\n \"tooltip\": \"Save changes\",\n \"className\": \"action-submit\",\n \"style\": {\n \"letterSpacing\": \"0.5px\"\n },\n \"disabled\": false,\n \"loading\": false\n },\n \"cancel\": {\n \"visible\": true,\n \"label\": \"Cancel\",\n \"icon\": \"close\",\n \"type\": \"button\",\n \"color\": \"basic\"\n },\n \"reset\": {\n \"visible\": true,\n \"label\": \"Reset\",\n \"type\": \"reset\",\n \"color\": \"basic\"\n },\n \"custom\": [\n {\n \"id\": \"archive\",\n \"visible\": true,\n \"label\": \"Archive\",\n \"icon\": \"archive\",\n \"color\": \"warn\",\n \"variant\": \"stroked\",\n \"action\": \"archive\",\n \"tooltip\": \"Archive record\"\n },\n {\n \"id\": \"preview\",\n \"visible\": true,\n \"label\": \"Preview\",\n \"icon\": \"visibility\",\n \"color\": \"accent\",\n \"variant\": \"flat\",\n \"action\": \"preview\"\n }\n ],\n \"position\": \"right\",\n \"orientation\": \"horizontal\",\n \"spacing\": \"normal\",\n \"sticky\": true,\n \"divider\": true,\n \"placement\": \"afterSections\",\n \"containerClassName\": \"form-actions-container\",\n \"containerStyles\": {\n \"background\": \"var(--md-sys-color-surface-container)\",\n \"border\": \"1px solid var(--md-sys-color-outline-variant)\",\n \"borderRadius\": \"12px\",\n \"padding\": \"12px 16px\"\n },\n \"mobile\": {\n \"position\": \"center\",\n \"orientation\": \"vertical\",\n \"collapseToMenu\": true\n }\n },\n \"formRules\": [\n {\n \"id\": \"hide-comp-for-intern\",\n \"name\": \"Hide compensation for interns\",\n \"targetType\": \"field\",\n \"targets\": [\n \"salary\",\n \"bonusPercent\"\n ],\n \"effect\": {\n \"condition\": \"workMode == 'INTERN'\",\n \"properties\": {\n \"visible\": false,\n \"required\": false\n },\n \"propertiesWhenFalse\": {\n \"visible\": true\n }\n },\n \"description\": \"Rule for coverage of description field.\",\n \"targetFields\": [\n \"salary\",\n \"bonusPercent\"\n ],\n \"context\": \"visibility\"\n },\n {\n \"id\": \"require-termination-date\",\n \"name\": \"Require termination date when inactive\",\n \"targetType\": \"field\",\n \"targets\": [\n \"terminationDate\"\n ],\n \"effect\": {\n \"condition\": \"status == 'INACTIVE'\",\n \"properties\": {\n \"visible\": true,\n \"required\": true\n }\n }\n },\n {\n \"id\": \"collapse-employment-section\",\n \"name\": \"Collapse employment when active\",\n \"targetType\": \"section\",\n \"targets\": [\n \"employment\"\n ],\n \"effect\": {\n \"condition\": \"status == 'ACTIVE'\",\n \"properties\": {\n \"collapsed\": false\n },\n \"propertiesWhenFalse\": {\n \"collapsed\": true\n }\n }\n },\n {\n \"id\": \"disable-archive-when-inactive\",\n \"name\": \"Disable archive when not active\",\n \"targetType\": \"action\",\n \"targets\": [\n \"archive\"\n ],\n \"effect\": {\n \"condition\": \"isActive == true\",\n \"properties\": {\n \"disabled\": false\n },\n \"propertiesWhenFalse\": {\n \"disabled\": true\n }\n }\n },\n {\n \"id\": \"hide-extras-row\",\n \"name\": \"Hide extras when intern\",\n \"targetType\": \"row\",\n \"targets\": [\n \"row-extras-1\"\n ],\n \"effect\": {\n \"condition\": \"workMode == 'INTERN'\",\n \"properties\": {\n \"visible\": false\n },\n \"propertiesWhenFalse\": {\n \"visible\": true,\n \"rowGap\": 16\n }\n }\n },\n {\n \"id\": \"expand-notes-column\",\n \"name\": \"Expand notes column when inactive\",\n \"targetType\": \"column\",\n \"targets\": [\n \"col-extras-1\"\n ],\n \"effect\": {\n \"condition\": \"status == 'INACTIVE'\",\n \"properties\": {\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n }\n }\n }\n },\n {\n \"id\": \"rule-field-all\",\n \"name\": \"Field properties coverage\",\n \"targetType\": \"field\",\n \"targets\": [\n \"fullName\"\n ],\n \"effect\": {\n \"condition\": \"true\",\n \"properties\": {\n \"visible\": true,\n \"required\": true,\n \"readonly\": false,\n \"disabled\": false,\n \"className\": \"rule-field\",\n \"style\": {\n \"color\": \"#333333\"\n },\n \"label\": \"Rule label\",\n \"description\": \"Rule description\",\n \"placeholder\": \"Rule placeholder\",\n \"hint\": \"Rule hint\",\n \"tooltip\": \"Rule tooltip\",\n \"prefixIcon\": \"info\",\n \"suffixIcon\": \"check\",\n \"prefixText\": \"R$\",\n \"suffixText\": \"USD\",\n \"defaultValue\": {\n \"value\": \"default\"\n },\n \"options\": [\n {\n \"text\": \"A\",\n \"value\": \"A\"\n }\n ],\n \"appearance\": \"outline\",\n \"color\": \"primary\",\n \"floatLabel\": \"always\",\n \"hintPosition\": \"end\",\n \"validators\": {\n \"required\": true\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"required\": false,\n \"readonly\": true,\n \"disabled\": true,\n \"className\": \"rule-field-off\",\n \"style\": {\n \"color\": \"#999999\"\n },\n \"label\": \"Rule label off\",\n \"description\": \"Rule description off\",\n \"placeholder\": \"Rule placeholder off\",\n \"hint\": \"Rule hint off\",\n \"tooltip\": \"Rule tooltip off\",\n \"prefixIcon\": \"block\",\n \"suffixIcon\": \"close\",\n \"prefixText\": \"OFF\",\n \"suffixText\": \"OFF\",\n \"defaultValue\": {\n \"value\": null\n },\n \"options\": [\n {\n \"text\": \"B\",\n \"value\": \"B\"\n }\n ],\n \"appearance\": \"fill\",\n \"color\": \"accent\",\n \"floatLabel\": \"never\",\n \"hintPosition\": \"start\",\n \"validators\": {\n \"required\": false\n }\n }\n }\n },\n {\n \"id\": \"rule-section-all\",\n \"name\": \"Section properties coverage\",\n \"targetType\": \"section\",\n \"targets\": [\n \"basic\"\n ],\n \"effect\": {\n \"condition\": \"true\",\n \"properties\": {\n \"visible\": true,\n \"title\": \"Rule section title\",\n \"description\": \"Rule section description\",\n \"icon\": \"settings\",\n \"className\": \"rule-section\",\n \"style\": {\n \"borderRadius\": \"8px\"\n },\n \"borderColor\": \"#cccccc\",\n \"borderStyle\": \"solid\",\n \"borderWidth\": 1,\n \"collapsible\": true,\n \"collapsed\": false,\n \"headerTooltip\": \"Section tooltip\",\n \"headerAlign\": \"start\",\n \"gapBottom\": 12,\n \"titleGapBottom\": 4,\n \"descriptionGapBottom\": 6,\n \"titleColor\": \"#222222\",\n \"descriptionColor\": \"#555555\",\n \"titleStyle\": \"titleSmall\",\n \"descriptionStyle\": \"bodySmall\",\n \"appearance\": \"outlined\"\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"title\": \"Rule section title off\",\n \"description\": \"Rule section description off\",\n \"icon\": \"block\",\n \"className\": \"rule-section-off\",\n \"style\": {\n \"borderRadius\": \"0px\"\n },\n \"borderColor\": \"#eeeeee\",\n \"borderStyle\": \"dashed\",\n \"borderWidth\": 0,\n \"collapsible\": false,\n \"collapsed\": true,\n \"headerTooltip\": \"Section tooltip off\",\n \"headerAlign\": \"center\",\n \"gapBottom\": 0,\n \"titleGapBottom\": 0,\n \"descriptionGapBottom\": 0,\n \"titleColor\": \"#999999\",\n \"descriptionColor\": \"#999999\",\n \"titleStyle\": \"titleMedium\",\n \"descriptionStyle\": \"bodyMedium\",\n \"appearance\": \"flat\"\n }\n }\n },\n {\n \"id\": \"rule-action-all\",\n \"name\": \"Action properties coverage\",\n \"targetType\": \"action\",\n \"targets\": [\n \"archive\"\n ],\n \"effect\": {\n \"condition\": \"true\",\n \"properties\": {\n \"visible\": true,\n \"disabled\": false,\n \"loading\": false,\n \"label\": \"Rule action\",\n \"icon\": \"archive\",\n \"tooltip\": \"Rule tooltip\",\n \"color\": \"warn\",\n \"variant\": \"stroked\",\n \"size\": \"medium\",\n \"className\": \"rule-action\",\n \"style\": {\n \"minWidth\": \"120px\"\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"disabled\": true,\n \"loading\": true,\n \"label\": \"Rule action off\",\n \"icon\": \"block\",\n \"tooltip\": \"Rule tooltip off\",\n \"color\": \"basic\",\n \"variant\": \"flat\",\n \"size\": \"small\",\n \"className\": \"rule-action-off\",\n \"style\": {\n \"minWidth\": \"80px\"\n }\n }\n }\n },\n {\n \"id\": \"rule-row-all\",\n \"name\": \"Row properties coverage\",\n \"targetType\": \"row\",\n \"targets\": [\n \"row-basic-1\"\n ],\n \"effect\": {\n \"condition\": \"true\",\n \"properties\": {\n \"visible\": true,\n \"gap\": 12,\n \"rowGap\": 8,\n \"className\": \"rule-row\",\n \"style\": {\n \"marginBottom\": \"12px\"\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"gap\": 0,\n \"rowGap\": 0,\n \"className\": \"rule-row-off\",\n \"style\": {\n \"marginBottom\": \"0px\"\n }\n }\n }\n },\n {\n \"id\": \"rule-column-all\",\n \"name\": \"Column properties coverage\",\n \"targetType\": \"column\",\n \"targets\": [\n \"col-basic-1\"\n ],\n \"effect\": {\n \"condition\": \"true\",\n \"properties\": {\n \"visible\": true,\n \"span\": {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 6,\n \"lg\": 6,\n \"xl\": 6\n },\n \"offset\": {\n \"xs\": 0,\n \"sm\": 0,\n \"md\": 0,\n \"lg\": 0,\n \"xl\": 0\n },\n \"order\": {\n \"xs\": 1,\n \"sm\": 1,\n \"md\": 1,\n \"lg\": 1,\n \"xl\": 1\n },\n \"hidden\": {\n \"xs\": false,\n \"sm\": false,\n \"md\": false,\n \"lg\": false,\n \"xl\": false\n },\n \"align\": \"stretch\",\n \"padding\": 8,\n \"className\": \"rule-column\",\n \"style\": {\n \"backgroundColor\": \"#f6f6f6\"\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"span\": {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12,\n \"xl\": 12\n },\n \"offset\": {\n \"xs\": 0,\n \"sm\": 0,\n \"md\": 0,\n \"lg\": 0,\n \"xl\": 0\n },\n \"order\": {\n \"xs\": 2,\n \"sm\": 2,\n \"md\": 2,\n \"lg\": 2,\n \"xl\": 2\n },\n \"hidden\": {\n \"xs\": true,\n \"sm\": true,\n \"md\": true,\n \"lg\": true,\n \"xl\": true\n },\n \"align\": \"center\",\n \"padding\": 0,\n \"className\": \"rule-column-off\",\n \"style\": {\n \"backgroundColor\": \"#ffffff\"\n }\n }\n }\n }\n ],\n \"formRulesState\": {\n \"nodes\": {},\n \"rootNodes\": [],\n \"selectedNodeId\": null,\n \"currentDSL\": \"\",\n \"currentJSON\": [],\n \"validationErrors\": [],\n \"mode\": \"visual\",\n \"isDirty\": false,\n \"history\": [],\n \"historyPosition\": 0\n },\n \"_variants\": [\n {\n \"id\": \"actions-legacy-flags\",\n \"description\": \"Legacy actions flags.\",\n \"patch\": {\n \"actions\": {\n \"showSaveButton\": true,\n \"submitButtonLabel\": \"Save\",\n \"showCancelButton\": true,\n \"cancelButtonLabel\": \"Back\",\n \"showResetButton\": false\n }\n }\n },\n {\n \"id\": \"layout-minimal\",\n \"description\": \"Minimal layout with one section and two fields.\",\n \"patch\": {\n \"sections\": [\n {\n \"id\": \"simple\",\n \"title\": \"Simple\",\n \"rows\": [\n {\n \"id\": \"row-simple-1\",\n \"columns\": [\n {\n \"id\": \"col-simple-1\",\n \"fields\": [\n \"fullName\",\n \"email\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n \"id\": \"rules-clear-override\",\n \"description\": \"Clear rule overrides with null.\",\n \"patch\": {\n \"formRules\": [\n {\n \"id\": \"hide-comp-for-intern\",\n \"name\": \"Hide compensation for interns\",\n \"targetType\": \"field\",\n \"targets\": [\n \"salary\"\n ],\n \"effect\": {\n \"condition\": \"workMode == 'INTERN'\",\n \"properties\": {\n \"visible\": null\n }\n }\n }\n ]\n }\n }\n ],\n \"presentation\": {\n \"labelFontSize\": 12,\n \"valueFontSize\": 14,\n \"labelPosition\": \"left\",\n \"compact\": false,\n \"density\": \"cozy\",\n \"labelWidth\": 140,\n \"labelAlign\": \"start\",\n \"valueAlign\": \"end\"\n }\n}\n",
|
|
8429
|
+
"content": "{\n \"_comment\": \"Generic recipe for PraxisDynamicForm (FormConfig). Values are placeholders for AI examples.\",\n \"templateMeta\": {\n \"variantId\": \"form-config\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"tags\": [\n \"full\",\n \"config\"\n ],\n \"useWhen\": \"gerar form completo com layout, campos e regras\",\n \"examplePrompts\": [\n \"gere um formulario completo com campos e layout\",\n \"crie um form completo baseado no schema\"\n ]\n },\n \"metadata\": {\n \"version\": \"2.0.0\",\n \"lastUpdated\": \"2024-02-01T12:00:00Z\",\n \"source\": \"local\",\n \"serverHash\": \"hash-abc-123\",\n \"schemaId\": \"path:/api/employees#request\",\n \"schemaContext\": {\n \"path\": \"/api/employees\",\n \"operation\": \"POST\",\n \"schemaType\": \"request\",\n \"internal\": false,\n \"tenant\": \"default\",\n \"locale\": \"pt-BR\"\n },\n \"customizations\": [\n {\n \"fieldName\": \"salary\",\n \"property\": \"label\",\n \"oldValue\": \"Salary\",\n \"newValue\": \"Salario\",\n \"timestamp\": \"2024-01-20T10:00:00Z\",\n \"source\": \"user\"\n }\n ]\n },\n \"api\": {\n \"saveEndpoint\": \"/api/employees\",\n \"loadEndpoint\": \"/api/employees/${id}\",\n \"saveMethod\": \"POST\",\n \"timeout\": 15000,\n \"headers\": {\n \"X-Module\": \"HR\",\n \"X-Request-Source\": \"dynamic-form\"\n },\n \"idField\": \"id\",\n \"beforeSave\": \"sanitizeEmployee\",\n \"afterLoad\": \"mapEmployee\"\n },\n \"behavior\": {\n \"confirmOnUnsavedChanges\": true,\n \"trackHistory\": true,\n \"focusFirstError\": true,\n \"scrollToErrors\": true,\n \"clearAfterSave\": false,\n \"redirectAfterSave\": \"/employees\",\n \"reactiveValidation\": true,\n \"reactiveValidationDebounceMs\": 200\n },\n \"messages\": {\n \"createRegistrySuccess\": \"Registro criado com sucesso.\",\n \"updateRegistrySuccess\": \"Registro atualizado com sucesso.\",\n \"createRegistryError\": \"Falha ao criar registro.\",\n \"updateRegistryError\": \"Falha ao atualizar registro.\",\n \"confirmations\": {\n \"submit\": \"Salvar alteracoes?\",\n \"cancel\": \"Descartar alteracoes?\",\n \"reset\": \"Limpar o formulario?\",\n \"archive\": \"Arquivar este registro?\"\n },\n \"customActions\": {\n \"archive\": {\n \"success\": \"Registro arquivado.\",\n \"error\": \"Falha ao arquivar.\",\n \"confirmation\": \"Arquivar registro agora?\"\n },\n \"preview\": {\n \"confirmation\": \"Gerar pre-visualizacao?\"\n }\n },\n \"loading\": {\n \"submit\": \"Salvando...\",\n \"cancel\": \"Cancelando...\",\n \"reset\": \"Limpando...\",\n \"archive\": \"Arquivando...\"\n }\n },\n \"hints\": {\n \"dataModes\": {\n \"create\": \"Preencha os dados para criar um novo registro.\",\n \"edit\": \"Atualize os dados e salve as alteracoes.\",\n \"view\": \"Visualize os dados do registro.\"\n },\n \"uiModes\": {\n \"presentation\": \"Modo apresentacao exibe apenas leitura.\",\n \"readonly\": \"Modo leitura bloqueia edicao.\",\n \"disabled\": \"Campos desabilitados nao permitem interacao.\",\n \"visible\": \"Controle de visibilidade sem destruir controles.\"\n }\n },\n \"hooks\": {\n \"beforeInit\": [\n {\n \"priority\": 100,\n \"timeoutMs\": 1500,\n \"args\": {\n \"source\": \"cache\"\n },\n \"id\": \"load-static-options\"\n }\n ],\n \"afterInit\": [\n {\n \"priority\": 50,\n \"timeoutMs\": 1200,\n \"args\": {\n \"enable\": true\n },\n \"id\": \"attach-shortcuts\"\n }\n ],\n \"beforeValidate\": [\n {\n \"priority\": 80,\n \"timeoutMs\": 1200,\n \"args\": {\n \"country\": \"BR\"\n },\n \"id\": \"normalize-phones\"\n }\n ],\n \"afterValidate\": [\n {\n \"priority\": 10,\n \"timeoutMs\": 1000,\n \"args\": {\n \"report\": \"warnings\"\n },\n \"id\": \"collect-warnings\"\n }\n ],\n \"beforeSubmit\": [\n {\n \"priority\": 100,\n \"timeoutMs\": 2000,\n \"args\": {\n \"trimStrings\": true\n },\n \"id\": \"sanitize-employee\"\n }\n ],\n \"afterSubmit\": [\n {\n \"priority\": 20,\n \"timeoutMs\": 1500,\n \"args\": {\n \"messageKey\": \"employeeSaved\"\n },\n \"id\": \"notify-success\"\n }\n ],\n \"onError\": [\n {\n \"priority\": 0,\n \"timeoutMs\": 1500,\n \"args\": {\n \"messageKey\": \"employeeSaveError\"\n },\n \"id\": \"notify-error\"\n }\n ]\n },\n \"fieldMetadata\": [\n {\n \"name\": \"id\",\n \"label\": \"ID\",\n \"controlType\": \"numericTextBox\",\n \"dataType\": \"number\",\n \"hidden\": true,\n \"readOnly\": true,\n \"description\": \"Backend generated identifier.\"\n },\n {\n \"name\": \"fullName\",\n \"label\": \"Full name\",\n \"controlType\": \"input\",\n \"dataType\": \"text\",\n \"placeholder\": \"Example: Ana Souza\",\n \"prefixIcon\": \"person\",\n \"iconPosition\": \"start\",\n \"iconSize\": \"small\",\n \"validators\": {\n \"required\": true,\n \"minLength\": 3,\n \"maxLength\": 120,\n \"requiredMessage\": \"Name is required\",\n \"minLengthMessage\": \"Min 3 chars\",\n \"minWords\": 2\n },\n \"validationMode\": \"blur\",\n \"debounceTime\": 200,\n \"materialDesign\": {\n \"appearance\": \"outline\",\n \"color\": \"primary\",\n \"floatLabel\": \"auto\",\n \"density\": \"comfortable\",\n \"subscriptSizing\": \"dynamic\",\n \"hideRequiredMarker\": false,\n \"disableRipple\": true,\n \"customPalette\": {\n \"primary\": \"#005f73\",\n \"accent\": \"#0a9396\",\n \"warn\": \"#bb3e03\"\n },\n \"animations\": {\n \"disabled\": false,\n \"duration\": \"150ms\",\n \"easing\": \"ease-out\"\n }\n },\n \"group\": \"identity\",\n \"order\": 1,\n \"width\": \"50%\",\n \"isFlex\": true,\n \"id\": \"field-full-name\",\n \"version\": \"1.0.0\",\n \"context\": \"form\",\n \"createdAt\": \"2024-01-01T00:00:00Z\",\n \"updatedAt\": \"2024-02-01T00:00:00Z\",\n \"tags\": [\n \"identity\",\n \"employee\"\n ],\n \"cssClass\": \"field-full-name\",\n \"style\": {\n \"maxWidth\": \"480px\"\n },\n \"dataAttributes\": {\n \"data-qa\": \"full-name\"\n },\n \"required\": true\n },\n {\n \"name\": \"email\",\n \"label\": \"Email\",\n \"controlType\": \"email\",\n \"dataType\": \"email\",\n \"placeholder\": \"name@company.com\",\n \"validators\": {\n \"required\": true,\n \"email\": true,\n \"emailMessage\": \"Use a valid email.\"\n },\n \"unique\": true,\n \"ariaLabel\": \"Email address\",\n \"ariaDescribedBy\": \"email-help\",\n \"tabIndex\": 2,\n \"accessKey\": \"e\"\n },\n {\n \"name\": \"phone\",\n \"label\": \"Phone\",\n \"controlType\": \"maskedTextBox\",\n \"dataType\": \"text\",\n \"mask\": \"(99) 99999-9999\",\n \"validators\": {\n \"pattern\": \"^\\\\(\\\\d{2}\\\\) \\\\d{4,5}-\\\\d{4}$\",\n \"patternMessage\": \"Use (11) 99999-9999\"\n },\n \"hint\": \"Include area code.\"\n },\n {\n \"name\": \"status\",\n \"label\": \"Status\",\n \"controlType\": \"select\",\n \"options\": [\n {\n \"text\": \"Active\",\n \"value\": \"ACTIVE\",\n \"icon\": \"check_circle\"\n },\n {\n \"text\": \"Inactive\",\n \"value\": \"INACTIVE\",\n \"icon\": \"block\"\n },\n {\n \"text\": \"On leave\",\n \"value\": \"ON_LEAVE\",\n \"icon\": \"schedule\"\n }\n ],\n \"defaultValue\": \"ACTIVE\",\n \"validators\": {\n \"required\": true\n },\n \"materialDesign\": {\n \"appearance\": \"outline\",\n \"color\": \"accent\"\n }\n },\n {\n \"name\": \"departmentId\",\n \"label\": \"Department\",\n \"controlType\": \"select\",\n \"endpoint\": \"/api/departments\",\n \"valueField\": \"id\",\n \"displayField\": \"name\",\n \"queryParams\": {\n \"active\": true\n },\n \"cacheDuration\": 300000,\n \"validators\": {\n \"required\": true\n },\n \"resourcePath\": \"/api/departments\",\n \"filterCriteria\": {\n \"active\": true\n },\n \"optionLabelKey\": \"name\",\n \"optionValueKey\": \"id\",\n \"searchable\": true\n },\n {\n \"name\": \"teamId\",\n \"label\": \"Team\",\n \"controlType\": \"select\",\n \"endpoint\": \"/api/teams\",\n \"valueField\": \"id\",\n \"displayField\": \"name\",\n \"dependencyFields\": [\n \"departmentId\"\n ],\n \"dependencyFilterMap\": {\n \"departmentId\": \"departmentId\"\n },\n \"dependencyValuePath\": \"id\",\n \"dependencyLoadOnChange\": \"immediate\",\n \"dependencyMergeStrategy\": \"replace\",\n \"dependencyDebounceMs\": 200,\n \"resetOnDependentChange\": true,\n \"enableDependencyCascade\": true,\n \"suppressInlineErrorsOnCascade\": true\n },\n {\n \"name\": \"managerId\",\n \"label\": \"Manager\",\n \"controlType\": \"autoComplete\",\n \"endpoint\": \"/api/employees\",\n \"queryParams\": {\n \"role\": \"manager\"\n },\n \"valueField\": \"id\",\n \"displayField\": \"name\",\n \"filterField\": \"name\",\n \"dependencyFields\": [\n \"departmentId\"\n ],\n \"dependencyFilterMap\": {\n \"departmentId\": \"departmentId\"\n },\n \"dependencyLoadOnChange\": \"respectLoadOn\",\n \"disabled\": false\n },\n {\n \"name\": \"hireDate\",\n \"label\": \"Hire date\",\n \"controlType\": \"date\",\n \"dataType\": \"date\",\n \"validators\": {\n \"required\": true\n },\n \"minDate\": \"2020-01-01\",\n \"maxDate\": \"2030-12-31\",\n \"startView\": \"multi-year\",\n \"datepickerTogglePosition\": \"suffix\",\n \"touchUi\": true\n },\n {\n \"name\": \"terminationDate\",\n \"label\": \"Termination date\",\n \"controlType\": \"date\",\n \"conditionalDisplay\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"INACTIVE\"\n ]\n },\n \"conditionalRequired\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"INACTIVE\"\n ]\n }\n },\n {\n \"name\": \"salary\",\n \"label\": \"Salary\",\n \"controlType\": \"currency\",\n \"dataType\": \"number\",\n \"format\": \"BRL|symbol|2\",\n \"validators\": {\n \"min\": 0,\n \"max\": 999999,\n \"minMessage\": \"Salary must be >= 0\"\n },\n \"min\": 0,\n \"max\": 999999,\n \"step\": 100,\n \"precision\": \"fixed\",\n \"currencyCode\": \"BRL\",\n \"currencyDisplay\": \"symbol\",\n \"prefix\": \"R$\",\n \"suffix\": \"bruto\",\n \"inlineEditing\": true,\n \"transformDisplayValue\": \"formatCurrency\",\n \"transformSaveValue\": \"parseCurrency\"\n },\n {\n \"name\": \"bonusPercent\",\n \"label\": \"Bonus %\",\n \"controlType\": \"slider\",\n \"dataType\": \"number\",\n \"defaultValue\": 10,\n \"validators\": {\n \"min\": 0,\n \"max\": 50\n },\n \"suffixIcon\": \"percent\",\n \"min\": 0,\n \"max\": 50,\n \"step\": 5,\n \"thumbLabel\": true,\n \"showTicks\": true,\n \"vertical\": false,\n \"invert\": false\n },\n {\n \"name\": \"workMode\",\n \"label\": \"Work mode\",\n \"controlType\": \"radio\",\n \"options\": [\n {\n \"text\": \"CLT\",\n \"value\": \"CLT\"\n },\n {\n \"text\": \"PJ\",\n \"value\": \"PJ\"\n },\n {\n \"text\": \"Intern\",\n \"value\": \"INTERN\"\n }\n ],\n \"defaultValue\": \"CLT\"\n },\n {\n \"name\": \"skills\",\n \"label\": \"Skills\",\n \"controlType\": \"multiSelect\",\n \"options\": [\n {\n \"text\": \"Angular\",\n \"value\": \"ANG\"\n },\n {\n \"text\": \"React\",\n \"value\": \"RE\"\n },\n {\n \"text\": \"Node\",\n \"value\": \"NODE\"\n }\n ],\n \"visibleIn\": [\n \"form\",\n \"filter\"\n ],\n \"multiple\": true,\n \"searchable\": true,\n \"clearable\": true,\n \"selectAll\": true,\n \"maxSelections\": 5,\n \"virtualScroll\": true,\n \"emptyOptionText\": \"None\"\n },\n {\n \"name\": \"availability\",\n \"label\": \"Availability\",\n \"controlType\": \"dateRange\",\n \"rangeSeparator\": \" to \"\n },\n {\n \"name\": \"notes\",\n \"label\": \"Notes\",\n \"controlType\": \"textarea\",\n \"validators\": {\n \"maxLength\": 500\n },\n \"hint\": \"Add relevant notes.\",\n \"textTransformApply\": \"displayOnly\",\n \"rows\": 4,\n \"minRows\": 3,\n \"maxRows\": 8,\n \"resize\": \"vertical\",\n \"spellcheck\": true,\n \"inputMode\": \"text\",\n \"textTransform\": \"uppercase\",\n \"readonly\": false,\n \"formHidden\": false,\n \"tableHidden\": true,\n \"filterHidden\": false\n },\n {\n \"name\": \"isActive\",\n \"label\": \"Active\",\n \"controlType\": \"toggle\",\n \"dataType\": \"boolean\",\n \"defaultValue\": true\n },\n {\n \"name\": \"avatar\",\n \"label\": \"Photo\",\n \"controlType\": \"upload\",\n \"accept\": \".png,.jpg,.jpeg\",\n \"multiple\": false,\n \"materialDesign\": {\n \"appearance\": \"outline\"\n },\n \"uploadUrl\": \"/api/uploads/avatars\",\n \"autoUpload\": true,\n \"maxFileSize\": 5242880,\n \"maxFiles\": 2,\n \"fileRestrictions\": {\n \"minResolution\": \"128x128\",\n \"maxResolution\": \"2048x2048\"\n },\n \"chunkSize\": 1048576,\n \"withCredentials\": false,\n \"headers\": {\n \"X-Upload-Source\": \"dynamic-form\"\n },\n \"method\": \"POST\",\n \"saveField\": \"file\"\n },\n {\n \"name\": \"terms\",\n \"label\": \"Accept terms\",\n \"controlType\": \"checkbox\",\n \"validators\": {\n \"requiredChecked\": true\n },\n \"tooltip\": \"Required to submit.\"\n },\n {\n \"name\": \"username\",\n \"label\": \"Username\",\n \"controlType\": \"input\",\n \"dataType\": \"text\",\n \"type\": \"text\",\n \"minLength\": 3,\n \"maxLength\": 20,\n \"pattern\": \"^[a-zA-Z0-9_]+$\",\n \"validators\": {\n \"required\": true,\n \"patternMessage\": \"Use letters, numbers, underscore\"\n },\n \"inputMode\": \"text\",\n \"autoComplete\": \"username\",\n \"readonly\": false,\n \"spellcheck\": false,\n \"textTransform\": \"lowercase\",\n \"placeholder\": \"user_name\"\n },\n {\n \"name\": \"password\",\n \"label\": \"Password\",\n \"controlType\": \"password\",\n \"dataType\": \"text\",\n \"type\": \"password\",\n \"showPasswordToggle\": true,\n \"autoComplete\": \"current-password\",\n \"validators\": {\n \"required\": true,\n \"minLength\": 8\n }\n },\n {\n \"name\": \"country\",\n \"label\": \"Country\",\n \"controlType\": \"select\",\n \"dataType\": \"text\",\n \"options\": [\n {\n \"text\": \"Brazil\",\n \"value\": \"BR\"\n },\n {\n \"text\": \"United States\",\n \"value\": \"US\"\n },\n {\n \"text\": \"Canada\",\n \"value\": \"CA\"\n }\n ],\n \"optionLabelKey\": \"text\",\n \"optionValueKey\": \"value\",\n \"emptyOptionText\": \"Select a country\",\n \"searchable\": true,\n \"clearable\": true,\n \"resourcePath\": \"/api/countries\",\n \"filterCriteria\": {\n \"active\": true\n },\n \"multiple\": false\n },\n {\n \"name\": \"orgTree\",\n \"label\": \"Organization\",\n \"controlType\": \"treeSelect\",\n \"treeConfig\": {\n \"expandByDefault\": true,\n \"selectionMode\": \"single\"\n },\n \"nodes\": [\n {\n \"label\": \"HQ\",\n \"value\": \"hq\",\n \"children\": [\n {\n \"label\": \"Finance\",\n \"value\": \"finance\"\n }\n ]\n },\n {\n \"label\": \"Branch\",\n \"value\": \"branch\"\n }\n ],\n \"multiple\": false\n },\n {\n \"name\": \"ratingScore\",\n \"label\": \"Satisfaction\",\n \"controlType\": \"rating\",\n \"value\": 3,\n \"max\": 5,\n \"ratingMax\": 5,\n \"ratingPrecision\": 0.5,\n \"ratingIcon\": \"star\",\n \"ratingEmptyIcon\": \"star_border\",\n \"ratingAllowHalf\": true\n },\n {\n \"name\": \"progress\",\n \"label\": \"Progress\",\n \"controlType\": \"slider\",\n \"min\": 0,\n \"max\": 100,\n \"step\": 5,\n \"defaultValue\": 65,\n \"thumbLabel\": true,\n \"showTicks\": true\n },\n {\n \"name\": \"avatarDisplay\",\n \"label\": \"Avatar display\",\n \"controlType\": \"avatar\",\n \"imageSrc\": \"https://cdn.example.com/avatars/ana.png\",\n \"imageAlt\": \"User avatar\",\n \"initials\": \"AS\",\n \"avatarShape\": \"circle\",\n \"avatarSize\": \"medium\"\n },\n {\n \"name\": \"ctaButton\",\n \"label\": \"Request access\",\n \"controlType\": \"button\",\n \"icon\": \"send\",\n \"color\": \"primary\",\n \"variant\": \"raised\",\n \"size\": \"medium\",\n \"disabled\": false,\n \"loading\": false,\n \"action\": \"requestAccess\",\n \"actionPayload\": {\n \"role\": \"manager\"\n }\n },\n {\n \"name\": \"aiAssist\",\n \"label\": \"AI assist\",\n \"controlType\": \"button\",\n \"icon\": \"smart_toy\",\n \"color\": \"accent\",\n \"variant\": \"stroked\",\n \"size\": \"medium\",\n \"action\": \"aiAssist\",\n \"actionPayload\": {\n \"prompt\": \"Summarize the candidate profile\",\n \"history\": [\n {\n \"role\": \"user\",\n \"content\": \"Summarize this CV.\"\n },\n {\n \"role\": \"assistant\",\n \"content\": \"Summary goes here.\"\n }\n ]\n },\n \"tooltip\": \"Ask AI to summarize the candidate profile\"\n },\n {\n \"name\": \"themeColor\",\n \"label\": \"Theme color\",\n \"controlType\": \"colorPicker\",\n \"format\": \"hex\",\n \"views\": [\n \"palette\",\n \"gradient\"\n ],\n \"activeView\": \"palette\",\n \"preview\": true,\n \"clearButton\": true,\n \"actionsLayout\": \"end\",\n \"adaptiveMode\": true,\n \"adaptiveTitle\": \"Pick a color\",\n \"adaptiveSubtitle\": \"Brand palette\",\n \"popupSettings\": {\n \"width\": 320\n },\n \"gradientSettings\": {\n \"opacity\": true\n },\n \"paletteSettings\": {\n \"columns\": 8\n },\n \"fillMode\": \"solid\",\n \"rounded\": \"medium\",\n \"size\": \"medium\",\n \"icon\": \"palette\",\n \"iconClass\": \"color-icon\",\n \"svgIcon\": \"custom-palette\",\n \"tabindex\": 0\n },\n {\n \"name\": \"cpf\",\n \"label\": \"CPF/CNPJ\",\n \"controlType\": \"cpfCnpjInput\",\n \"maskType\": \"cpf-cnpj\",\n \"unmaskOnSubmit\": true,\n \"validators\": {\n \"cpf\": true,\n \"cnpj\": true\n }\n },\n {\n \"name\": \"meetingTime\",\n \"label\": \"Meeting time\",\n \"controlType\": \"timePicker\",\n \"enableSeconds\": true,\n \"stepMinute\": 15,\n \"stepSecond\": 30\n }\n ],\n \"sections\": [\n {\n \"id\": \"basic\",\n \"title\": \"Basic data\",\n \"description\": \"Primary profile and status fields.\",\n \"icon\": \"person\",\n \"collapsible\": true,\n \"collapsed\": false,\n \"gapBottom\": 16,\n \"titleGapBottom\": 6,\n \"descriptionGapBottom\": 8,\n \"titleStyle\": \"titleMedium\",\n \"descriptionStyle\": \"bodyMedium\",\n \"titleColor\": \"#1a1a1a\",\n \"descriptionColor\": \"#666666\",\n \"headerAlign\": \"start\",\n \"headerTooltip\": \"Main data\",\n \"rows\": [\n {\n \"id\": \"row-basic-1\",\n \"gap\": 16,\n \"rowGap\": 12,\n \"columns\": [\n {\n \"id\": \"col-basic-1\",\n \"fields\": [\n \"fullName\",\n \"email\"\n ],\n \"span\": {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 6,\n \"lg\": 6,\n \"xl\": 6\n },\n \"padding\": 8,\n \"className\": \"col-basic-main\",\n \"testId\": \"col-basic-main\",\n \"title\": \"Identity\"\n },\n {\n \"id\": \"col-basic-2\",\n \"fields\": [\n \"status\",\n \"hireDate\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n },\n \"hidden\": {\n \"xs\": true,\n \"sm\": false,\n \"md\": false,\n \"lg\": false,\n \"xl\": false\n },\n \"order\": {\n \"xs\": 2,\n \"sm\": 1,\n \"md\": 2,\n \"lg\": 2,\n \"xl\": 1\n }\n }\n ],\n \"title\": \"Core fields\"\n },\n {\n \"id\": \"row-basic-2\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-basic-3\",\n \"fields\": [\n \"phone\",\n \"isActive\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n },\n \"offset\": {\n \"xs\": 0,\n \"sm\": 0,\n \"md\": 1,\n \"lg\": 0,\n \"xl\": 0\n }\n },\n {\n \"id\": \"col-basic-4\",\n \"fields\": [\n \"departmentId\",\n \"teamId\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-basic-3\",\n \"columns\": [\n {\n \"id\": \"col-basic-5\",\n \"fields\": [\n \"managerId\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n }\n ]\n },\n {\n \"id\": \"employment\",\n \"title\": \"Employment\",\n \"description\": \"Contract and compensation.\",\n \"icon\": \"badge\",\n \"collapsible\": true,\n \"collapsed\": false,\n \"rows\": [\n {\n \"id\": \"row-employment-1\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-employment-1\",\n \"fields\": [\n \"salary\",\n \"bonusPercent\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-employment-2\",\n \"fields\": [\n \"workMode\",\n \"terminationDate\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-employment-2\",\n \"rowGap\": 16,\n \"columns\": [\n {\n \"id\": \"col-employment-3\",\n \"fields\": [\n \"skills\",\n \"availability\"\n ],\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n }\n }\n ]\n }\n ]\n },\n {\n \"id\": \"extras\",\n \"title\": \"Extras\",\n \"description\": \"Additional notes and context.\",\n \"collapsible\": true,\n \"collapsed\": false,\n \"rows\": [\n {\n \"id\": \"row-extras-1\",\n \"columns\": [\n {\n \"id\": \"col-extras-1\",\n \"fields\": [\n \"notes\"\n ],\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n },\n \"align\": \"stretch\",\n \"padding\": 8\n }\n ]\n }\n ]\n },\n {\n \"id\": \"attachments\",\n \"title\": \"Attachments\",\n \"description\": \"Files and confirmations.\",\n \"collapsible\": true,\n \"collapsed\": true,\n \"rows\": [\n {\n \"id\": \"row-attachments-1\",\n \"columns\": [\n {\n \"id\": \"col-attachments-1\",\n \"fields\": [\n \"avatar\",\n \"terms\"\n ],\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n },\n \"align\": \"center\"\n }\n ]\n }\n ]\n },\n {\n \"id\": \"advanced\",\n \"title\": \"Advanced\",\n \"description\": \"Extra controls and integrations.\",\n \"collapsible\": true,\n \"collapsed\": true,\n \"rows\": [\n {\n \"id\": \"row-advanced-1\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-advanced-1\",\n \"fields\": [\n \"username\",\n \"password\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-advanced-2\",\n \"fields\": [\n \"country\",\n \"orgTree\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-advanced-2\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-advanced-3\",\n \"fields\": [\n \"themeColor\",\n \"cpf\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-advanced-4\",\n \"fields\": [\n \"meetingTime\",\n \"ratingScore\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n },\n {\n \"id\": \"row-advanced-3\",\n \"gap\": 16,\n \"columns\": [\n {\n \"id\": \"col-advanced-5\",\n \"fields\": [\n \"progress\",\n \"avatarDisplay\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n },\n {\n \"id\": \"col-advanced-6\",\n \"fields\": [\n \"ctaButton\",\n \"aiAssist\"\n ],\n \"span\": {\n \"md\": 6,\n \"lg\": 6\n }\n }\n ]\n }\n ]\n }\n ],\n \"actions\": {\n \"submit\": {\n \"visible\": true,\n \"label\": \"Save\",\n \"icon\": \"save\",\n \"color\": \"primary\",\n \"variant\": \"raised\",\n \"size\": \"medium\",\n \"type\": \"submit\",\n \"shortcut\": \"Ctrl+S\",\n \"tooltip\": \"Save changes\",\n \"className\": \"action-submit\",\n \"style\": {\n \"letterSpacing\": \"0.5px\"\n },\n \"disabled\": false,\n \"loading\": false\n },\n \"cancel\": {\n \"visible\": true,\n \"label\": \"Cancel\",\n \"icon\": \"close\",\n \"type\": \"button\",\n \"color\": \"basic\"\n },\n \"reset\": {\n \"visible\": true,\n \"label\": \"Reset\",\n \"type\": \"reset\",\n \"color\": \"basic\"\n },\n \"custom\": [\n {\n \"id\": \"archive\",\n \"visible\": true,\n \"label\": \"Archive\",\n \"icon\": \"archive\",\n \"color\": \"warn\",\n \"variant\": \"stroked\",\n \"action\": \"archive\",\n \"tooltip\": \"Archive record\"\n },\n {\n \"id\": \"preview\",\n \"visible\": true,\n \"label\": \"Preview\",\n \"icon\": \"visibility\",\n \"color\": \"accent\",\n \"variant\": \"flat\",\n \"action\": \"preview\"\n }\n ],\n \"position\": \"right\",\n \"orientation\": \"horizontal\",\n \"spacing\": \"normal\",\n \"sticky\": true,\n \"divider\": true,\n \"placement\": \"afterSections\",\n \"containerClassName\": \"form-actions-container\",\n \"containerStyles\": {\n \"background\": \"var(--md-sys-color-surface-container)\",\n \"border\": \"1px solid var(--md-sys-color-outline-variant)\",\n \"borderRadius\": \"12px\",\n \"padding\": \"12px 16px\"\n },\n \"mobile\": {\n \"position\": \"center\",\n \"orientation\": \"vertical\",\n \"collapseToMenu\": true\n }\n },\n \"formRules\": [\n {\n \"id\": \"hide-comp-for-intern\",\n \"name\": \"Hide compensation for interns\",\n \"targetType\": \"field\",\n \"targets\": [\n \"salary\",\n \"bonusPercent\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"workMode\"\n },\n \"INTERN\"\n ]\n },\n \"properties\": {\n \"visible\": false,\n \"required\": false\n },\n \"propertiesWhenFalse\": {\n \"visible\": true\n }\n },\n \"description\": \"Rule for coverage of description field.\",\n \"targetFields\": [\n \"salary\",\n \"bonusPercent\"\n ],\n \"context\": \"visibility\"\n },\n {\n \"id\": \"require-termination-date\",\n \"name\": \"Require termination date when inactive\",\n \"targetType\": \"field\",\n \"targets\": [\n \"terminationDate\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"INACTIVE\"\n ]\n },\n \"properties\": {\n \"visible\": true,\n \"required\": true\n }\n }\n },\n {\n \"id\": \"collapse-employment-section\",\n \"name\": \"Collapse employment when active\",\n \"targetType\": \"section\",\n \"targets\": [\n \"employment\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"ACTIVE\"\n ]\n },\n \"properties\": {\n \"collapsed\": false\n },\n \"propertiesWhenFalse\": {\n \"collapsed\": true\n }\n }\n },\n {\n \"id\": \"disable-archive-when-inactive\",\n \"name\": \"Disable archive when not active\",\n \"targetType\": \"action\",\n \"targets\": [\n \"archive\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"isActive\"\n },\n true\n ]\n },\n \"properties\": {\n \"disabled\": false\n },\n \"propertiesWhenFalse\": {\n \"disabled\": true\n }\n }\n },\n {\n \"id\": \"hide-extras-row\",\n \"name\": \"Hide extras when intern\",\n \"targetType\": \"row\",\n \"targets\": [\n \"row-extras-1\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"workMode\"\n },\n \"INTERN\"\n ]\n },\n \"properties\": {\n \"visible\": false\n },\n \"propertiesWhenFalse\": {\n \"visible\": true,\n \"rowGap\": 16\n }\n }\n },\n {\n \"id\": \"expand-notes-column\",\n \"name\": \"Expand notes column when inactive\",\n \"targetType\": \"column\",\n \"targets\": [\n \"col-extras-1\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"INACTIVE\"\n ]\n },\n \"properties\": {\n \"span\": {\n \"md\": 12,\n \"lg\": 12\n }\n }\n }\n },\n {\n \"id\": \"rule-field-all\",\n \"name\": \"Field properties coverage\",\n \"targetType\": \"field\",\n \"targets\": [\n \"fullName\"\n ],\n \"effect\": {\n \"condition\": true,\n \"properties\": {\n \"visible\": true,\n \"required\": true,\n \"readonly\": false,\n \"disabled\": false,\n \"className\": \"rule-field\",\n \"style\": {\n \"color\": \"#333333\"\n },\n \"label\": \"Rule label\",\n \"description\": \"Rule description\",\n \"placeholder\": \"Rule placeholder\",\n \"hint\": \"Rule hint\",\n \"tooltip\": \"Rule tooltip\",\n \"prefixIcon\": \"info\",\n \"suffixIcon\": \"check\",\n \"prefixText\": \"R$\",\n \"suffixText\": \"USD\",\n \"defaultValue\": {\n \"value\": \"default\"\n },\n \"options\": [\n {\n \"text\": \"A\",\n \"value\": \"A\"\n }\n ],\n \"appearance\": \"outline\",\n \"color\": \"primary\",\n \"floatLabel\": \"always\",\n \"hintPosition\": \"end\",\n \"validators\": {\n \"required\": true\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"required\": false,\n \"readonly\": true,\n \"disabled\": true,\n \"className\": \"rule-field-off\",\n \"style\": {\n \"color\": \"#999999\"\n },\n \"label\": \"Rule label off\",\n \"description\": \"Rule description off\",\n \"placeholder\": \"Rule placeholder off\",\n \"hint\": \"Rule hint off\",\n \"tooltip\": \"Rule tooltip off\",\n \"prefixIcon\": \"block\",\n \"suffixIcon\": \"close\",\n \"prefixText\": \"OFF\",\n \"suffixText\": \"OFF\",\n \"defaultValue\": {\n \"value\": null\n },\n \"options\": [\n {\n \"text\": \"B\",\n \"value\": \"B\"\n }\n ],\n \"appearance\": \"fill\",\n \"color\": \"accent\",\n \"floatLabel\": \"never\",\n \"hintPosition\": \"start\",\n \"validators\": {\n \"required\": false\n }\n }\n }\n },\n {\n \"id\": \"rule-section-all\",\n \"name\": \"Section properties coverage\",\n \"targetType\": \"section\",\n \"targets\": [\n \"basic\"\n ],\n \"effect\": {\n \"condition\": true,\n \"properties\": {\n \"visible\": true,\n \"title\": \"Rule section title\",\n \"description\": \"Rule section description\",\n \"icon\": \"settings\",\n \"className\": \"rule-section\",\n \"style\": {\n \"borderRadius\": \"8px\"\n },\n \"borderColor\": \"#cccccc\",\n \"borderStyle\": \"solid\",\n \"borderWidth\": 1,\n \"collapsible\": true,\n \"collapsed\": false,\n \"headerTooltip\": \"Section tooltip\",\n \"headerAlign\": \"start\",\n \"gapBottom\": 12,\n \"titleGapBottom\": 4,\n \"descriptionGapBottom\": 6,\n \"titleColor\": \"#222222\",\n \"descriptionColor\": \"#555555\",\n \"titleStyle\": \"titleSmall\",\n \"descriptionStyle\": \"bodySmall\",\n \"appearance\": \"outlined\"\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"title\": \"Rule section title off\",\n \"description\": \"Rule section description off\",\n \"icon\": \"block\",\n \"className\": \"rule-section-off\",\n \"style\": {\n \"borderRadius\": \"0px\"\n },\n \"borderColor\": \"#eeeeee\",\n \"borderStyle\": \"dashed\",\n \"borderWidth\": 0,\n \"collapsible\": false,\n \"collapsed\": true,\n \"headerTooltip\": \"Section tooltip off\",\n \"headerAlign\": \"center\",\n \"gapBottom\": 0,\n \"titleGapBottom\": 0,\n \"descriptionGapBottom\": 0,\n \"titleColor\": \"#999999\",\n \"descriptionColor\": \"#999999\",\n \"titleStyle\": \"titleMedium\",\n \"descriptionStyle\": \"bodyMedium\",\n \"appearance\": \"flat\"\n }\n }\n },\n {\n \"id\": \"rule-action-all\",\n \"name\": \"Action properties coverage\",\n \"targetType\": \"action\",\n \"targets\": [\n \"archive\"\n ],\n \"effect\": {\n \"condition\": true,\n \"properties\": {\n \"visible\": true,\n \"disabled\": false,\n \"loading\": false,\n \"label\": \"Rule action\",\n \"icon\": \"archive\",\n \"tooltip\": \"Rule tooltip\",\n \"color\": \"warn\",\n \"variant\": \"stroked\",\n \"size\": \"medium\",\n \"className\": \"rule-action\",\n \"style\": {\n \"minWidth\": \"120px\"\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"disabled\": true,\n \"loading\": true,\n \"label\": \"Rule action off\",\n \"icon\": \"block\",\n \"tooltip\": \"Rule tooltip off\",\n \"color\": \"basic\",\n \"variant\": \"flat\",\n \"size\": \"small\",\n \"className\": \"rule-action-off\",\n \"style\": {\n \"minWidth\": \"80px\"\n }\n }\n }\n },\n {\n \"id\": \"rule-row-all\",\n \"name\": \"Row properties coverage\",\n \"targetType\": \"row\",\n \"targets\": [\n \"row-basic-1\"\n ],\n \"effect\": {\n \"condition\": true,\n \"properties\": {\n \"visible\": true,\n \"gap\": 12,\n \"rowGap\": 8,\n \"className\": \"rule-row\",\n \"style\": {\n \"marginBottom\": \"12px\"\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"gap\": 0,\n \"rowGap\": 0,\n \"className\": \"rule-row-off\",\n \"style\": {\n \"marginBottom\": \"0px\"\n }\n }\n }\n },\n {\n \"id\": \"rule-column-all\",\n \"name\": \"Column properties coverage\",\n \"targetType\": \"column\",\n \"targets\": [\n \"col-basic-1\"\n ],\n \"effect\": {\n \"condition\": true,\n \"properties\": {\n \"visible\": true,\n \"span\": {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 6,\n \"lg\": 6,\n \"xl\": 6\n },\n \"offset\": {\n \"xs\": 0,\n \"sm\": 0,\n \"md\": 0,\n \"lg\": 0,\n \"xl\": 0\n },\n \"order\": {\n \"xs\": 1,\n \"sm\": 1,\n \"md\": 1,\n \"lg\": 1,\n \"xl\": 1\n },\n \"hidden\": {\n \"xs\": false,\n \"sm\": false,\n \"md\": false,\n \"lg\": false,\n \"xl\": false\n },\n \"align\": \"stretch\",\n \"padding\": 8,\n \"className\": \"rule-column\",\n \"style\": {\n \"backgroundColor\": \"#f6f6f6\"\n }\n },\n \"propertiesWhenFalse\": {\n \"visible\": false,\n \"span\": {\n \"xs\": 12,\n \"sm\": 12,\n \"md\": 12,\n \"lg\": 12,\n \"xl\": 12\n },\n \"offset\": {\n \"xs\": 0,\n \"sm\": 0,\n \"md\": 0,\n \"lg\": 0,\n \"xl\": 0\n },\n \"order\": {\n \"xs\": 2,\n \"sm\": 2,\n \"md\": 2,\n \"lg\": 2,\n \"xl\": 2\n },\n \"hidden\": {\n \"xs\": true,\n \"sm\": true,\n \"md\": true,\n \"lg\": true,\n \"xl\": true\n },\n \"align\": \"center\",\n \"padding\": 0,\n \"className\": \"rule-column-off\",\n \"style\": {\n \"backgroundColor\": \"#ffffff\"\n }\n }\n }\n }\n ],\n \"formRulesState\": {\n \"nodes\": {},\n \"rootNodes\": [],\n \"selectedNodeId\": null,\n \"currentDSL\": \"\",\n \"currentJSON\": [],\n \"validationErrors\": [],\n \"mode\": \"visual\",\n \"isDirty\": false,\n \"history\": [],\n \"historyPosition\": 0\n },\n \"_variants\": [\n {\n \"id\": \"actions-legacy-flags\",\n \"description\": \"Legacy actions flags.\",\n \"patch\": {\n \"actions\": {\n \"showSaveButton\": true,\n \"submitButtonLabel\": \"Save\",\n \"showCancelButton\": true,\n \"cancelButtonLabel\": \"Back\",\n \"showResetButton\": false\n }\n }\n },\n {\n \"id\": \"layout-minimal\",\n \"description\": \"Minimal layout with one section and two fields.\",\n \"patch\": {\n \"sections\": [\n {\n \"id\": \"simple\",\n \"title\": \"Simple\",\n \"rows\": [\n {\n \"id\": \"row-simple-1\",\n \"columns\": [\n {\n \"id\": \"col-simple-1\",\n \"fields\": [\n \"fullName\",\n \"email\"\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n },\n {\n \"id\": \"rules-clear-override\",\n \"description\": \"Clear rule overrides with null.\",\n \"patch\": {\n \"formRules\": [\n {\n \"id\": \"hide-comp-for-intern\",\n \"name\": \"Hide compensation for interns\",\n \"targetType\": \"field\",\n \"targets\": [\n \"salary\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"workMode\"\n },\n \"INTERN\"\n ]\n },\n \"properties\": {\n \"visible\": null\n }\n }\n }\n ]\n }\n }\n ],\n \"presentation\": {\n \"labelFontSize\": 12,\n \"valueFontSize\": 14,\n \"labelPosition\": \"left\",\n \"compact\": false,\n \"density\": \"cozy\",\n \"labelWidth\": 140,\n \"labelAlign\": \"start\",\n \"valueAlign\": \"end\"\n }\n}\n",
|
|
8391
8430
|
"sourcePointer": "praxis-ui-angular/examples/ai-recipes/praxis-dynamic-form.form-config.json",
|
|
8392
|
-
"contentHash": "
|
|
8431
|
+
"contentHash": "eb8680d3bf134f3a9db09ba3ecc324db4d163a86c5ec5fcd7ffe972e381c9b1e",
|
|
8393
8432
|
"sourceKind": "component_definition",
|
|
8394
8433
|
"sourceId": "praxis-dynamic-form",
|
|
8395
8434
|
"corpusVersion": "1.0.0"
|
|
@@ -8427,9 +8466,9 @@
|
|
|
8427
8466
|
{
|
|
8428
8467
|
"chunkIndex": 11,
|
|
8429
8468
|
"chunkKind": "recipe",
|
|
8430
|
-
"content": "{\n \"_comment\": \"Receita focada em validações complexas: campos dependentes, validação cruzada (matchField), assíncrona (unique) e regras condicionais.\",\n \"templateMeta\": {\n \"variantId\": \"validation\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"tags\": [\n \"validation\",\n \"rules\"\n ],\n \"useWhen\": \"criar validacoes avancadas e regras condicionais\",\n \"examplePrompts\": [\n \"adicione validacao cruzada de email\",\n \"crie regras condicionais por tipo de conta\"\n ]\n },\n \"metadata\": {\n \"name\": \"Advanced Validation Form\",\n \"version\": \"v1\"\n },\n \"fieldMetadata\": [\n {\n \"name\": \"username\",\n \"label\": \"Usuário\",\n \"controlType\": \"input\",\n \"unique\": true,\n \"validators\": {\n \"required\": true,\n \"minLength\": 4,\n \"pattern\": \"^[a-z0-9_]+$\",\n \"patternMessage\": \"Apenas letras minúsculas, números e underline.\",\n \"uniqueValidator\": \"checkUsernameUnique\",\n \"uniqueMessage\": \"Este usuário já está em uso.\"\n },\n \"_comment\": \"Validação de pattern regex e unicidade simulada.\"\n },\n {\n \"name\": \"email\",\n \"label\": \"E-mail\",\n \"controlType\": \"email\",\n \"validators\": {\n \"required\": true,\n \"email\": true\n }\n },\n {\n \"name\": \"confirmEmail\",\n \"label\": \"Confirmar E-mail\",\n \"controlType\": \"email\",\n \"validators\": {\n \"required\": true,\n \"matchField\": \"email\",\n \"matchFieldMessage\": \"Os e-mails não conferem.\"\n },\n \"_comment\": \"Validação cruzada: deve ser igual ao campo 'email'.\"\n },\n {\n \"name\": \"password\",\n \"label\": \"Senha\",\n \"controlType\": \"password\",\n \"validators\": {\n \"required\": true,\n \"minLength\": 8,\n \"customValidator\": \"passwordStrength\"\n }\n },\n {\n \"name\": \"age\",\n \"label\": \"Idade\",\n \"controlType\": \"numericTextBox\",\n \"validators\": {\n \"required\": true,\n \"min\": 18,\n \"max\": 120,\n \"minMessage\": \"É necessário ser maior de 18 anos.\"\n }\n },\n {\n \"name\": \"accountType\",\n \"label\": \"Tipo de Conta\",\n \"controlType\": \"select\",\n \"options\": [\n {\n \"label\": \"Pessoal\",\n \"value\": \"PERSONAL\"\n },\n {\n \"label\": \"Empresarial\",\n \"value\": \"BUSINESS\"\n }\n ],\n \"defaultValue\": \"PERSONAL\"\n },\n {\n \"name\": \"cnpj\",\n \"label\": \"CNPJ\",\n \"controlType\": \"cpfCnpjInput\",\n \"maskType\": \"cnpj\",\n \"conditionalRequired\": \"
|
|
8469
|
+
"content": "{\n \"_comment\": \"Receita focada em validações complexas: campos dependentes, validação cruzada (matchField), assíncrona (unique) e regras condicionais.\",\n \"templateMeta\": {\n \"variantId\": \"validation\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"tags\": [\n \"validation\",\n \"rules\"\n ],\n \"useWhen\": \"criar validacoes avancadas e regras condicionais\",\n \"examplePrompts\": [\n \"adicione validacao cruzada de email\",\n \"crie regras condicionais por tipo de conta\"\n ]\n },\n \"metadata\": {\n \"name\": \"Advanced Validation Form\",\n \"version\": \"v1\"\n },\n \"fieldMetadata\": [\n {\n \"name\": \"username\",\n \"label\": \"Usuário\",\n \"controlType\": \"input\",\n \"unique\": true,\n \"validators\": {\n \"required\": true,\n \"minLength\": 4,\n \"pattern\": \"^[a-z0-9_]+$\",\n \"patternMessage\": \"Apenas letras minúsculas, números e underline.\",\n \"uniqueValidator\": \"checkUsernameUnique\",\n \"uniqueMessage\": \"Este usuário já está em uso.\"\n },\n \"_comment\": \"Validação de pattern regex e unicidade simulada.\"\n },\n {\n \"name\": \"email\",\n \"label\": \"E-mail\",\n \"controlType\": \"email\",\n \"validators\": {\n \"required\": true,\n \"email\": true\n }\n },\n {\n \"name\": \"confirmEmail\",\n \"label\": \"Confirmar E-mail\",\n \"controlType\": \"email\",\n \"validators\": {\n \"required\": true,\n \"matchField\": \"email\",\n \"matchFieldMessage\": \"Os e-mails não conferem.\"\n },\n \"_comment\": \"Validação cruzada: deve ser igual ao campo 'email'.\"\n },\n {\n \"name\": \"password\",\n \"label\": \"Senha\",\n \"controlType\": \"password\",\n \"validators\": {\n \"required\": true,\n \"minLength\": 8,\n \"customValidator\": \"passwordStrength\"\n }\n },\n {\n \"name\": \"age\",\n \"label\": \"Idade\",\n \"controlType\": \"numericTextBox\",\n \"validators\": {\n \"required\": true,\n \"min\": 18,\n \"max\": 120,\n \"minMessage\": \"É necessário ser maior de 18 anos.\"\n }\n },\n {\n \"name\": \"accountType\",\n \"label\": \"Tipo de Conta\",\n \"controlType\": \"select\",\n \"options\": [\n {\n \"label\": \"Pessoal\",\n \"value\": \"PERSONAL\"\n },\n {\n \"label\": \"Empresarial\",\n \"value\": \"BUSINESS\"\n }\n ],\n \"defaultValue\": \"PERSONAL\"\n },\n {\n \"name\": \"cnpj\",\n \"label\": \"CNPJ\",\n \"controlType\": \"cpfCnpjInput\",\n \"maskType\": \"cnpj\",\n \"conditionalRequired\": {\n \"==\": [\n {\n \"var\": \"accountType\"\n },\n \"BUSINESS\"\n ]\n },\n \"conditionalDisplay\": {\n \"==\": [\n {\n \"var\": \"accountType\"\n },\n \"BUSINESS\"\n ]\n },\n \"_comment\": \"Campo condicional: só aparece e é obrigatório se accountType for 'BUSINESS'.\"\n },\n {\n \"name\": \"bio\",\n \"label\": \"Biografia\",\n \"controlType\": \"textarea\",\n \"validators\": {\n \"minWords\": 10,\n \"maxLength\": 500\n },\n \"hint\": \"Conte-nos um pouco sobre você (mínimo 10 palavras).\"\n },\n {\n \"name\": \"terms\",\n \"label\": \"Aceito os termos de uso\",\n \"controlType\": \"checkbox\",\n \"validators\": {\n \"requiredChecked\": true\n }\n }\n ],\n \"sections\": [\n {\n \"id\": \"credentials\",\n \"title\": \"Credenciais\",\n \"rows\": [\n {\n \"id\": \"credentials-row-1\",\n \"columns\": [\n {\n \"id\": \"username-col\",\n \"fields\": [\n \"username\"\n ]\n }\n ]\n },\n {\n \"id\": \"credentials-row-2\",\n \"columns\": [\n {\n \"id\": \"email-col\",\n \"fields\": [\n \"email\",\n \"confirmEmail\"\n ]\n }\n ]\n },\n {\n \"id\": \"credentials-row-3\",\n \"columns\": [\n {\n \"id\": \"password-col\",\n \"fields\": [\n \"password\"\n ]\n }\n ]\n }\n ]\n },\n {\n \"id\": \"profile\",\n \"title\": \"Perfil\",\n \"rows\": [\n {\n \"id\": \"profile-row-1\",\n \"columns\": [\n {\n \"id\": \"age-col\",\n \"fields\": [\n \"age\",\n \"accountType\"\n ]\n }\n ]\n },\n {\n \"id\": \"profile-row-2\",\n \"columns\": [\n {\n \"id\": \"cnpj-col\",\n \"fields\": [\n \"cnpj\"\n ]\n }\n ]\n },\n {\n \"id\": \"profile-row-3\",\n \"columns\": [\n {\n \"id\": \"bio-col\",\n \"fields\": [\n \"bio\"\n ]\n }\n ]\n }\n ]\n },\n {\n \"id\": \"terms\",\n \"rows\": [\n {\n \"id\": \"terms-row-1\",\n \"columns\": [\n {\n \"id\": \"terms-col\",\n \"fields\": [\n \"terms\"\n ]\n }\n ]\n }\n ]\n }\n ],\n \"actions\": {\n \"submit\": {\n \"id\": \"submit\",\n \"label\": \"Cadastrar\",\n \"color\": \"primary\",\n \"visible\": true,\n \"type\": \"submit\"\n },\n \"cancel\": {\n \"id\": \"cancel\",\n \"label\": \"Cancelar\",\n \"color\": \"basic\",\n \"visible\": false,\n \"type\": \"button\"\n },\n \"reset\": {\n \"id\": \"reset\",\n \"label\": \"Limpar\",\n \"color\": \"basic\",\n \"visible\": false,\n \"type\": \"reset\"\n }\n }\n}\n",
|
|
8431
8470
|
"sourcePointer": "praxis-ui-angular/examples/ai-recipes/praxis-dynamic-form.validation.json",
|
|
8432
|
-
"contentHash": "
|
|
8471
|
+
"contentHash": "4ee17414b7a5f61bfc18e56edd24462c227db8bea7508d33de1aefd2fc09d78e",
|
|
8433
8472
|
"sourceKind": "component_definition",
|
|
8434
8473
|
"sourceId": "praxis-dynamic-form",
|
|
8435
8474
|
"corpusVersion": "1.0.0"
|
|
@@ -11749,6 +11788,38 @@
|
|
|
11749
11788
|
"remover do filtro"
|
|
11750
11789
|
]
|
|
11751
11790
|
},
|
|
11791
|
+
{
|
|
11792
|
+
"path": "fieldMetadata[].fieldAccess",
|
|
11793
|
+
"category": "behavior",
|
|
11794
|
+
"valueKind": "object",
|
|
11795
|
+
"description": "Politica canonica de UX para visibilidade/edicao por authorities publicadas pelo backend.",
|
|
11796
|
+
"safetyNotes": "Nao e barreira de seguranca. O backend continua responsavel por filtrar dados sensiveis e validar payloads.",
|
|
11797
|
+
"intentExamples": [
|
|
11798
|
+
"campo visivel somente para RH",
|
|
11799
|
+
"bloquear edicao por perfil corporativo"
|
|
11800
|
+
]
|
|
11801
|
+
},
|
|
11802
|
+
{
|
|
11803
|
+
"path": "fieldMetadata[].fieldAccess.visibleForAuthorities",
|
|
11804
|
+
"category": "behavior",
|
|
11805
|
+
"valueKind": "array",
|
|
11806
|
+
"description": "Authorities que podem ver o campo no runtime quando a UX tiver claims explicitas.",
|
|
11807
|
+
"safetyNotes": "Nao inferir a partir de capabilities sem mapeamento canonico publicado."
|
|
11808
|
+
},
|
|
11809
|
+
{
|
|
11810
|
+
"path": "fieldMetadata[].fieldAccess.editableForAuthorities",
|
|
11811
|
+
"category": "behavior",
|
|
11812
|
+
"valueKind": "array",
|
|
11813
|
+
"description": "Authorities que podem editar o campo no runtime quando a UX tiver claims explicitas.",
|
|
11814
|
+
"safetyNotes": "Edicao concedida implica materializacao visivel no runtime; a validacao final permanece no backend."
|
|
11815
|
+
},
|
|
11816
|
+
{
|
|
11817
|
+
"path": "fieldMetadata[].fieldAccess.reason",
|
|
11818
|
+
"category": "misc",
|
|
11819
|
+
"valueKind": "string",
|
|
11820
|
+
"description": "Justificativa explicativa/auditavel da politica de acesso do campo.",
|
|
11821
|
+
"safetyNotes": "Reason sozinho nao deve decidir acesso nem revelar detalhes sensiveis para usuarios sem permissao."
|
|
11822
|
+
},
|
|
11752
11823
|
{
|
|
11753
11824
|
"path": "fieldMetadata[].dependencyFields",
|
|
11754
11825
|
"category": "dependency",
|
|
@@ -13797,7 +13868,7 @@
|
|
|
13797
13868
|
}
|
|
13798
13869
|
]
|
|
13799
13870
|
},
|
|
13800
|
-
"safetyNotes": "
|
|
13871
|
+
"safetyNotes": "Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao."
|
|
13801
13872
|
},
|
|
13802
13873
|
{
|
|
13803
13874
|
"id": "rule.remove",
|
|
@@ -13866,7 +13937,14 @@
|
|
|
13866
13937
|
"{{params.targetField}}"
|
|
13867
13938
|
],
|
|
13868
13939
|
"effect": {
|
|
13869
|
-
"condition":
|
|
13940
|
+
"condition": {
|
|
13941
|
+
"==": [
|
|
13942
|
+
{
|
|
13943
|
+
"var": "{{params.triggerField}}"
|
|
13944
|
+
},
|
|
13945
|
+
"{{params.conditionValue}}"
|
|
13946
|
+
]
|
|
13947
|
+
},
|
|
13870
13948
|
"properties": {
|
|
13871
13949
|
"hidden": "{{params.effectType === 'visibility' ? false : undefined}}",
|
|
13872
13950
|
"required": "{{params.effectType === 'required' ? true : undefined}}",
|
|
@@ -13902,7 +13980,7 @@
|
|
|
13902
13980
|
{
|
|
13903
13981
|
"name": "condition",
|
|
13904
13982
|
"type": "STRING",
|
|
13905
|
-
"description": "
|
|
13983
|
+
"description": "Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \"and\": [{ \">\": [{ \"var\": \"idade\" }, 18] }, { \"==\": [{ \"var\": \"possuiHabilitacao\" }, true] }] })"
|
|
13906
13984
|
},
|
|
13907
13985
|
{
|
|
13908
13986
|
"name": "targetField",
|
|
@@ -14000,9 +14078,9 @@
|
|
|
14000
14078
|
{
|
|
14001
14079
|
"chunkIndex": 1,
|
|
14002
14080
|
"chunkKind": "capabilities",
|
|
14003
|
-
"content": "Schema Capabilities:\n - Path: metadata.version\n Category: metadata\n Kind: string\n Description: Versão da configuração do formulário para controle de migração.\n - Path: metadata.source\n Category: metadata\n Kind: enum\n Description: Origem da configuração do formulário.\n - Path: metadata.lastUpdated\n Category: metadata\n Kind: string\n Description: Timestamp da última atualização da configuração (ISO-8601).\n - Path: metadata.schemaId\n Category: metadata\n Kind: string\n Description: ID do schema de origem para reconciliação no servidor.\n - Path: metadata.schemaContext\n Category: metadata\n Kind: object\n Description: Contexto do schema usado para compor o formulário.\n - Path: metadata.schemaContext.path\n Category: metadata\n Kind: string\n Description: Path do schema de origem.\n - Path: metadata.schemaContext.operation\n Category: metadata\n Kind: string\n Description: Operação do schema (ex.: \"get\", \"post\").\n - Path: metadata.schemaContext.schemaType\n Category: metadata\n Kind: enum\n Description: Tipo do schema (response/request).\n - Path: metadata.schemaContext.internal\n Category: metadata\n Kind: boolean\n Description: Indica se o schema é interno.\n - Path: metadata.schemaContext.tenant\n Category: metadata\n Kind: string\n Description: Tenant do schema (se aplicável).\n - Path: metadata.schemaContext.locale\n Category: metadata\n Kind: string\n Description: Locale do schema (se aplicável).\n - Path: metadata.serverHash\n Category: metadata\n Kind: string\n Description: Hash dos dados do servidor para detecção de mudanças.\n - Path: metadata.customizations\n Category: metadata\n Kind: array\n Description: Log de customizações manuais aplicadas ao formulário.\n - Path: fieldMetadata\n Category: fields\n Kind: array\n Description: Array de metadados dos campos. Usado para referenciar a configuração de campos.\n - Path: fieldMetadata[]\n Category: fields\n Kind: object\n Description: Item de metadados do campo (FieldMetadata).\n - Path: helpPresentation\n Category: appearance\n Kind: object\n Description: Politica visual do formulario para exibir hint/helpText dos campos sem alterar a semantica publicada pelos DTOs.\n - Path: helpPresentation.display\n Category: appearance\n Kind: enum\n Description: Define se a ajuda semantica dos campos fica inline, em icone de ajuda, automatica por densidade, ou oculta visualmente.\n - Path: helpPresentation.inlineMaxLength\n Category: appearance\n Kind: number\n Description: Tamanho maximo para manter ajuda inline quando display=\"auto\".\n - Path: helpPresentation.preferPopoverForControls\n Category: appearance\n Kind: array\n Description: Tipos de controle que devem preferir icone de ajuda quando display=\"auto\", como toggle, checkbox ou select.\n - Path: editorialContext\n Category: editorial\n Kind: object\n Description: Contexto editorial compartilhado entre os blocos hospedados antes/depois do formulario.\n - Path: editorialContext.[token]\n Category: editorial\n Kind: string\n Description: Valor simples exposto no contexto editorial.\n - Path: formBlocksBefore\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado antes do formulario.\n - Path: formBlocksBefore.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content.\n - Path: formBlocksBefore.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content editorial.\n - Path: formBlocksBefore.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes do formulario.\n - Path: formBlocksBefore.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes do formulario.\n - Path: formBlocksBefore.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content hospedado antes do formulario.\n - Path: formBlocksBeforeActions\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado depois das seções e antes da área principal de ações.\n - Path: formBlocksBeforeActions.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content antes das ações.\n - Path: formBlocksBeforeActions.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content antes das ações.\n - Path: formBlocksBeforeActions.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes da área principal de ações.\n - Path: formBlocksBeforeActions.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes da área principal de ações.\n - Path: formBlocksBeforeActions.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content antes das ações.\n - Path: formBlocksAfter\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado depois do formulario inteiro, incluindo a área principal de ações.\n - Path: formBlocksAfter.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content de fechamento.\n - Path: formBlocksAfter.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content de fechamento.\n - Path: formBlocksAfter.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados depois do formulario.\n - Path: formBlocksAfter.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado depois do formulario.\n - Path: formBlocksAfter.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content de fechamento.\n - Path: sections[].id\n Category: layout\n Kind: string\n Description: ID único da seção.\n - Path: sections[].title\n Category: layout\n Kind: string\n Description: TÃtulo exibido para cada seção do formulário.\n - Path: sections[].description\n Category: layout\n Kind: string\n Description: Descrição auxiliar exibida abaixo do tÃtulo da seção.\n - Path: sections[].icon\n Category: layout\n Kind: string\n Description: Nome do Ãcone (Material Icons) para o cabeçalho da seção.\n - Path: sections[].sectionHeader\n Category: layout\n Kind: object\n Description: Configuração rica do header visual da seção, com suporte a avatar por imagem, iniciais ou modo automático.\n - Path: sections[].sectionHeader.mode\n Category: layout\n Kind: enum\n Description: Estratégia visual do header da seção.\n - Path: sections[].sectionHeader.sourceField\n Category: layout\n Kind: string\n Description: Campo do formulário usado como origem da imagem do avatar.\n - Path: sections[].sectionHeader.initialsSourceField\n Category: layout\n Kind: string\n Description: Campo textual usado para derivar iniciais do avatar.\n - Path: sections[].sectionHeader.altField\n Category: layout\n Kind: string\n Description: Campo textual usado como texto acessivel do avatar e como fallback textual para iniciais quando initialsSourceField nao estiver definido.\n - Path: sections[].sectionHeader.fallbackIcon\n Category: layout\n Kind: string\n Description: Ãcone opcional usado quando o avatar dinâmico estiver vazio ou inválido.\n - Path: sections[].sectionHeader.emptyState\n Category: layout\n Kind: enum\n Description: Comportamento do header quando os campos de origem ainda não possuem valor.\n - Path: sections[].sectionHeader.size\n Category: layout\n Kind: enum\n Description: Tamanho semântico do avatar da seção, materializado pelo runtime via tokens.\n - Path: sections[].sectionHeader.initialsMaxLength\n Category: layout\n Kind: number\n Description: Máximo de letras exibidas no avatar textual.\n - Path: sections[].collapsible\n Category: layout\n Kind: boolean\n Description: Define se a seção pode ser colapsada/expandida pelo usuário.\n - Path: sections[].collapsed\n Category: layout\n Kind: boolean\n Description: Estado inicial da seção (colapsada/expandida) quando `collapsible` é true.\n - Path: sections[].gapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após a seção.\n - Path: sections[].titleGapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) abaixo do tÃtulo da seção.\n - Path: sections[].descriptionGapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) abaixo da descrição da seção.\n - Path: sections[].appearance\n Category: appearance\n Kind: enum\n Description: Preset visual do container/cabeçalho da seção.\n - Path: sections[].stepLabel\n Category: content\n Kind: string\n Description: Rótulo curto do passo exibido antes do tÃtulo da seção.\n - Path: sections[].titleStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para o tÃtulo da seção.\n - Path: sections[].descriptionStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para a descrição da seção.\n - Path: sections[].titleColor\n Category: appearance\n Kind: string\n Description: Cor do tÃtulo da seção (CSS color ou token).\n - Path: sections[].descriptionColor\n Category: appearance\n Kind: string\n Description: Cor da descrição da seção (CSS color ou token).\n - Path: sections[].headerAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento horizontal do conteúdo do cabeçalho da seção.\n - Path: sections[].headerTooltip\n Category: layout\n Kind: string\n Description: Texto de tooltip para o cabeçalho da seção.\n - Path: sections[].headerActions\n Category: layout\n Kind: array\n Description: Lista de ações iconográficas renderizadas no canto direito do cabeçalho da seção.\n - Path: sections[].headerActions[].id\n Category: layout\n Kind: string\n Description: ID estável da ação de cabeçalho da seção.\n - Path: sections[].headerActions[].label\n Category: layout\n Kind: string\n Description: Label acessÃvel usada em tooltip e aria-label da ação.\n - Path: sections[].headerActions[].icon\n Category: layout\n Kind: string\n Description: Ãcone renderizado na ação do cabeçalho da seção.\n - Path: sections[].headerActions[].action\n Category: layout\n Kind: string\n Description: Nome opcional da ação emitida no customAction; se ausente, o runtime usa o ID.\n - Path: sections[].headerActions[].tooltip\n Category: layout\n Kind: string\n Description: Tooltip opcional da ação; se ausente, o runtime usa a label.\n - Path: sections[].headerActions[].color\n Category: appearance\n Kind: enum\n Description: Tom visual da ação do cabeçalho da seção.\n - Path: sections[].headerActions[].visible\n Category: layout\n Kind: boolean\n Description: Controla a visibilidade da ação do cabeçalho da seção.\n - Path: sections[].headerActions[].disabled\n Category: layout\n Kind: boolean\n Description: Controla o estado desabilitado da ação do cabeçalho da seção.\n - Path: sections[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da seção.\n - Path: sections[].styles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da seção.\n - Path: sections[].rows[].id\n Category: layout\n Kind: string\n Description: ID único da linha dentro de uma seção.\n - Path: sections[].rows[].title\n Category: layout\n Kind: string\n Description: TÃtulo interno da linha (usado em editores e labels).\n - Path: sections[].rows[].gap\n Category: layout\n Kind: number\n Description: Espaçamento horizontal (em px) entre colunas nesta linha.\n - Path: sections[].rows[].rowGap\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após esta linha.\n - Path: sections[].rows[].columns[].id\n Category: layout\n Kind: string\n Description: ID único da coluna dentro de uma linha.\n - Path: sections[].rows[].columns[].title\n Category: layout\n Kind: string\n Description: TÃtulo interno da coluna (usado em editores e labels).\n - Path: sections[].rows[].columns[].testId\n Category: layout\n Kind: string\n Description: Atributo data-testid aplicado ao container da coluna.\n - Path: sections[].rows[].columns[].fields\n Category: layout\n Kind: array\n Description: Projeção legada/derivada dos itens kind:\"field\" dentro da coluna.\n - Path: sections[].rows[].columns[].fields[]\n Category: layout\n Kind: string\n Description: Nome do campo dentro da projeção legada/derivada da coluna.\n - Path: sections[].rows[].columns[].items\n Category: layout\n Kind: array\n Description: Lista canônica ordenada de itens da coluna: campos e blocos visuais.\n - Path: sections[].rows[].columns[].items[].kind\n Category: layout\n Kind: enum\n Description: Tipo do item de layout da coluna.\n - Path: sections[].rows[].columns[].items[].id\n Category: layout\n Kind: string\n Description: ID estável do item de layout dentro do formulário.\n - Path: sections[].rows[].columns[].items[].fieldName\n Category: layout\n Kind: string\n Description: Nome do campo quando kind é \"field\".\n - Path: sections[].rows[].columns[].items[].document\n Category: editorial\n Kind: object\n Description: RichContentDocument do bloco visual quando kind é \"richContent\".\n - Path: sections[].rows[].columns[].items[].layout\n Category: editorial\n Kind: enum\n Description: Modo de renderização do bloco visual richContent dentro da coluna.\n - Path: sections[].rows[].columns[].items[].rootClassName\n Category: appearance\n Kind: string\n Description: Classe CSS opcional aplicada ao bloco visual richContent.\n - Path: sections[].rows[].columns[].span.xs\n Category: layout\n Kind: number\n Description: Largura da coluna para telas extra pequenas (xs) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.sm\n Category: layout\n Kind: number\n Description: Largura da coluna para telas pequenas (sm) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.md\n Category: layout\n Kind: number\n Description: Largura da coluna para telas médias (md) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.lg\n Category: layout\n Kind: number\n Description: Largura da coluna para telas grandes (lg) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.xl\n Category: layout\n Kind: number\n Description: Largura da coluna para telas extra grandes (xl) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.xs\n Category: layout\n Kind: number\n Description: Offset da coluna para telas extra pequenas (xs) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.sm\n Category: layout\n Kind: number\n Description: Offset da coluna para telas pequenas (sm) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.md\n Category: layout\n Kind: number\n Description: Offset da coluna para telas médias (md) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.lg\n Category: layout\n Kind: number\n Description: Offset da coluna para telas grandes (lg) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.xl\n Category: layout\n Kind: number\n Description: Offset da coluna para telas extra grandes (xl) no grid system (1-12).\n - Path: sections[].rows[].columns[].order.xs\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas extra pequenas (xs).\n - Path: sections[].rows[].columns[].order.sm\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas pequenas (sm).\n - Path: sections[].rows[].columns[].order.md\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas médias (md).\n - Path: sections[].rows[].columns[].order.lg\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas grandes (lg).\n - Path: sections[].rows[].columns[].order.xl\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas extra grandes (xl).\n - Path: sections[].rows[].columns[].hidden.xs\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra pequenas (xs).\n - Path: sections[].rows[].columns[].hidden.sm\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas pequenas (sm).\n - Path: sections[].rows[].columns[].hidden.md\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas médias (md).\n - Path: sections[].rows[].columns[].hidden.lg\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas grandes (lg).\n - Path: sections[].rows[].columns[].hidden.xl\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra grandes (xl).\n - Path: sections[].rows[].columns[].align\n Category: layout\n Kind: enum\n Description: Alinhamento vertical do conteúdo da coluna.\n - Path: sections[].rows[].columns[].padding\n Category: layout\n Kind: number\n Description: Padding (em px) interno da coluna.\n - Path: sections[].rows[].columns[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada à coluna.\n - Path: actions.submit.id\n Category: actions\n Kind: string\n Description: ID do botão de submissão.\n - Path: actions.submit.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de submissão.\n - Path: actions.submit.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de submissão.\n - Path: actions.submit.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de submissão.\n - Path: actions.submit.color\n Category: actions\n Kind: enum\n Description: Cor do botão de submissão.\n - Path: actions.submit.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de submissão.\n - Path: actions.submit.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de submissão.\n - Path: actions.submit.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de submissão.\n - Path: actions.submit.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de submissão.\n - Path: actions.submit.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de submissão.\n - Path: actions.submit.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de submissão.\n - Path: actions.submit.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.submit.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de submissão.\n - Path: actions.submit.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de submissão.\n - Path: actions.submit.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"ctrl+s\") para o botão de submissão.\n - Path: actions.cancel.id\n Category: actions\n Kind: string\n Description: ID do botão de cancelar.\n - Path: actions.cancel.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de cancelar.\n - Path: actions.cancel.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de cancelar.\n - Path: actions.cancel.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de cancelar.\n - Path: actions.cancel.color\n Category: actions\n Kind: enum\n Description: Cor do botão de cancelar.\n - Path: actions.cancel.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de cancelar.\n - Path: actions.cancel.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de cancelar.\n - Path: actions.cancel.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de cancelar.\n - Path: actions.cancel.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de cancelar.\n - Path: actions.cancel.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de cancelar.\n - Path: actions.cancel.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de cancelar.\n - Path: actions.cancel.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.cancel.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de cancelar.\n - Path: actions.cancel.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de cancelar.\n - Path: actions.cancel.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"esc\") para o botão de cancelar.\n - Path: actions.reset.id\n Category: actions\n Kind: string\n Description: ID do botão de reset.\n - Path: actions.reset.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de reset.\n - Path: actions.reset.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de reset.\n - Path: actions.reset.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de reset.\n - Path: actions.reset.color\n Category: actions\n Kind: enum\n Description: Cor do botão de reset.\n - Path: actions.reset.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de reset.\n - Path: actions.reset.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de reset.\n - Path: actions.reset.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de reset.\n - Path: actions.reset.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de reset.\n - Path: actions.reset.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de reset.\n - Path: actions.reset.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de reset.\n - Path: actions.reset.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.reset.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de reset.\n - Path: actions.reset.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de reset.\n - Path: actions.reset.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"ctrl+shift+r\") para o botão de reset.\n - Path: actions.custom\n Category: actions\n Kind: array\n Description: Lista de botões de ação customizados.\n - Path: actions.custom[]\n Category: actions\n Kind: object\n Description: Configuração de um botão de ação customizado.\n - Path: actions.custom[].id\n Category: actions\n Kind: string\n Description: ID da ação customizada.\n - Path: actions.custom[].visible\n Category: actions\n Kind: boolean\n Description: Visibilidade da ação customizada.\n - Path: actions.custom[].label\n Category: actions\n Kind: string\n Description: Rótulo da ação customizada.\n - Path: actions.custom[].icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para a ação customizada.\n - Path: actions.custom[].color\n Category: actions\n Kind: enum\n Description: Cor da ação customizada.\n - Path: actions.custom[].variant\n Category: actions\n Kind: enum\n Description: Variante visual da ação customizada.\n - Path: actions.custom[].size\n Category: actions\n Kind: enum\n Description: Tamanho da ação customizada.\n - Path: actions.custom[].className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada à ação customizada.\n - Path: actions.custom[].style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados à ação customizada.\n - Path: actions.custom[].disabled\n Category: actions\n Kind: boolean\n Description: Desabilita a ação customizada.\n - Path: actions.custom[].type\n Category: actions\n Kind: enum\n Description: Tipo do botão da ação customizada.\n - Path: actions.custom[].action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.custom[].tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido na ação customizada.\n - Path: actions.custom[].loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento na ação customizada.\n - Path: actions.custom[].shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado para a ação customizada.\n - Path: actions.position\n Category: layout\n Kind: enum\n Description: Posicionamento horizontal da barra de ações.\n - Path: actions.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões dentro da barra de ações (horizontal/vertical).\n - Path: actions.spacing\n Category: layout\n Kind: enum\n Description: Espaçamento entre os botões na barra de ações.\n - Path: actions.sticky\n Category: layout\n Kind: boolean\n Description: Define se a barra de ações deve permanecer visÃvel ao rolar a página.\n - Path: actions.divider\n Category: layout\n Kind: boolean\n Description: Exibe um divisor superior acima da barra de ações.\n - Path: actions.placement\n Category: layout\n Kind: enum\n Description: Localização estrutural da barra de ações no layout.\n - Path: actions.mobile.position\n Category: layout\n Kind: enum\n Description: Posicionamento da barra de ações em dispositivos móveis.\n - Path: actions.mobile.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões em dispositivos móveis.\n - Path: actions.mobile.collapseToMenu\n Category: behavior\n Kind: boolean\n Description: Em mobile, agrupa ações em um menu (se houver muitas).\n - Path: actions.containerClassName\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da barra de ações.\n - Path: actions.containerStyles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da barra de ações.\n - Path: actions.showSaveButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de submit.\n - Path: actions.submitButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de submit.\n - Path: actions.showCancelButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de cancel.\n - Path: actions.cancelButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de cancel.\n - Path: actions.showResetButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de reset.\n - Path: actions.resetButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de reset.\n - Path: behavior.confirmOnUnsavedChanges\n Category: behavior\n Kind: boolean\n Description: Exibe um alerta se o usuário tentar sair com mudanças não salvas.\n - Path: behavior.trackHistory\n Category: behavior\n Kind: boolean\n Description: Habilita rastreamento de histórico para desfazer/refazer (se suportado).\n - Path: behavior.focusFirstError\n Category: behavior\n Kind: boolean\n Description: Ao submeter, foca automaticamente no primeiro campo com erro.\n - Path: behavior.scrollToErrors\n Category: behavior\n Kind: boolean\n Description: Ao submeter, rola a página para exibir o primeiro erro.\n - Path: behavior.clearAfterSave\n Category: behavior\n Kind: boolean\n Description: Limpa o formulário após uma submissão bem-sucedida.\n - Path: behavior.redirectAfterSave\n Category: behavior\n Kind: string\n Description: URL para redirecionar após uma submissão bem-sucedida.\n - Path: behavior.reactiveValidation\n Category: validation\n Kind: boolean\n Description: Ativa validação reativa (em tempo real) em `valueChanges`.\n - Path: behavior.reactiveValidationDebounceMs\n Category: validation\n Kind: number\n Description: Debounce (em ms) para a validação reativa.\n - Path: api.saveEndpoint\n Category: api\n Kind: string\n Description: URL para onde os dados do formulário serão enviados (POST/PUT/PATCH).\n - Path: api.loadEndpoint\n Category: api\n Kind: string\n Description: URL para buscar dados para popular o formulário (GET).\n - Path: api.saveMethod\n Category: api\n Kind: enum\n Description: Método HTTP para a requisição de salvar.\n - Path: api.timeout\n Category: api\n Kind: number\n Description: Tempo limite (em ms) para as requisições API.\n - Path: api.headers\n Category: api\n Kind: object\n Description: Cabeçalhos HTTP personalizados para as requisições API.\n - Path: api.idField\n Category: api\n Kind: string\n Description: Nome do campo que representa o ID do registro no payload (para PUT/PATCH).\n - Path: api.beforeSave\n Category: hooks\n Kind: expression\n Description: Hook para pré-processamento de dados antes de enviar para a API.\n - Path: api.afterLoad\n Category: hooks\n Kind: expression\n Description: Hook para pós-processamento de dados após carregar da API.\n - Path: messages.updateRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após atualização de registro.\n - Path: messages.createRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após criação de registro.\n - Path: messages.updateRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após atualização de registro.\n - Path: messages.createRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após criação de registro.\n - Path: messages.confirmations.submit\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de submeter o formulário.\n - Path: messages.confirmations.cancel\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de cancelar.\n - Path: messages.confirmations.reset\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de resetar o formulário.\n - Path: messages.confirmations.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para ações customizadas. Substitua `[actionId]` pelo ID da ação.\n - Path: messages.customActions.[actionId]\n Category: messages\n Kind: object\n Description: Mensagens da ação customizada (success/error/confirmation). Substitua `[actionId]` pelo ID da ação.\n - Path: messages.customActions.[actionId].success\n Category: messages\n Kind: string\n Description: Mensagem de sucesso para a ação customizada.\n - Path: messages.customActions.[actionId].error\n Category: messages\n Kind: string\n Description: Mensagem de erro para a ação customizada.\n - Path: messages.customActions.[actionId].confirmation\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para a ação customizada.\n - Path: messages.loading.submit\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o envio do formulário.\n - Path: messages.loading.cancel\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o cancelamento.\n - Path: messages.loading.reset\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o reset do formulário.\n - Path: messages.loading.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem exibida durante a execução de uma ação customizada. Substitua `[actionId]` pelo ID da ação.\n - Path: formRules[].id\n Category: rules\n Kind: string\n Description: ID único da regra de layout.\n - Path: formRules[].name\n Category: rules\n Kind: string\n Description: Nome amigável da regra de layout.\n - Path: formRules[].description\n Category: rules\n Kind: string\n Description: Descrição da regra de layout para documentação.\n - Path: formRules[].metadata.origin\n Category: rules\n Kind: enum\n Description: Origem da regra sugerida pela IA.\n - Path: formRules[].metadata.reviewStatus\n Category: rules\n Kind: enum\n Description: Status de revisão humana da regra sugerida pela IA.\n - Path: formRules[].targetType\n Category: rules\n Kind: enum\n Description: Tipo do elemento alvo da regra (campo, seção, ação, linha, coluna ou bloco visual).\n - Path: formRules[].context\n Category: rules\n Kind: enum\n Description: Contexto legado da regra (quando properties não forem informadas).\n - Path: formRules[].targets\n Category: rules\n Kind: array\n Description: Lista de IDs dos elementos alvo da regra. O tipo do ID depende de `targetType`.\n - Path: formRules[].targets[]\n Category: rules\n Kind: string\n Description: ID do alvo da regra.\n - Path: formRules[].targetFields\n Category: rules\n Kind: array\n Description: Alias legado para alvos de campo.\n - Path: formRules[].targetFields[]\n Category: rules\n Kind: string\n Description: ID do campo alvo (alias legado).\n - Path: formRules[].effect.condition\n Category: rules\n Kind: expression\n Description: Condicao canonica da regra, expressa em Json Logic.\n - Path: formCommandRules\n Category: rules\n Kind: array\n Description: Regras condicionais de comando avaliadas depois que formRules estabilizam valores calculados.\n - Path: formCommandRules[].condition\n Category: rules\n Kind: expression\n Description: Condicao Json Logic avaliada sobre formData estabilizado, incluindo field values calculados.\n - Path: formCommandRules[].effects[].kind\n Category: rules\n Kind: enum\n Description: Tipo do efeito de comando. O primeiro corte suporta apenas global-action.\n - Path: formCommandRules[].effects[].globalAction\n Category: rules\n Kind: object\n Description: GlobalActionRef estruturado executado por GlobalActionService.executeRef quando a regra entra na condicao.\n - Path: formCommandRules[].policy\n Category: rules\n Kind: object\n Description: Politica operacional do comando: trigger, distinct, distinctBy, debounceMs, errorPolicy e runOnInitialEvaluation.\n - Path: formRulesState\n Category: rules\n Kind: object\n Description: Estado interno do builder de regras (metadados visuais).\n - Path: hooks\n Category: hooks\n Kind: object\n Description: Declarações de hooks por estágio do ciclo de vida do formulário.\n - Path: hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeInit.\n - Path: hooks.beforeInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterInit.\n - Path: hooks.afterInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeValidate.\n - Path: hooks.beforeValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterValidate.\n - Path: hooks.afterValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeSubmit.\n - Path: hooks.beforeSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterSubmit.\n - Path: hooks.afterSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.onError[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para onError.\n - Path: hooks.onError[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.onError[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.onError[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.onError[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hints.dataModes.create\n Category: form_config\n Kind: string\n Description: Dica para o modo de criação de dados.\n - Path: hints.dataModes.edit\n Category: form_config\n Kind: string\n Description: Dica para o modo de edição de dados.\n - Path: hints.dataModes.view\n Category: form_config\n Kind: string\n Description: Dica para o modo de visualização de dados.\n - Path: hints.uiModes.presentation\n Category: form_config\n Kind: string\n Description: Dica para o modo de apresentação da UI.\n - Path: hints.uiModes.readonly\n Category: form_config\n Kind: string\n Description: Dica para o modo de somente leitura da UI.\n - Path: hints.uiModes.disabled\n Category: form_config\n Kind: string\n Description: Dica para o modo desabilitado da UI.\n - Path: hints.uiModes.visible\n Category: form_config\n Kind: string\n Description: Dica para o modo de visibilidade da UI.\n - Path: fieldMetadata[].id\n Category: identity\n Kind: string\n Description: Identificador unico da instancia do componente.\n - Path: fieldMetadata[].version\n Category: identity\n Kind: string\n Description: Versao do schema de metadata (migracao).\n - Path: fieldMetadata[].context\n Category: identity\n Kind: enum\n Description: Contexto de uso do componente (form/filter/table/dialog/standalone).\n - Path: fieldMetadata[].createdAt\n Category: misc\n Kind: string\n Description: Timestamp de criacao (ISO).\n - Path: fieldMetadata[].updatedAt\n Category: misc\n Kind: string\n Description: Timestamp de atualizacao (ISO).\n - Path: fieldMetadata[].tags\n Category: identity\n Kind: array\n Description: Tags para categorizacao e busca.\n - Path: fieldMetadata[].cssClass\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao host do componente.\n - Path: fieldMetadata[].style\n Category: appearance\n Kind: object\n Description: Estilos inline (objeto CSS).\n - Path: fieldMetadata[].dataAttributes\n Category: data\n Kind: object\n Description: Data attributes para teste/analytics.\n - Path: fieldMetadata[].name\n Category: identity\n Kind: string\n Description: Identificador único do campo. Essencial para binding.\n - Path: fieldMetadata[].label\n Category: identity\n Kind: string\n Description: Rótulo principal exibido para o usuário.\n - Path: fieldMetadata[].placeholder\n Category: identity\n Kind: string\n Description: Texto temporário exibido quando vazio.\n - Path: fieldMetadata[].hint\n Category: identity\n Kind: string\n Description: Texto de ajuda exibido abaixo do campo.\n - Path: fieldMetadata[].helpText\n Category: identity\n Kind: string\n Description: Texto semântico de ajuda publicado pelo schema/DTO.\n - Path: fieldMetadata[].tooltip\n Category: identity\n Kind: string\n Description: Texto exibido ao passar o mouse.\n - Path: fieldMetadata[].tooltipOnHover\n Category: identity\n Kind: boolean\n Description: Habilita apresentação do tooltip no hover quando suportado pelo renderer.\n - Path: fieldMetadata[].description\n Category: identity\n Kind: string\n Description: Descrição detalhada (usada em documentação ou helps extensos).\n - Path: fieldMetadata[].selectionMode\n Category: behavior\n Kind: enum\n Description: Semântica de seleção explícita para controles de escolha.\n - Path: fieldMetadata[].variant\n Category: appearance\n Kind: string\n Description: Variante visual/semântica do controle.\n - Path: fieldMetadata[].density\n Category: appearance\n Kind: enum\n Description: Densidade visual do shell do controle.\n - Path: fieldMetadata[].links\n Category: identity\n Kind: array\n Description: Links ricos associados ao campo, úteis em consentimentos e conteúdo legal.\n - Path: fieldMetadata[].group\n Category: identity\n Kind: string\n Description: Agrupador lógico do campo.\n - Path: fieldMetadata[].order\n Category: layout\n Kind: number\n Description: Ordem de exibição do campo.\n - Path: fieldMetadata[].width\n Category: layout\n Kind: string\n Description: Largura do campo (ex: 50%, 100px).\n - Path: fieldMetadata[].isFlex\n Category: layout\n Kind: boolean\n Description: Se true, usa flex-grow para preencher espaço.\n - Path: fieldMetadata[].controlType\n Category: behavior\n Kind: enum\n Description: Tipo do componente de UI (input, select, datepicker, etc).\n - Path: fieldMetadata[].dataType\n Category: data\n Kind: enum\n Description: Tipo de dado do campo (text, number, date, etc).\n - Path: fieldMetadata[].source\n Category: data\n Kind: enum\n Description: Origem semântica do campo. Use local para campos do host que não vêm do schema backend.\n - Path: fieldMetadata[].transient\n Category: data\n Kind: boolean\n Description: Marca o campo como temporário/local para preenchimento. O dynamic-form omite do submit por padrão.\n - Path: fieldMetadata[].submitPolicy\n Category: behavior\n Kind: enum\n Description: Política de submit para sobrescrever o padrão de campos locais/transient.\n - Path: fieldMetadata[].materialDesign.appearance\n Category: appearance\n Kind: enum\n Description: Aparência do campo Material (fill/outline).\n - Path: fieldMetadata[].materialDesign.color\n Category: appearance\n Kind: enum\n Description: Tema de cor Material (primary/accent/warn).\n - Path: fieldMetadata[].materialDesign.floatLabel\n Category: appearance\n Kind: enum\n Description: Comportamento do rótulo flutuante.\n - Path: fieldMetadata[].materialDesign.subscriptSizing\n Category: appearance\n Kind: enum\n Description: Estratégia de sizing do subscript (erros/hints).\n - Path: fieldMetadata[].materialDesign.hideRequiredMarker\n Category: appearance\n Kind: boolean\n Description: Oculta o asterisco de campo obrigatório.\n - Path: fieldMetadata[].materialDesign.density\n Category: appearance\n Kind: enum\n Description: Densidade do campo Material.\n - Path: fieldMetadata[].materialDesign.disableRipple\n Category: appearance\n Kind: boolean\n Description: Desativa ripple/ondulação em componentes Material.\n - Path: fieldMetadata[].materialDesign.customPalette\n Category: appearance\n Kind: object\n Description: Override de paleta (primary/accent/warn).\n - Path: fieldMetadata[].materialDesign.animations\n Category: appearance\n Kind: object\n Description: Configuração de animações (disable, duration, easing).\n - Path: fieldMetadata[].prefixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido antes do valor.\n - Path: fieldMetadata[].suffixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido depois do valor.\n - Path: fieldMetadata[].iconPosition\n Category: appearance\n Kind: enum\n Description: Posição preferencial do ícone principal.\n - Path: fieldMetadata[].iconSize\n Category: appearance\n Kind: enum\n Description: Tamanho do ícone.\n - Path: fieldMetadata[].iconColor\n Category: appearance\n Kind: string\n Description: Cor semântica ou token de cor aplicado ao ícone principal.\n - Path: fieldMetadata[].iconClass\n Category: appearance\n Kind: string\n Description: Classe CSS controlada pelo host para o ícone principal.\n - Path: fieldMetadata[].iconStyle\n Category: appearance\n Kind: string\n Description: Estilo visual semântico do ícone quando o renderer suportar variações.\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n - Path: fieldMetadata[].valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n - Path: fieldMetadata[].presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n - Path: fieldMetadata[].presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n - Path: fieldMetadata[].presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n - Path: fieldMetadata[].presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n - Path: fieldMetadata[].presentation.visualization.fallbackText\n Category: accessibility\n Kind: string\n Description: Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.\n - Path: fieldMetadata[].presentationRules\n Category: appearance\n Kind: array\n Description: Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.\n - Path: fieldMetadata[].presentationRules[].when\n Category: behavior\n Kind: object\n Description: Guarda Json Logic avaliada contra o contexto de apresentacao do campo.\n - Path: fieldMetadata[].presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n - Path: fieldMetadata[].options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\nComponent Capabilities:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\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 - 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 - 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 - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\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 - 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 - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\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 - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\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 - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\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 - 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 - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\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 - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\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 - 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 - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\nCapability Notes:\n - Este catalogo descreve inputs e outputs do componente.\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.\n",
|
|
14081
|
+
"content": "Schema Capabilities:\n - Path: metadata.version\n Category: metadata\n Kind: string\n Description: Versão da configuração do formulário para controle de migração.\n - Path: metadata.source\n Category: metadata\n Kind: enum\n Description: Origem da configuração do formulário.\n - Path: metadata.lastUpdated\n Category: metadata\n Kind: string\n Description: Timestamp da última atualização da configuração (ISO-8601).\n - Path: metadata.schemaId\n Category: metadata\n Kind: string\n Description: ID do schema de origem para reconciliação no servidor.\n - Path: metadata.schemaContext\n Category: metadata\n Kind: object\n Description: Contexto do schema usado para compor o formulário.\n - Path: metadata.schemaContext.path\n Category: metadata\n Kind: string\n Description: Path do schema de origem.\n - Path: metadata.schemaContext.operation\n Category: metadata\n Kind: string\n Description: Operação do schema (ex.: \"get\", \"post\").\n - Path: metadata.schemaContext.schemaType\n Category: metadata\n Kind: enum\n Description: Tipo do schema (response/request).\n - Path: metadata.schemaContext.internal\n Category: metadata\n Kind: boolean\n Description: Indica se o schema é interno.\n - Path: metadata.schemaContext.tenant\n Category: metadata\n Kind: string\n Description: Tenant do schema (se aplicável).\n - Path: metadata.schemaContext.locale\n Category: metadata\n Kind: string\n Description: Locale do schema (se aplicável).\n - Path: metadata.serverHash\n Category: metadata\n Kind: string\n Description: Hash dos dados do servidor para detecção de mudanças.\n - Path: metadata.customizations\n Category: metadata\n Kind: array\n Description: Log de customizações manuais aplicadas ao formulário.\n - Path: fieldMetadata\n Category: fields\n Kind: array\n Description: Array de metadados dos campos. Usado para referenciar a configuração de campos.\n - Path: fieldMetadata[]\n Category: fields\n Kind: object\n Description: Item de metadados do campo (FieldMetadata).\n - Path: helpPresentation\n Category: appearance\n Kind: object\n Description: Politica visual do formulario para exibir hint/helpText dos campos sem alterar a semantica publicada pelos DTOs.\n - Path: helpPresentation.display\n Category: appearance\n Kind: enum\n Description: Define se a ajuda semantica dos campos fica inline, em icone de ajuda, automatica por densidade, ou oculta visualmente.\n - Path: helpPresentation.inlineMaxLength\n Category: appearance\n Kind: number\n Description: Tamanho maximo para manter ajuda inline quando display=\"auto\".\n - Path: helpPresentation.preferPopoverForControls\n Category: appearance\n Kind: array\n Description: Tipos de controle que devem preferir icone de ajuda quando display=\"auto\", como toggle, checkbox ou select.\n - Path: editorialContext\n Category: editorial\n Kind: object\n Description: Contexto editorial compartilhado entre os blocos hospedados antes/depois do formulario.\n - Path: editorialContext.[token]\n Category: editorial\n Kind: string\n Description: Valor simples exposto no contexto editorial.\n - Path: formBlocksBefore\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado antes do formulario.\n - Path: formBlocksBefore.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content.\n - Path: formBlocksBefore.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content editorial.\n - Path: formBlocksBefore.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes do formulario.\n - Path: formBlocksBefore.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes do formulario.\n - Path: formBlocksBefore.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content hospedado antes do formulario.\n - Path: formBlocksBeforeActions\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado depois das seções e antes da área principal de ações.\n - Path: formBlocksBeforeActions.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content antes das ações.\n - Path: formBlocksBeforeActions.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content antes das ações.\n - Path: formBlocksBeforeActions.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes da área principal de ações.\n - Path: formBlocksBeforeActions.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes da área principal de ações.\n - Path: formBlocksBeforeActions.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content antes das ações.\n - Path: formBlocksAfter\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado depois do formulario inteiro, incluindo a área principal de ações.\n - Path: formBlocksAfter.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content de fechamento.\n - Path: formBlocksAfter.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content de fechamento.\n - Path: formBlocksAfter.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados depois do formulario.\n - Path: formBlocksAfter.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado depois do formulario.\n - Path: formBlocksAfter.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content de fechamento.\n - Path: sections[].id\n Category: layout\n Kind: string\n Description: ID único da seção.\n - Path: sections[].title\n Category: layout\n Kind: string\n Description: TÃtulo exibido para cada seção do formulário.\n - Path: sections[].description\n Category: layout\n Kind: string\n Description: Descrição auxiliar exibida abaixo do tÃtulo da seção.\n - Path: sections[].icon\n Category: layout\n Kind: string\n Description: Nome do Ãcone (Material Icons) para o cabeçalho da seção.\n - Path: sections[].sectionHeader\n Category: layout\n Kind: object\n Description: Configuração rica do header visual da seção, com suporte a avatar por imagem, iniciais ou modo automático.\n - Path: sections[].sectionHeader.mode\n Category: layout\n Kind: enum\n Description: Estratégia visual do header da seção.\n - Path: sections[].sectionHeader.sourceField\n Category: layout\n Kind: string\n Description: Campo do formulário usado como origem da imagem do avatar.\n - Path: sections[].sectionHeader.initialsSourceField\n Category: layout\n Kind: string\n Description: Campo textual usado para derivar iniciais do avatar.\n - Path: sections[].sectionHeader.altField\n Category: layout\n Kind: string\n Description: Campo textual usado como texto acessivel do avatar e como fallback textual para iniciais quando initialsSourceField nao estiver definido.\n - Path: sections[].sectionHeader.fallbackIcon\n Category: layout\n Kind: string\n Description: Ãcone opcional usado quando o avatar dinâmico estiver vazio ou inválido.\n - Path: sections[].sectionHeader.emptyState\n Category: layout\n Kind: enum\n Description: Comportamento do header quando os campos de origem ainda não possuem valor.\n - Path: sections[].sectionHeader.size\n Category: layout\n Kind: enum\n Description: Tamanho semântico do avatar da seção, materializado pelo runtime via tokens.\n - Path: sections[].sectionHeader.initialsMaxLength\n Category: layout\n Kind: number\n Description: Máximo de letras exibidas no avatar textual.\n - Path: sections[].collapsible\n Category: layout\n Kind: boolean\n Description: Define se a seção pode ser colapsada/expandida pelo usuário.\n - Path: sections[].collapsed\n Category: layout\n Kind: boolean\n Description: Estado inicial da seção (colapsada/expandida) quando `collapsible` é true.\n - Path: sections[].gapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após a seção.\n - Path: sections[].titleGapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) abaixo do tÃtulo da seção.\n - Path: sections[].descriptionGapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) abaixo da descrição da seção.\n - Path: sections[].appearance\n Category: appearance\n Kind: enum\n Description: Preset visual do container/cabeçalho da seção.\n - Path: sections[].stepLabel\n Category: content\n Kind: string\n Description: Rótulo curto do passo exibido antes do tÃtulo da seção.\n - Path: sections[].titleStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para o tÃtulo da seção.\n - Path: sections[].descriptionStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para a descrição da seção.\n - Path: sections[].titleColor\n Category: appearance\n Kind: string\n Description: Cor do tÃtulo da seção (CSS color ou token).\n - Path: sections[].descriptionColor\n Category: appearance\n Kind: string\n Description: Cor da descrição da seção (CSS color ou token).\n - Path: sections[].headerAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento horizontal do conteúdo do cabeçalho da seção.\n - Path: sections[].headerTooltip\n Category: layout\n Kind: string\n Description: Texto de tooltip para o cabeçalho da seção.\n - Path: sections[].headerActions\n Category: layout\n Kind: array\n Description: Lista de ações iconográficas renderizadas no canto direito do cabeçalho da seção.\n - Path: sections[].headerActions[].id\n Category: layout\n Kind: string\n Description: ID estável da ação de cabeçalho da seção.\n - Path: sections[].headerActions[].label\n Category: layout\n Kind: string\n Description: Label acessÃvel usada em tooltip e aria-label da ação.\n - Path: sections[].headerActions[].icon\n Category: layout\n Kind: string\n Description: Ãcone renderizado na ação do cabeçalho da seção.\n - Path: sections[].headerActions[].action\n Category: layout\n Kind: string\n Description: Nome opcional da ação emitida no customAction; se ausente, o runtime usa o ID.\n - Path: sections[].headerActions[].tooltip\n Category: layout\n Kind: string\n Description: Tooltip opcional da ação; se ausente, o runtime usa a label.\n - Path: sections[].headerActions[].color\n Category: appearance\n Kind: enum\n Description: Tom visual da ação do cabeçalho da seção.\n - Path: sections[].headerActions[].visible\n Category: layout\n Kind: boolean\n Description: Controla a visibilidade da ação do cabeçalho da seção.\n - Path: sections[].headerActions[].disabled\n Category: layout\n Kind: boolean\n Description: Controla o estado desabilitado da ação do cabeçalho da seção.\n - Path: sections[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da seção.\n - Path: sections[].styles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da seção.\n - Path: sections[].rows[].id\n Category: layout\n Kind: string\n Description: ID único da linha dentro de uma seção.\n - Path: sections[].rows[].title\n Category: layout\n Kind: string\n Description: TÃtulo interno da linha (usado em editores e labels).\n - Path: sections[].rows[].gap\n Category: layout\n Kind: number\n Description: Espaçamento horizontal (em px) entre colunas nesta linha.\n - Path: sections[].rows[].rowGap\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após esta linha.\n - Path: sections[].rows[].columns[].id\n Category: layout\n Kind: string\n Description: ID único da coluna dentro de uma linha.\n - Path: sections[].rows[].columns[].title\n Category: layout\n Kind: string\n Description: TÃtulo interno da coluna (usado em editores e labels).\n - Path: sections[].rows[].columns[].testId\n Category: layout\n Kind: string\n Description: Atributo data-testid aplicado ao container da coluna.\n - Path: sections[].rows[].columns[].fields\n Category: layout\n Kind: array\n Description: Projeção legada/derivada dos itens kind:\"field\" dentro da coluna.\n - Path: sections[].rows[].columns[].fields[]\n Category: layout\n Kind: string\n Description: Nome do campo dentro da projeção legada/derivada da coluna.\n - Path: sections[].rows[].columns[].items\n Category: layout\n Kind: array\n Description: Lista canônica ordenada de itens da coluna: campos e blocos visuais.\n - Path: sections[].rows[].columns[].items[].kind\n Category: layout\n Kind: enum\n Description: Tipo do item de layout da coluna.\n - Path: sections[].rows[].columns[].items[].id\n Category: layout\n Kind: string\n Description: ID estável do item de layout dentro do formulário.\n - Path: sections[].rows[].columns[].items[].fieldName\n Category: layout\n Kind: string\n Description: Nome do campo quando kind é \"field\".\n - Path: sections[].rows[].columns[].items[].document\n Category: editorial\n Kind: object\n Description: RichContentDocument do bloco visual quando kind é \"richContent\".\n - Path: sections[].rows[].columns[].items[].layout\n Category: editorial\n Kind: enum\n Description: Modo de renderização do bloco visual richContent dentro da coluna.\n - Path: sections[].rows[].columns[].items[].rootClassName\n Category: appearance\n Kind: string\n Description: Classe CSS opcional aplicada ao bloco visual richContent.\n - Path: sections[].rows[].columns[].span.xs\n Category: layout\n Kind: number\n Description: Largura da coluna para telas extra pequenas (xs) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.sm\n Category: layout\n Kind: number\n Description: Largura da coluna para telas pequenas (sm) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.md\n Category: layout\n Kind: number\n Description: Largura da coluna para telas médias (md) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.lg\n Category: layout\n Kind: number\n Description: Largura da coluna para telas grandes (lg) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.xl\n Category: layout\n Kind: number\n Description: Largura da coluna para telas extra grandes (xl) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.xs\n Category: layout\n Kind: number\n Description: Offset da coluna para telas extra pequenas (xs) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.sm\n Category: layout\n Kind: number\n Description: Offset da coluna para telas pequenas (sm) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.md\n Category: layout\n Kind: number\n Description: Offset da coluna para telas médias (md) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.lg\n Category: layout\n Kind: number\n Description: Offset da coluna para telas grandes (lg) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.xl\n Category: layout\n Kind: number\n Description: Offset da coluna para telas extra grandes (xl) no grid system (1-12).\n - Path: sections[].rows[].columns[].order.xs\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas extra pequenas (xs).\n - Path: sections[].rows[].columns[].order.sm\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas pequenas (sm).\n - Path: sections[].rows[].columns[].order.md\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas médias (md).\n - Path: sections[].rows[].columns[].order.lg\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas grandes (lg).\n - Path: sections[].rows[].columns[].order.xl\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas extra grandes (xl).\n - Path: sections[].rows[].columns[].hidden.xs\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra pequenas (xs).\n - Path: sections[].rows[].columns[].hidden.sm\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas pequenas (sm).\n - Path: sections[].rows[].columns[].hidden.md\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas médias (md).\n - Path: sections[].rows[].columns[].hidden.lg\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas grandes (lg).\n - Path: sections[].rows[].columns[].hidden.xl\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra grandes (xl).\n - Path: sections[].rows[].columns[].align\n Category: layout\n Kind: enum\n Description: Alinhamento vertical do conteúdo da coluna.\n - Path: sections[].rows[].columns[].padding\n Category: layout\n Kind: number\n Description: Padding (em px) interno da coluna.\n - Path: sections[].rows[].columns[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada à coluna.\n - Path: actions.submit.id\n Category: actions\n Kind: string\n Description: ID do botão de submissão.\n - Path: actions.submit.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de submissão.\n - Path: actions.submit.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de submissão.\n - Path: actions.submit.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de submissão.\n - Path: actions.submit.color\n Category: actions\n Kind: enum\n Description: Cor do botão de submissão.\n - Path: actions.submit.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de submissão.\n - Path: actions.submit.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de submissão.\n - Path: actions.submit.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de submissão.\n - Path: actions.submit.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de submissão.\n - Path: actions.submit.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de submissão.\n - Path: actions.submit.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de submissão.\n - Path: actions.submit.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.submit.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de submissão.\n - Path: actions.submit.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de submissão.\n - Path: actions.submit.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"ctrl+s\") para o botão de submissão.\n - Path: actions.cancel.id\n Category: actions\n Kind: string\n Description: ID do botão de cancelar.\n - Path: actions.cancel.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de cancelar.\n - Path: actions.cancel.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de cancelar.\n - Path: actions.cancel.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de cancelar.\n - Path: actions.cancel.color\n Category: actions\n Kind: enum\n Description: Cor do botão de cancelar.\n - Path: actions.cancel.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de cancelar.\n - Path: actions.cancel.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de cancelar.\n - Path: actions.cancel.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de cancelar.\n - Path: actions.cancel.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de cancelar.\n - Path: actions.cancel.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de cancelar.\n - Path: actions.cancel.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de cancelar.\n - Path: actions.cancel.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.cancel.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de cancelar.\n - Path: actions.cancel.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de cancelar.\n - Path: actions.cancel.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"esc\") para o botão de cancelar.\n - Path: actions.reset.id\n Category: actions\n Kind: string\n Description: ID do botão de reset.\n - Path: actions.reset.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de reset.\n - Path: actions.reset.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de reset.\n - Path: actions.reset.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de reset.\n - Path: actions.reset.color\n Category: actions\n Kind: enum\n Description: Cor do botão de reset.\n - Path: actions.reset.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de reset.\n - Path: actions.reset.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de reset.\n - Path: actions.reset.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de reset.\n - Path: actions.reset.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de reset.\n - Path: actions.reset.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de reset.\n - Path: actions.reset.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de reset.\n - Path: actions.reset.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.reset.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de reset.\n - Path: actions.reset.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de reset.\n - Path: actions.reset.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"ctrl+shift+r\") para o botão de reset.\n - Path: actions.custom\n Category: actions\n Kind: array\n Description: Lista de botões de ação customizados.\n - Path: actions.custom[]\n Category: actions\n Kind: object\n Description: Configuração de um botão de ação customizado.\n - Path: actions.custom[].id\n Category: actions\n Kind: string\n Description: ID da ação customizada.\n - Path: actions.custom[].visible\n Category: actions\n Kind: boolean\n Description: Visibilidade da ação customizada.\n - Path: actions.custom[].label\n Category: actions\n Kind: string\n Description: Rótulo da ação customizada.\n - Path: actions.custom[].icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para a ação customizada.\n - Path: actions.custom[].color\n Category: actions\n Kind: enum\n Description: Cor da ação customizada.\n - Path: actions.custom[].variant\n Category: actions\n Kind: enum\n Description: Variante visual da ação customizada.\n - Path: actions.custom[].size\n Category: actions\n Kind: enum\n Description: Tamanho da ação customizada.\n - Path: actions.custom[].className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada à ação customizada.\n - Path: actions.custom[].style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados à ação customizada.\n - Path: actions.custom[].disabled\n Category: actions\n Kind: boolean\n Description: Desabilita a ação customizada.\n - Path: actions.custom[].type\n Category: actions\n Kind: enum\n Description: Tipo do botão da ação customizada.\n - Path: actions.custom[].action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.custom[].tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido na ação customizada.\n - Path: actions.custom[].loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento na ação customizada.\n - Path: actions.custom[].shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado para a ação customizada.\n - Path: actions.position\n Category: layout\n Kind: enum\n Description: Posicionamento horizontal da barra de ações.\n - Path: actions.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões dentro da barra de ações (horizontal/vertical).\n - Path: actions.spacing\n Category: layout\n Kind: enum\n Description: Espaçamento entre os botões na barra de ações.\n - Path: actions.sticky\n Category: layout\n Kind: boolean\n Description: Define se a barra de ações deve permanecer visÃvel ao rolar a página.\n - Path: actions.divider\n Category: layout\n Kind: boolean\n Description: Exibe um divisor superior acima da barra de ações.\n - Path: actions.placement\n Category: layout\n Kind: enum\n Description: Localização estrutural da barra de ações no layout.\n - Path: actions.mobile.position\n Category: layout\n Kind: enum\n Description: Posicionamento da barra de ações em dispositivos móveis.\n - Path: actions.mobile.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões em dispositivos móveis.\n - Path: actions.mobile.collapseToMenu\n Category: behavior\n Kind: boolean\n Description: Em mobile, agrupa ações em um menu (se houver muitas).\n - Path: actions.containerClassName\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da barra de ações.\n - Path: actions.containerStyles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da barra de ações.\n - Path: actions.showSaveButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de submit.\n - Path: actions.submitButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de submit.\n - Path: actions.showCancelButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de cancel.\n - Path: actions.cancelButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de cancel.\n - Path: actions.showResetButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de reset.\n - Path: actions.resetButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de reset.\n - Path: behavior.confirmOnUnsavedChanges\n Category: behavior\n Kind: boolean\n Description: Exibe um alerta se o usuário tentar sair com mudanças não salvas.\n - Path: behavior.trackHistory\n Category: behavior\n Kind: boolean\n Description: Habilita rastreamento de histórico para desfazer/refazer (se suportado).\n - Path: behavior.focusFirstError\n Category: behavior\n Kind: boolean\n Description: Ao submeter, foca automaticamente no primeiro campo com erro.\n - Path: behavior.scrollToErrors\n Category: behavior\n Kind: boolean\n Description: Ao submeter, rola a página para exibir o primeiro erro.\n - Path: behavior.clearAfterSave\n Category: behavior\n Kind: boolean\n Description: Limpa o formulário após uma submissão bem-sucedida.\n - Path: behavior.redirectAfterSave\n Category: behavior\n Kind: string\n Description: URL para redirecionar após uma submissão bem-sucedida.\n - Path: behavior.reactiveValidation\n Category: validation\n Kind: boolean\n Description: Ativa validação reativa (em tempo real) em `valueChanges`.\n - Path: behavior.reactiveValidationDebounceMs\n Category: validation\n Kind: number\n Description: Debounce (em ms) para a validação reativa.\n - Path: api.saveEndpoint\n Category: api\n Kind: string\n Description: URL para onde os dados do formulário serão enviados (POST/PUT/PATCH).\n - Path: api.loadEndpoint\n Category: api\n Kind: string\n Description: URL para buscar dados para popular o formulário (GET).\n - Path: api.saveMethod\n Category: api\n Kind: enum\n Description: Método HTTP para a requisição de salvar.\n - Path: api.timeout\n Category: api\n Kind: number\n Description: Tempo limite (em ms) para as requisições API.\n - Path: api.headers\n Category: api\n Kind: object\n Description: Cabeçalhos HTTP personalizados para as requisições API.\n - Path: api.idField\n Category: api\n Kind: string\n Description: Nome do campo que representa o ID do registro no payload (para PUT/PATCH).\n - Path: api.beforeSave\n Category: hooks\n Kind: expression\n Description: Hook para pré-processamento de dados antes de enviar para a API.\n - Path: api.afterLoad\n Category: hooks\n Kind: expression\n Description: Hook para pós-processamento de dados após carregar da API.\n - Path: messages.updateRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após atualização de registro.\n - Path: messages.createRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após criação de registro.\n - Path: messages.updateRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após atualização de registro.\n - Path: messages.createRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após criação de registro.\n - Path: messages.confirmations.submit\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de submeter o formulário.\n - Path: messages.confirmations.cancel\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de cancelar.\n - Path: messages.confirmations.reset\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de resetar o formulário.\n - Path: messages.confirmations.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para ações customizadas. Substitua `[actionId]` pelo ID da ação.\n - Path: messages.customActions.[actionId]\n Category: messages\n Kind: object\n Description: Mensagens da ação customizada (success/error/confirmation). Substitua `[actionId]` pelo ID da ação.\n - Path: messages.customActions.[actionId].success\n Category: messages\n Kind: string\n Description: Mensagem de sucesso para a ação customizada.\n - Path: messages.customActions.[actionId].error\n Category: messages\n Kind: string\n Description: Mensagem de erro para a ação customizada.\n - Path: messages.customActions.[actionId].confirmation\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para a ação customizada.\n - Path: messages.loading.submit\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o envio do formulário.\n - Path: messages.loading.cancel\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o cancelamento.\n - Path: messages.loading.reset\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o reset do formulário.\n - Path: messages.loading.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem exibida durante a execução de uma ação customizada. Substitua `[actionId]` pelo ID da ação.\n - Path: formRules[].id\n Category: rules\n Kind: string\n Description: ID único da regra de layout.\n - Path: formRules[].name\n Category: rules\n Kind: string\n Description: Nome amigável da regra de layout.\n - Path: formRules[].description\n Category: rules\n Kind: string\n Description: Descrição da regra de layout para documentação.\n - Path: formRules[].metadata.origin\n Category: rules\n Kind: enum\n Description: Origem da regra sugerida pela IA.\n - Path: formRules[].metadata.reviewStatus\n Category: rules\n Kind: enum\n Description: Status de revisão humana da regra sugerida pela IA.\n - Path: formRules[].targetType\n Category: rules\n Kind: enum\n Description: Tipo do elemento alvo da regra (campo, seção, ação, linha, coluna ou bloco visual).\n - Path: formRules[].context\n Category: rules\n Kind: enum\n Description: Contexto legado da regra (quando properties não forem informadas).\n - Path: formRules[].targets\n Category: rules\n Kind: array\n Description: Lista de IDs dos elementos alvo da regra. O tipo do ID depende de `targetType`.\n - Path: formRules[].targets[]\n Category: rules\n Kind: string\n Description: ID do alvo da regra.\n - Path: formRules[].targetFields\n Category: rules\n Kind: array\n Description: Alias legado para alvos de campo.\n - Path: formRules[].targetFields[]\n Category: rules\n Kind: string\n Description: ID do campo alvo (alias legado).\n - Path: formRules[].effect.condition\n Category: rules\n Kind: expression\n Description: Condicao canonica da regra, expressa em Json Logic.\n - Path: formCommandRules\n Category: rules\n Kind: array\n Description: Regras condicionais de comando avaliadas depois que formRules estabilizam valores calculados.\n - Path: formCommandRules[].condition\n Category: rules\n Kind: expression\n Description: Condicao Json Logic avaliada sobre formData estabilizado, incluindo field values calculados.\n - Path: formCommandRules[].effects[].kind\n Category: rules\n Kind: enum\n Description: Tipo do efeito de comando. O primeiro corte suporta apenas global-action.\n - Path: formCommandRules[].effects[].globalAction\n Category: rules\n Kind: object\n Description: GlobalActionRef estruturado executado por GlobalActionService.executeRef quando a regra entra na condicao.\n - Path: formCommandRules[].policy\n Category: rules\n Kind: object\n Description: Politica operacional do comando: trigger, distinct, distinctBy, debounceMs, errorPolicy e runOnInitialEvaluation.\n - Path: formRulesState\n Category: rules\n Kind: object\n Description: Estado interno do builder de regras (metadados visuais).\n - Path: hooks\n Category: hooks\n Kind: object\n Description: Declarações de hooks por estágio do ciclo de vida do formulário.\n - Path: hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeInit.\n - Path: hooks.beforeInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterInit.\n - Path: hooks.afterInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeValidate.\n - Path: hooks.beforeValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterValidate.\n - Path: hooks.afterValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeSubmit.\n - Path: hooks.beforeSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterSubmit.\n - Path: hooks.afterSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.onError[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para onError.\n - Path: hooks.onError[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.onError[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.onError[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.onError[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hints.dataModes.create\n Category: form_config\n Kind: string\n Description: Dica para o modo de criação de dados.\n - Path: hints.dataModes.edit\n Category: form_config\n Kind: string\n Description: Dica para o modo de edição de dados.\n - Path: hints.dataModes.view\n Category: form_config\n Kind: string\n Description: Dica para o modo de visualização de dados.\n - Path: hints.uiModes.presentation\n Category: form_config\n Kind: string\n Description: Dica para o modo de apresentação da UI.\n - Path: hints.uiModes.readonly\n Category: form_config\n Kind: string\n Description: Dica para o modo de somente leitura da UI.\n - Path: hints.uiModes.disabled\n Category: form_config\n Kind: string\n Description: Dica para o modo desabilitado da UI.\n - Path: hints.uiModes.visible\n Category: form_config\n Kind: string\n Description: Dica para o modo de visibilidade da UI.\n - Path: fieldMetadata[].id\n Category: identity\n Kind: string\n Description: Identificador unico da instancia do componente.\n - Path: fieldMetadata[].version\n Category: identity\n Kind: string\n Description: Versao do schema de metadata (migracao).\n - Path: fieldMetadata[].context\n Category: identity\n Kind: enum\n Description: Contexto de uso do componente (form/filter/table/dialog/standalone).\n - Path: fieldMetadata[].createdAt\n Category: misc\n Kind: string\n Description: Timestamp de criacao (ISO).\n - Path: fieldMetadata[].updatedAt\n Category: misc\n Kind: string\n Description: Timestamp de atualizacao (ISO).\n - Path: fieldMetadata[].tags\n Category: identity\n Kind: array\n Description: Tags para categorizacao e busca.\n - Path: fieldMetadata[].cssClass\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao host do componente.\n - Path: fieldMetadata[].style\n Category: appearance\n Kind: object\n Description: Estilos inline (objeto CSS).\n - Path: fieldMetadata[].dataAttributes\n Category: data\n Kind: object\n Description: Data attributes para teste/analytics.\n - Path: fieldMetadata[].name\n Category: identity\n Kind: string\n Description: Identificador único do campo. Essencial para binding.\n - Path: fieldMetadata[].label\n Category: identity\n Kind: string\n Description: Rótulo principal exibido para o usuário.\n - Path: fieldMetadata[].placeholder\n Category: identity\n Kind: string\n Description: Texto temporário exibido quando vazio.\n - Path: fieldMetadata[].hint\n Category: identity\n Kind: string\n Description: Texto de ajuda exibido abaixo do campo.\n - Path: fieldMetadata[].helpText\n Category: identity\n Kind: string\n Description: Texto semântico de ajuda publicado pelo schema/DTO.\n - Path: fieldMetadata[].tooltip\n Category: identity\n Kind: string\n Description: Texto exibido ao passar o mouse.\n - Path: fieldMetadata[].tooltipOnHover\n Category: identity\n Kind: boolean\n Description: Habilita apresentação do tooltip no hover quando suportado pelo renderer.\n - Path: fieldMetadata[].description\n Category: identity\n Kind: string\n Description: Descrição detalhada (usada em documentação ou helps extensos).\n - Path: fieldMetadata[].selectionMode\n Category: behavior\n Kind: enum\n Description: Semântica de seleção explícita para controles de escolha.\n - Path: fieldMetadata[].variant\n Category: appearance\n Kind: string\n Description: Variante visual/semântica do controle.\n - Path: fieldMetadata[].density\n Category: appearance\n Kind: enum\n Description: Densidade visual do shell do controle.\n - Path: fieldMetadata[].links\n Category: identity\n Kind: array\n Description: Links ricos associados ao campo, úteis em consentimentos e conteúdo legal.\n - Path: fieldMetadata[].group\n Category: identity\n Kind: string\n Description: Agrupador lógico do campo.\n - Path: fieldMetadata[].order\n Category: layout\n Kind: number\n Description: Ordem de exibição do campo.\n - Path: fieldMetadata[].width\n Category: layout\n Kind: string\n Description: Largura do campo (ex: 50%, 100px).\n - Path: fieldMetadata[].isFlex\n Category: layout\n Kind: boolean\n Description: Se true, usa flex-grow para preencher espaço.\n - Path: fieldMetadata[].controlType\n Category: behavior\n Kind: enum\n Description: Tipo do componente de UI (input, select, datepicker, etc).\n - Path: fieldMetadata[].dataType\n Category: data\n Kind: enum\n Description: Tipo de dado do campo (text, number, date, etc).\n - Path: fieldMetadata[].source\n Category: data\n Kind: enum\n Description: Origem semântica do campo. Use local para campos do host que não vêm do schema backend.\n - Path: fieldMetadata[].transient\n Category: data\n Kind: boolean\n Description: Marca o campo como temporário/local para preenchimento. O dynamic-form omite do submit por padrão.\n - Path: fieldMetadata[].submitPolicy\n Category: behavior\n Kind: enum\n Description: Política de submit para sobrescrever o padrão de campos locais/transient.\n - Path: fieldMetadata[].materialDesign.appearance\n Category: appearance\n Kind: enum\n Description: Aparência do campo Material (fill/outline).\n - Path: fieldMetadata[].materialDesign.color\n Category: appearance\n Kind: enum\n Description: Tema de cor Material (primary/accent/warn).\n - Path: fieldMetadata[].materialDesign.floatLabel\n Category: appearance\n Kind: enum\n Description: Comportamento do rótulo flutuante.\n - Path: fieldMetadata[].materialDesign.subscriptSizing\n Category: appearance\n Kind: enum\n Description: Estratégia de sizing do subscript (erros/hints).\n - Path: fieldMetadata[].materialDesign.hideRequiredMarker\n Category: appearance\n Kind: boolean\n Description: Oculta o asterisco de campo obrigatório.\n - Path: fieldMetadata[].materialDesign.density\n Category: appearance\n Kind: enum\n Description: Densidade do campo Material.\n - Path: fieldMetadata[].materialDesign.disableRipple\n Category: appearance\n Kind: boolean\n Description: Desativa ripple/ondulação em componentes Material.\n - Path: fieldMetadata[].materialDesign.customPalette\n Category: appearance\n Kind: object\n Description: Override de paleta (primary/accent/warn).\n - Path: fieldMetadata[].materialDesign.animations\n Category: appearance\n Kind: object\n Description: Configuração de animações (disable, duration, easing).\n - Path: fieldMetadata[].prefixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido antes do valor.\n - Path: fieldMetadata[].suffixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido depois do valor.\n - Path: fieldMetadata[].iconPosition\n Category: appearance\n Kind: enum\n Description: Posição preferencial do ícone principal.\n - Path: fieldMetadata[].iconSize\n Category: appearance\n Kind: enum\n Description: Tamanho do ícone.\n - Path: fieldMetadata[].iconColor\n Category: appearance\n Kind: string\n Description: Cor semântica ou token de cor aplicado ao ícone principal.\n - Path: fieldMetadata[].iconClass\n Category: appearance\n Kind: string\n Description: Classe CSS controlada pelo host para o ícone principal.\n - Path: fieldMetadata[].iconStyle\n Category: appearance\n Kind: string\n Description: Estilo visual semântico do ícone quando o renderer suportar variações.\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n - Path: fieldMetadata[].valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n - Path: fieldMetadata[].presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n - Path: fieldMetadata[].presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n - Path: fieldMetadata[].presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n - Path: fieldMetadata[].presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n - Path: fieldMetadata[].presentation.visualization.fallbackText\n Category: accessibility\n Kind: string\n Description: Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.\n - Path: fieldMetadata[].presentationRules\n Category: appearance\n Kind: array\n Description: Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.\n - Path: fieldMetadata[].presentationRules[].when\n Category: behavior\n Kind: object\n Description: Guarda Json Logic avaliada contra o contexto de apresentacao do campo.\n - Path: fieldMetadata[].presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n - Path: fieldMetadata[].options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n - Path: fieldMetadata[].fieldAccess\n Category: behavior\n Kind: object\n Description: Politica canonica de UX para visibilidade/edicao por authorities publicadas pelo backend.\n - Path: fieldMetadata[].fieldAccess.visibleForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem ver o campo no runtime quando a UX tiver claims explicitas.\n - Path: fieldMetadata[].fieldAccess.editableForAuthorities\n Category: behavior\n Kind: array\n Description: Authorities que podem editar o campo no runtime quando a UX tiver claims explicitas.\n - Path: fieldMetadata[].fieldAccess.reason\n Category: misc\n Kind: string\n Description: Justificativa explicativa/auditavel da politica de acesso do campo.\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\nComponent Capabilities:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\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 - 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 - 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 - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\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 - 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 - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\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 - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\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 - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\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 - 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 - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\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 - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\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 - 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 - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\nCapability Notes:\n - Este catalogo descreve inputs e outputs do componente.\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.\n",
|
|
14004
14082
|
"sourcePointer": "praxis-ui-angular/projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
|
|
14005
|
-
"contentHash": "
|
|
14083
|
+
"contentHash": "4a5b5fb3096039768a14041ba1941db8cefe37003e03fdd9fad6a6fd46a223ee",
|
|
14006
14084
|
"sourceKind": "component_definition",
|
|
14007
14085
|
"sourceId": "praxis-filter-form",
|
|
14008
14086
|
"corpusVersion": "1.0.0"
|
|
@@ -14010,9 +14088,9 @@
|
|
|
14010
14088
|
{
|
|
14011
14089
|
"chunkIndex": 2,
|
|
14012
14090
|
"chunkKind": "context_pack",
|
|
14013
|
-
"content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"optionsByPath\": {\n \"fieldMetadata[].controlType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"input\",\n \"label\": \"Input\"\n },\n {\n \"value\": \"textarea\",\n \"label\": \"Textarea\"\n },\n {\n \"value\": \"email\",\n \"label\": \"Email\"\n },\n {\n \"value\": \"password\",\n \"label\": \"Password\"\n },\n {\n \"value\": \"search\",\n \"label\": \"Search\"\n },\n {\n \"value\": \"url\",\n \"label\": \"URL\"\n },\n {\n \"value\": \"phone\",\n \"label\": \"Phone\"\n },\n {\n \"value\": \"cpfCnpjInput\",\n \"label\": \"CPF/CNPJ\"\n },\n {\n \"value\": \"numericTextBox\",\n \"label\": \"Number\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"priceRange\",\n \"label\": \"Price range\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date picker\"\n },\n {\n \"value\": \"dateRange\",\n \"label\": \"Date range\"\n },\n {\n \"value\": \"dateInput\",\n \"label\": \"Date input\"\n },\n {\n \"value\": \"dateTime\",\n \"label\": \"Datetime\"\n },\n {\n \"value\": \"dateTimeRange\",\n \"label\": \"Datetime range\"\n },\n {\n \"value\": \"dateTimeLocal\",\n \"label\": \"Datetime local\"\n },\n {\n \"value\": \"time\",\n \"label\": \"Time input\"\n },\n {\n \"value\": \"timePicker\",\n \"label\": \"Time picker\"\n },\n {\n \"value\": \"timeRange\",\n \"label\": \"Time range\"\n },\n {\n \"value\": \"week\",\n \"label\": \"Week input\"\n },\n {\n \"value\": \"month\",\n \"label\": \"Month input\"\n },\n {\n \"value\": \"year\",\n \"label\": \"Year input\"\n },\n {\n \"value\": \"select\",\n \"label\": \"Select\"\n },\n {\n \"value\": \"multiSelect\",\n \"label\": \"Multi select\"\n },\n {\n \"value\": \"multiSelectTree\",\n \"label\": \"Multi select tree\"\n },\n {\n \"value\": \"treeSelect\",\n \"label\": \"Tree select\"\n },\n {\n \"value\": \"transferList\",\n \"label\": \"Transfer list\"\n },\n {\n \"value\": \"autoComplete\",\n \"label\": \"Autocomplete\"\n },\n {\n \"value\": \"searchable-select\",\n \"label\": \"Searchable select\"\n },\n {\n \"value\": \"async-select\",\n \"label\": \"Async select\"\n },\n {\n \"value\": \"radio\",\n \"label\": \"Radio group\"\n },\n {\n \"value\": \"checkbox\",\n \"label\": \"Checkbox group\"\n },\n {\n \"value\": \"selectionList\",\n \"label\": \"Selection list\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"buttonToggle\",\n \"label\": \"Button toggle\"\n },\n {\n \"value\": \"slider\",\n \"label\": \"Slider\"\n },\n {\n \"value\": \"rangeSlider\",\n \"label\": \"Range slider\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"chipInput\",\n \"label\": \"Chips\"\n },\n {\n \"value\": \"chipList\",\n \"label\": \"Chip list\"\n },\n {\n \"value\": \"upload\",\n \"label\": \"File upload\"\n },\n {\n \"value\": \"color\",\n \"label\": \"Color input\"\n },\n {\n \"value\": \"colorPicker\",\n \"label\": \"Color picker\"\n },\n {\n \"value\": \"cronBuilder\",\n \"label\": \"Cron builder\"\n }\n ]\n },\n \"fieldMetadata[].source\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"schema\",\n \"label\": \"Schema field\"\n },\n {\n \"value\": \"local\",\n \"label\": \"Local field\"\n }\n ]\n },\n \"fieldMetadata[].submitPolicy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"omit\",\n \"label\": \"Omit from submit payload\"\n },\n {\n \"value\": \"include\",\n \"label\": \"Include in submit payload\"\n },\n {\n \"value\": \"includeWhenDirty\",\n \"label\": \"Include only when dirty\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"fill\",\n \"label\": \"Fill\"\n },\n {\n \"value\": \"outline\",\n \"label\": \"Outline\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.floatLabel\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n },\n {\n \"value\": \"always\",\n \"label\": \"Always\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.density\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"comfortable\",\n \"label\": \"Comfortable\"\n },\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"dense\",\n \"label\": \"Dense\"\n }\n ]\n },\n \"actions.position\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"left\",\n \"label\": \"Left\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"right\",\n \"label\": \"Right\"\n },\n {\n \"value\": \"justified\",\n \"label\": \"Justified\"\n },\n {\n \"value\": \"split\",\n \"label\": \"Split\"\n }\n ]\n },\n \"actions.orientation\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"horizontal\",\n \"label\": \"Horizontal\"\n },\n {\n \"value\": \"vertical\",\n \"label\": \"Vertical\"\n }\n ]\n },\n \"actions.spacing\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"normal\",\n \"label\": \"Normal\"\n },\n {\n \"value\": \"spacious\",\n \"label\": \"Spacious\"\n }\n ]\n },\n \"actions.placement\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"insideLastSection\",\n \"label\": \"Inside last section\"\n },\n {\n \"value\": \"afterSections\",\n \"label\": \"After sections\"\n },\n {\n \"value\": \"top\",\n \"label\": \"Top\"\n }\n ]\n },\n \"actions.submit.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"submit\",\n \"label\": \"Submit\"\n },\n {\n \"value\": \"reset\",\n \"label\": \"Reset\"\n }\n ]\n },\n \"actions.submit.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"raised\",\n \"label\": \"Raised\"\n },\n {\n \"value\": \"stroked\",\n \"label\": \"Stroked\"\n },\n {\n \"value\": \"flat\",\n \"label\": \"Flat\"\n },\n {\n \"value\": \"fab\",\n \"label\": \"Fab\"\n }\n ]\n },\n \"actions.submit.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"small\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"medium\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"large\",\n \"label\": \"Large\"\n }\n ]\n },\n \"actions.submit.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n },\n {\n \"value\": \"basic\",\n \"label\": \"Basic\"\n }\n ]\n },\n \"sections[].headerAlign\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n }\n ]\n },\n \"sections[].appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"card\",\n \"label\": \"Card\"\n },\n {\n \"value\": \"plain\",\n \"label\": \"Plain\"\n },\n {\n \"value\": \"step\",\n \"label\": \"Step\"\n }\n ]\n },\n \"sections[].sectionHeader.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"avatar-image\",\n \"label\": \"Avatar image\"\n },\n {\n \"value\": \"avatar-initials\",\n \"label\": \"Avatar initials\"\n },\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n }\n ]\n },\n \"sections[].sectionHeader.emptyState\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"placeholder-avatar\",\n \"label\": \"Neutral placeholder\"\n },\n {\n \"value\": \"fallback-icon\",\n \"label\": \"Fallback icon\"\n },\n {\n \"value\": \"none\",\n \"label\": \"None\"\n }\n ]\n },\n \"sections[].sectionHeader.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"sm\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"md\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"lg\",\n \"label\": \"Large\"\n }\n ]\n },\n \"sections[].stepLabel\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"Dados básicos\",\n \"label\": \"Dados básicos\"\n },\n {\n \"value\": \"Detalhes\",\n \"label\": \"Detalhes\"\n },\n {\n \"value\": \"Confirmação\",\n \"label\": \"Confirmação\"\n }\n ]\n },\n \"sections[].titleStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"titleLarge\",\n \"label\": \"Title large\"\n },\n {\n \"value\": \"titleMedium\",\n \"label\": \"Title medium\"\n },\n {\n \"value\": \"titleSmall\",\n \"label\": \"Title small\"\n },\n {\n \"value\": \"headlineSmall\",\n \"label\": \"Headline small\"\n }\n ]\n },\n \"sections[].descriptionStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"bodyLarge\",\n \"label\": \"Body large\"\n },\n {\n \"value\": \"bodyMedium\",\n \"label\": \"Body medium\"\n },\n {\n \"value\": \"bodySmall\",\n \"label\": \"Body small\"\n }\n ]\n },\n \"sections[].rows[].columns[].align\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"end\",\n \"label\": \"End\"\n },\n {\n \"value\": \"stretch\",\n \"label\": \"Stretch\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].kind\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"richContent\",\n \"label\": \"Rich content\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].layout\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"block\",\n \"label\": \"Block\"\n },\n {\n \"value\": \"inline\",\n \"label\": \"Inline\"\n }\n ]\n },\n \"formRules[].targetType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"section\",\n \"label\": \"Section\"\n },\n {\n \"value\": \"row\",\n \"label\": \"Row\"\n },\n {\n \"value\": \"column\",\n \"label\": \"Column\"\n },\n {\n \"value\": \"action\",\n \"label\": \"Action\"\n },\n {\n \"value\": \"visualBlock\",\n \"label\": \"Visual block\"\n }\n ]\n },\n \"formRules[].context\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"visibility\",\n \"label\": \"Visibility\"\n },\n {\n \"value\": \"readOnly\",\n \"label\": \"Read only\"\n },\n {\n \"value\": \"style\",\n \"label\": \"Style\"\n },\n {\n \"value\": \"validation\",\n \"label\": \"Validation\"\n },\n {\n \"value\": \"notification\",\n \"label\": \"Notification\"\n }\n ]\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"field.visibility.hide\",\n \"intentExamples\": [\n \"hide field\",\n \"ocultar campo\",\n \"esconder campo\",\n \"invisible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.visibility.show\",\n \"intentExamples\": [\n \"show field\",\n \"mostrar campo\",\n \"exibir campo\",\n \"visible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.label.set\",\n \"intentExamples\": [\n \"label\",\n \"rename field\",\n \"renomear campo\",\n \"titulo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"label\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.placeholder.set\",\n \"intentExamples\": [\n \"placeholder\",\n \"hint text\",\n \"texto de ajuda\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"placeholder\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.required.enable\",\n \"intentExamples\": [\n \"required\",\n \"obrigatorio\",\n \"mandatory\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.required.disable\",\n \"intentExamples\": [\n \"optional\",\n \"nao obrigatorio\",\n \"opcional\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.enable\",\n \"intentExamples\": [\n \"readonly\",\n \"somente leitura\",\n \"read only\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.disable\",\n \"intentExamples\": [\n \"editable\",\n \"editavel\",\n \"read write\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.enable\",\n \"intentExamples\": [\n \"disable field\",\n \"desabilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.disable\",\n \"intentExamples\": [\n \"enable field\",\n \"habilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.controlType.set\",\n \"intentExamples\": [\n \"control type\",\n \"tipo de campo\",\n \"controlType\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"controlType\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.prefix.set\",\n \"intentExamples\": [\n \"prefix icon\",\n \"icone prefixo\",\n \"icon before\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"prefixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.suffix.set\",\n \"intentExamples\": [\n \"suffix icon\",\n \"icone sufixo\",\n \"icon after\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"suffixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.title.set\",\n \"intentExamples\": [\n \"section title\",\n \"titulo da secao\",\n \"section name\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"title\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.description.set\",\n \"intentExamples\": [\n \"section description\",\n \"descricao da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"description\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.add\",\n \"intentExamples\": [\n \"add section\",\n \"adicionar secao\",\n \"nova secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{value}}\",\n \"title\": \"{{value}}\",\n \"rows\": []\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da seção é único e relevante.\"\n },\n {\n \"id\": \"section.remove\",\n \"intentExamples\": [\n \"remove section\",\n \"remover secao\",\n \"excluir secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"section.order.set\",\n \"intentExamples\": [\n \"order section\",\n \"reordenar secao\",\n \"mover secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_order\": \"{{value}}\"\n }\n ]\n },\n \"safetyNotes\": \"A reordenação de seções é uma operação que deve ser revisada.\"\n },\n {\n \"id\": \"row.add\",\n \"intentExamples\": [\n \"add row\",\n \"adicionar linha\",\n \"nova linha na secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"columns\": []\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da linha é único e relevante na seção.\"\n },\n {\n \"id\": \"row.remove\",\n \"intentExamples\": [\n \"remove row\",\n \"remover linha\",\n \"excluir linha da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.add\",\n \"intentExamples\": [\n \"add column\",\n \"adicionar coluna\",\n \"nova coluna na linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"items\": []\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da coluna é único e relevante na linha.\"\n },\n {\n \"id\": \"column.remove\",\n \"intentExamples\": [\n \"remove column\",\n \"remover coluna\",\n \"excluir coluna da linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.field.add\",\n \"intentExamples\": [\n \"add field to column\",\n \"adicionar campo a coluna\",\n \"colocar campo na coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"id\": \"field-{{value}}\",\n \"fieldName\": \"{{value}}\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"\n },\n {\n \"id\": \"column.field.remove\",\n \"intentExamples\": [\n \"remove field from column\",\n \"remover campo da coluna\",\n \"tirar campo da coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"fieldName\": \"{{value}}\",\n \"_remove\": true\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover um campo de uma coluna pode alterar o layout do formulário.\"\n },\n {\n \"id\": \"actions.submit.label.set\",\n \"intentExamples\": [\n \"submit label\",\n \"rotulo salvar\",\n \"texto botao enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.submit.visible.set\",\n \"intentExamples\": [\n \"show submit\",\n \"esconder salvar\",\n \"visibilidade enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.label.set\",\n \"intentExamples\": [\n \"cancel label\",\n \"rotulo cancelar\",\n \"texto botao cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.visible.set\",\n \"intentExamples\": [\n \"show cancel\",\n \"esconder cancelar\",\n \"visibilidade cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.label.set\",\n \"intentExamples\": [\n \"reset label\",\n \"rotulo resetar\",\n \"texto botao limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.visible.set\",\n \"intentExamples\": [\n \"show reset\",\n \"esconder reset\",\n \"visibilidade limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"rule.add.visibility\",\n \"intentExamples\": [\n \"add visibility rule\",\n \"regra de visibilidade\",\n \"campo condicional\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{value.id}}\",\n \"name\": \"{{value.name}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{target}}\"\n ],\n \"effect\": {\n \"condition\": \"{{value.condition}}\",\n \"properties\": {\n \"hidden\": false\n },\n \"propertiesWhenFalse\": {\n \"hidden\": true\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Criação de regras requer atenção à lógica e IDs de campos. Teste a regra após a criação.\"\n },\n {\n \"id\": \"rule.remove\",\n \"intentExamples\": [\n \"remove rule\",\n \"excluir regra\",\n \"apagar regra\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"\n },\n {\n \"id\": \"rule.add.dependency\",\n \"intentExamples\": [\n \"adicionar dependencia\",\n \"campo depende de\",\n \"mostrar se\",\n \"obrigatorio se\",\n \"desabilitar se\",\n \"campo condicional\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"triggerField\",\n \"type\": \"STRING\",\n \"description\": \"Campo que controla a regra (ex: tipoPessoa)\"\n },\n {\n \"name\": \"conditionValue\",\n \"type\": \"STRING\",\n \"description\": \"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado pela regra (ex: cnpj)\"\n },\n {\n \"name\": \"effectType\",\n \"type\": \"ENUM\",\n \"options\": [\n \"visibility\",\n \"required\",\n \"disabled\"\n ],\n \"description\": \"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"rule_{{params.triggerField}}_{{params.targetField}}\",\n \"name\": \"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": \"{{params.triggerField}} == \\\"{{params.conditionValue}}\\\"\",\n \"properties\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? false : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? true : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? true : undefined}}\"\n },\n \"propertiesWhenFalse\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? true : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? false : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? false : undefined}}\"\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"\n },\n {\n \"id\": \"rule.add.custom\",\n \"intentExamples\": [\n \"adicionar regra customizada\",\n \"regra complexa\",\n \"logica de formulario\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"id\",\n \"type\": \"STRING\",\n \"description\": \"ID único da regra\"\n },\n {\n \"name\": \"condition\",\n \"type\": \"STRING\",\n \"description\": \"Expressão condicional (ex: idade > 18 && possuiHabilitacao)\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado\"\n },\n {\n \"name\": \"propertyName\",\n \"type\": \"STRING\",\n \"description\": \"Propriedade afetada (hidden, required, disabled, readOnly)\"\n },\n {\n \"name\": \"valueIfTrue\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for verdadeira\"\n },\n {\n \"name\": \"valueIfFalse\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for falsa\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{params.id}}\",\n \"name\": \"Regra Customizada: {{params.id}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": \"{{params.condition}}\",\n \"properties\": {\n \"{{params.propertyName}}\": \"{{params.valueIfTrue}}\"\n },\n \"propertiesWhenFalse\": {\n \"{{params.propertyName}}\": \"{{params.valueIfFalse}}\"\n }\n }\n }\n ]\n }\n }\n ],\n \"fieldResolvers\": {\n \"fieldMetadata[]\": [\n \"name\",\n \"label\"\n ],\n \"sections[]\": [\n \"id\",\n \"title\"\n ],\n \"sections[].rows[].columns[].items[]\": [\n \"id\",\n \"fieldName\"\n ],\n \"sections[].rows[].columns[].fields[]\": []\n },\n \"hints\": [\n \"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\n \"Local fields are real form controls. Create them in fieldMetadata[] with source:\\\"local\\\", usually transient:true and submitPolicy:\\\"omit\\\", then place them as kind:\\\"field\\\" layout items.\",\n \"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\n \"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\n \"Use sections[].rows[].columns[].items[] as the canonical mixed layout order. kind:\\\"field\\\" items reference fieldMetadata; kind:\\\"richContent\\\" items are visual blocks outside submit payload.\",\n \"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\n \"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\n \"For field formRules that must calculate a FormControl value, use effect.properties.value with the closed envelope { expression: <JSON Logic> }, such as { expression: { yearsSince: [{ var: \\\"birthDate\\\" }] } }. Use the closed envelope { literal: <value> } for structured literal objects; do not add extra keys and do not generate TypeScript functions.\",\n \"For conditional side effects, use formCommandRules with effects[].kind:\\\"global-action\\\" and a structured globalAction ref. The visual editor authors the primary effect and preserves secondary effects from advanced JSON. Do not put alert/modal/navigation commands inside formRules[].effect.properties.\",\n \"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\n \"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\n \"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\n \"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\n \"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\n \"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\n \"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\n \"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\n \"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\n \"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\n \"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"\n ]\n }\n}",
|
|
14091
|
+
"content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"optionsByPath\": {\n \"fieldMetadata[].controlType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"input\",\n \"label\": \"Input\"\n },\n {\n \"value\": \"textarea\",\n \"label\": \"Textarea\"\n },\n {\n \"value\": \"email\",\n \"label\": \"Email\"\n },\n {\n \"value\": \"password\",\n \"label\": \"Password\"\n },\n {\n \"value\": \"search\",\n \"label\": \"Search\"\n },\n {\n \"value\": \"url\",\n \"label\": \"URL\"\n },\n {\n \"value\": \"phone\",\n \"label\": \"Phone\"\n },\n {\n \"value\": \"cpfCnpjInput\",\n \"label\": \"CPF/CNPJ\"\n },\n {\n \"value\": \"numericTextBox\",\n \"label\": \"Number\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"priceRange\",\n \"label\": \"Price range\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date picker\"\n },\n {\n \"value\": \"dateRange\",\n \"label\": \"Date range\"\n },\n {\n \"value\": \"dateInput\",\n \"label\": \"Date input\"\n },\n {\n \"value\": \"dateTime\",\n \"label\": \"Datetime\"\n },\n {\n \"value\": \"dateTimeRange\",\n \"label\": \"Datetime range\"\n },\n {\n \"value\": \"dateTimeLocal\",\n \"label\": \"Datetime local\"\n },\n {\n \"value\": \"time\",\n \"label\": \"Time input\"\n },\n {\n \"value\": \"timePicker\",\n \"label\": \"Time picker\"\n },\n {\n \"value\": \"timeRange\",\n \"label\": \"Time range\"\n },\n {\n \"value\": \"week\",\n \"label\": \"Week input\"\n },\n {\n \"value\": \"month\",\n \"label\": \"Month input\"\n },\n {\n \"value\": \"year\",\n \"label\": \"Year input\"\n },\n {\n \"value\": \"select\",\n \"label\": \"Select\"\n },\n {\n \"value\": \"multiSelect\",\n \"label\": \"Multi select\"\n },\n {\n \"value\": \"multiSelectTree\",\n \"label\": \"Multi select tree\"\n },\n {\n \"value\": \"treeSelect\",\n \"label\": \"Tree select\"\n },\n {\n \"value\": \"transferList\",\n \"label\": \"Transfer list\"\n },\n {\n \"value\": \"autoComplete\",\n \"label\": \"Autocomplete\"\n },\n {\n \"value\": \"searchable-select\",\n \"label\": \"Searchable select\"\n },\n {\n \"value\": \"async-select\",\n \"label\": \"Async select\"\n },\n {\n \"value\": \"radio\",\n \"label\": \"Radio group\"\n },\n {\n \"value\": \"checkbox\",\n \"label\": \"Checkbox group\"\n },\n {\n \"value\": \"selectionList\",\n \"label\": \"Selection list\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"buttonToggle\",\n \"label\": \"Button toggle\"\n },\n {\n \"value\": \"slider\",\n \"label\": \"Slider\"\n },\n {\n \"value\": \"rangeSlider\",\n \"label\": \"Range slider\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"chipInput\",\n \"label\": \"Chips\"\n },\n {\n \"value\": \"chipList\",\n \"label\": \"Chip list\"\n },\n {\n \"value\": \"upload\",\n \"label\": \"File upload\"\n },\n {\n \"value\": \"color\",\n \"label\": \"Color input\"\n },\n {\n \"value\": \"colorPicker\",\n \"label\": \"Color picker\"\n },\n {\n \"value\": \"cronBuilder\",\n \"label\": \"Cron builder\"\n }\n ]\n },\n \"fieldMetadata[].source\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"schema\",\n \"label\": \"Schema field\"\n },\n {\n \"value\": \"local\",\n \"label\": \"Local field\"\n }\n ]\n },\n \"fieldMetadata[].submitPolicy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"omit\",\n \"label\": \"Omit from submit payload\"\n },\n {\n \"value\": \"include\",\n \"label\": \"Include in submit payload\"\n },\n {\n \"value\": \"includeWhenDirty\",\n \"label\": \"Include only when dirty\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"fill\",\n \"label\": \"Fill\"\n },\n {\n \"value\": \"outline\",\n \"label\": \"Outline\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.floatLabel\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n },\n {\n \"value\": \"always\",\n \"label\": \"Always\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.density\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"comfortable\",\n \"label\": \"Comfortable\"\n },\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"dense\",\n \"label\": \"Dense\"\n }\n ]\n },\n \"actions.position\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"left\",\n \"label\": \"Left\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"right\",\n \"label\": \"Right\"\n },\n {\n \"value\": \"justified\",\n \"label\": \"Justified\"\n },\n {\n \"value\": \"split\",\n \"label\": \"Split\"\n }\n ]\n },\n \"actions.orientation\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"horizontal\",\n \"label\": \"Horizontal\"\n },\n {\n \"value\": \"vertical\",\n \"label\": \"Vertical\"\n }\n ]\n },\n \"actions.spacing\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"normal\",\n \"label\": \"Normal\"\n },\n {\n \"value\": \"spacious\",\n \"label\": \"Spacious\"\n }\n ]\n },\n \"actions.placement\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"insideLastSection\",\n \"label\": \"Inside last section\"\n },\n {\n \"value\": \"afterSections\",\n \"label\": \"After sections\"\n },\n {\n \"value\": \"top\",\n \"label\": \"Top\"\n }\n ]\n },\n \"actions.submit.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"submit\",\n \"label\": \"Submit\"\n },\n {\n \"value\": \"reset\",\n \"label\": \"Reset\"\n }\n ]\n },\n \"actions.submit.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"raised\",\n \"label\": \"Raised\"\n },\n {\n \"value\": \"stroked\",\n \"label\": \"Stroked\"\n },\n {\n \"value\": \"flat\",\n \"label\": \"Flat\"\n },\n {\n \"value\": \"fab\",\n \"label\": \"Fab\"\n }\n ]\n },\n \"actions.submit.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"small\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"medium\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"large\",\n \"label\": \"Large\"\n }\n ]\n },\n \"actions.submit.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n },\n {\n \"value\": \"basic\",\n \"label\": \"Basic\"\n }\n ]\n },\n \"sections[].headerAlign\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n }\n ]\n },\n \"sections[].appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"card\",\n \"label\": \"Card\"\n },\n {\n \"value\": \"plain\",\n \"label\": \"Plain\"\n },\n {\n \"value\": \"step\",\n \"label\": \"Step\"\n }\n ]\n },\n \"sections[].sectionHeader.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"avatar-image\",\n \"label\": \"Avatar image\"\n },\n {\n \"value\": \"avatar-initials\",\n \"label\": \"Avatar initials\"\n },\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n }\n ]\n },\n \"sections[].sectionHeader.emptyState\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"placeholder-avatar\",\n \"label\": \"Neutral placeholder\"\n },\n {\n \"value\": \"fallback-icon\",\n \"label\": \"Fallback icon\"\n },\n {\n \"value\": \"none\",\n \"label\": \"None\"\n }\n ]\n },\n \"sections[].sectionHeader.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"sm\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"md\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"lg\",\n \"label\": \"Large\"\n }\n ]\n },\n \"sections[].stepLabel\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"Dados básicos\",\n \"label\": \"Dados básicos\"\n },\n {\n \"value\": \"Detalhes\",\n \"label\": \"Detalhes\"\n },\n {\n \"value\": \"Confirmação\",\n \"label\": \"Confirmação\"\n }\n ]\n },\n \"sections[].titleStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"titleLarge\",\n \"label\": \"Title large\"\n },\n {\n \"value\": \"titleMedium\",\n \"label\": \"Title medium\"\n },\n {\n \"value\": \"titleSmall\",\n \"label\": \"Title small\"\n },\n {\n \"value\": \"headlineSmall\",\n \"label\": \"Headline small\"\n }\n ]\n },\n \"sections[].descriptionStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"bodyLarge\",\n \"label\": \"Body large\"\n },\n {\n \"value\": \"bodyMedium\",\n \"label\": \"Body medium\"\n },\n {\n \"value\": \"bodySmall\",\n \"label\": \"Body small\"\n }\n ]\n },\n \"sections[].rows[].columns[].align\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"end\",\n \"label\": \"End\"\n },\n {\n \"value\": \"stretch\",\n \"label\": \"Stretch\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].kind\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"richContent\",\n \"label\": \"Rich content\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].layout\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"block\",\n \"label\": \"Block\"\n },\n {\n \"value\": \"inline\",\n \"label\": \"Inline\"\n }\n ]\n },\n \"formRules[].targetType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"section\",\n \"label\": \"Section\"\n },\n {\n \"value\": \"row\",\n \"label\": \"Row\"\n },\n {\n \"value\": \"column\",\n \"label\": \"Column\"\n },\n {\n \"value\": \"action\",\n \"label\": \"Action\"\n },\n {\n \"value\": \"visualBlock\",\n \"label\": \"Visual block\"\n }\n ]\n },\n \"formRules[].context\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"visibility\",\n \"label\": \"Visibility\"\n },\n {\n \"value\": \"readOnly\",\n \"label\": \"Read only\"\n },\n {\n \"value\": \"style\",\n \"label\": \"Style\"\n },\n {\n \"value\": \"validation\",\n \"label\": \"Validation\"\n },\n {\n \"value\": \"notification\",\n \"label\": \"Notification\"\n }\n ]\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"field.visibility.hide\",\n \"intentExamples\": [\n \"hide field\",\n \"ocultar campo\",\n \"esconder campo\",\n \"invisible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.visibility.show\",\n \"intentExamples\": [\n \"show field\",\n \"mostrar campo\",\n \"exibir campo\",\n \"visible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.label.set\",\n \"intentExamples\": [\n \"label\",\n \"rename field\",\n \"renomear campo\",\n \"titulo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"label\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.placeholder.set\",\n \"intentExamples\": [\n \"placeholder\",\n \"hint text\",\n \"texto de ajuda\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"placeholder\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.required.enable\",\n \"intentExamples\": [\n \"required\",\n \"obrigatorio\",\n \"mandatory\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.required.disable\",\n \"intentExamples\": [\n \"optional\",\n \"nao obrigatorio\",\n \"opcional\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.enable\",\n \"intentExamples\": [\n \"readonly\",\n \"somente leitura\",\n \"read only\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.disable\",\n \"intentExamples\": [\n \"editable\",\n \"editavel\",\n \"read write\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.enable\",\n \"intentExamples\": [\n \"disable field\",\n \"desabilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.disable\",\n \"intentExamples\": [\n \"enable field\",\n \"habilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.controlType.set\",\n \"intentExamples\": [\n \"control type\",\n \"tipo de campo\",\n \"controlType\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"controlType\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.prefix.set\",\n \"intentExamples\": [\n \"prefix icon\",\n \"icone prefixo\",\n \"icon before\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"prefixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.suffix.set\",\n \"intentExamples\": [\n \"suffix icon\",\n \"icone sufixo\",\n \"icon after\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"suffixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.title.set\",\n \"intentExamples\": [\n \"section title\",\n \"titulo da secao\",\n \"section name\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"title\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.description.set\",\n \"intentExamples\": [\n \"section description\",\n \"descricao da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"description\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.add\",\n \"intentExamples\": [\n \"add section\",\n \"adicionar secao\",\n \"nova secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{value}}\",\n \"title\": \"{{value}}\",\n \"rows\": []\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da seção é único e relevante.\"\n },\n {\n \"id\": \"section.remove\",\n \"intentExamples\": [\n \"remove section\",\n \"remover secao\",\n \"excluir secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"section.order.set\",\n \"intentExamples\": [\n \"order section\",\n \"reordenar secao\",\n \"mover secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_order\": \"{{value}}\"\n }\n ]\n },\n \"safetyNotes\": \"A reordenação de seções é uma operação que deve ser revisada.\"\n },\n {\n \"id\": \"row.add\",\n \"intentExamples\": [\n \"add row\",\n \"adicionar linha\",\n \"nova linha na secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"columns\": []\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da linha é único e relevante na seção.\"\n },\n {\n \"id\": \"row.remove\",\n \"intentExamples\": [\n \"remove row\",\n \"remover linha\",\n \"excluir linha da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.add\",\n \"intentExamples\": [\n \"add column\",\n \"adicionar coluna\",\n \"nova coluna na linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"items\": []\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da coluna é único e relevante na linha.\"\n },\n {\n \"id\": \"column.remove\",\n \"intentExamples\": [\n \"remove column\",\n \"remover coluna\",\n \"excluir coluna da linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.field.add\",\n \"intentExamples\": [\n \"add field to column\",\n \"adicionar campo a coluna\",\n \"colocar campo na coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"id\": \"field-{{value}}\",\n \"fieldName\": \"{{value}}\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"\n },\n {\n \"id\": \"column.field.remove\",\n \"intentExamples\": [\n \"remove field from column\",\n \"remover campo da coluna\",\n \"tirar campo da coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"fieldName\": \"{{value}}\",\n \"_remove\": true\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover um campo de uma coluna pode alterar o layout do formulário.\"\n },\n {\n \"id\": \"actions.submit.label.set\",\n \"intentExamples\": [\n \"submit label\",\n \"rotulo salvar\",\n \"texto botao enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.submit.visible.set\",\n \"intentExamples\": [\n \"show submit\",\n \"esconder salvar\",\n \"visibilidade enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.label.set\",\n \"intentExamples\": [\n \"cancel label\",\n \"rotulo cancelar\",\n \"texto botao cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.visible.set\",\n \"intentExamples\": [\n \"show cancel\",\n \"esconder cancelar\",\n \"visibilidade cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.label.set\",\n \"intentExamples\": [\n \"reset label\",\n \"rotulo resetar\",\n \"texto botao limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.visible.set\",\n \"intentExamples\": [\n \"show reset\",\n \"esconder reset\",\n \"visibilidade limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"rule.add.visibility\",\n \"intentExamples\": [\n \"add visibility rule\",\n \"regra de visibilidade\",\n \"campo condicional\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{value.id}}\",\n \"name\": \"{{value.name}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{target}}\"\n ],\n \"effect\": {\n \"condition\": \"{{value.condition}}\",\n \"properties\": {\n \"hidden\": false\n },\n \"propertiesWhenFalse\": {\n \"hidden\": true\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao.\"\n },\n {\n \"id\": \"rule.remove\",\n \"intentExamples\": [\n \"remove rule\",\n \"excluir regra\",\n \"apagar regra\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"\n },\n {\n \"id\": \"rule.add.dependency\",\n \"intentExamples\": [\n \"adicionar dependencia\",\n \"campo depende de\",\n \"mostrar se\",\n \"obrigatorio se\",\n \"desabilitar se\",\n \"campo condicional\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"triggerField\",\n \"type\": \"STRING\",\n \"description\": \"Campo que controla a regra (ex: tipoPessoa)\"\n },\n {\n \"name\": \"conditionValue\",\n \"type\": \"STRING\",\n \"description\": \"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado pela regra (ex: cnpj)\"\n },\n {\n \"name\": \"effectType\",\n \"type\": \"ENUM\",\n \"options\": [\n \"visibility\",\n \"required\",\n \"disabled\"\n ],\n \"description\": \"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"rule_{{params.triggerField}}_{{params.targetField}}\",\n \"name\": \"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"{{params.triggerField}}\"\n },\n \"{{params.conditionValue}}\"\n ]\n },\n \"properties\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? false : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? true : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? true : undefined}}\"\n },\n \"propertiesWhenFalse\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? true : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? false : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? false : undefined}}\"\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"\n },\n {\n \"id\": \"rule.add.custom\",\n \"intentExamples\": [\n \"adicionar regra customizada\",\n \"regra complexa\",\n \"logica de formulario\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"id\",\n \"type\": \"STRING\",\n \"description\": \"ID único da regra\"\n },\n {\n \"name\": \"condition\",\n \"type\": \"STRING\",\n \"description\": \"Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \\\"and\\\": [{ \\\">\\\": [{ \\\"var\\\": \\\"idade\\\" }, 18] }, { \\\"==\\\": [{ \\\"var\\\": \\\"possuiHabilitacao\\\" }, true] }] })\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado\"\n },\n {\n \"name\": \"propertyName\",\n \"type\": \"STRING\",\n \"description\": \"Propriedade afetada (hidden, required, disabled, readOnly)\"\n },\n {\n \"name\": \"valueIfTrue\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for verdadeira\"\n },\n {\n \"name\": \"valueIfFalse\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for falsa\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{params.id}}\",\n \"name\": \"Regra Customizada: {{params.id}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": \"{{params.condition}}\",\n \"properties\": {\n \"{{params.propertyName}}\": \"{{params.valueIfTrue}}\"\n },\n \"propertiesWhenFalse\": {\n \"{{params.propertyName}}\": \"{{params.valueIfFalse}}\"\n }\n }\n }\n ]\n }\n }\n ],\n \"fieldResolvers\": {\n \"fieldMetadata[]\": [\n \"name\",\n \"label\"\n ],\n \"sections[]\": [\n \"id\",\n \"title\"\n ],\n \"sections[].rows[].columns[].items[]\": [\n \"id\",\n \"fieldName\"\n ],\n \"sections[].rows[].columns[].fields[]\": []\n },\n \"hints\": [\n \"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\n \"Local fields are real form controls. Create them in fieldMetadata[] with source:\\\"local\\\", usually transient:true and submitPolicy:\\\"omit\\\", then place them as kind:\\\"field\\\" layout items.\",\n \"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\n \"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\n \"Use sections[].rows[].columns[].items[] as the canonical mixed layout order. kind:\\\"field\\\" items reference fieldMetadata; kind:\\\"richContent\\\" items are visual blocks outside submit payload.\",\n \"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\n \"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\n \"For field formRules that must calculate a FormControl value, use effect.properties.value with the closed envelope { expression: <JSON Logic> }, such as { expression: { yearsSince: [{ var: \\\"birthDate\\\" }] } }. Use the closed envelope { literal: <value> } for structured literal objects; do not add extra keys and do not generate TypeScript functions.\",\n \"For conditional side effects, use formCommandRules with effects[].kind:\\\"global-action\\\" and a structured globalAction ref. The visual editor authors the primary effect and preserves secondary effects from advanced JSON. Do not put alert/modal/navigation commands inside formRules[].effect.properties.\",\n \"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\n \"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\n \"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\n \"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\n \"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\n \"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\n \"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\n \"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\n \"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\n \"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\n \"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"\n ]\n }\n}",
|
|
14014
14092
|
"sourcePointer": "praxis-ui-angular/projects/praxis-dynamic-form/src/lib/ai/filter-form-context-pack.ts",
|
|
14015
|
-
"contentHash": "
|
|
14093
|
+
"contentHash": "fce0638895fb6284d9f1f6c896a2eeb5945f4877b418f942a1872f60b1541c15",
|
|
14016
14094
|
"sourceKind": "component_definition",
|
|
14017
14095
|
"sourceId": "praxis-filter-form",
|
|
14018
14096
|
"corpusVersion": "1.0.0"
|