@praxisui/dynamic-form 9.0.0-beta.76 → 9.0.0-beta.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-07-17T20:02:53.244Z",
3
+ "generatedAt": "2026-07-19T03:55:15.480Z",
4
4
  "packageName": "@praxisui/dynamic-form",
5
- "packageVersion": "9.0.0-beta.76",
5
+ "packageVersion": "9.0.0-beta.78",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 2,
@@ -8662,119 +8662,719 @@
8662
8662
  {
8663
8663
  "chunkIndex": 1,
8664
8664
  "chunkKind": "capabilities",
8665
- "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: metadata\n Kind: object\n Description: Estado interno do builder visual de regras, gerado apenas para round-trip do editor.\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.prefix\n Category: appearance\n Kind: string\n Description: Prefixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n - Path: fieldMetadata[].presentation.suffix\n Category: appearance\n Kind: string\n Description: Sufixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\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.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n - Path: inputs.layoutPolicy.detailSummary.widthPrecedence\n Category: inputs\n Kind: enum\n Description: Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.\n - 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",
8665
+ "content": "Schema Capability:\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\nSchema Capability:\n - Path: metadata.source\n Category: metadata\n Kind: enum\n Description: Origem da configuração do formulário.\n\nSchema Capability:\n - Path: metadata.lastUpdated\n Category: metadata\n Kind: string\n Description: Timestamp da última atualização da configuração (ISO-8601).\n\nSchema Capability:\n - Path: metadata.schemaId\n Category: metadata\n Kind: string\n Description: ID do schema de origem para reconciliação no servidor.\n\nSchema Capability:\n - Path: metadata.schemaContext\n Category: metadata\n Kind: object\n Description: Contexto do schema usado para compor o formulário.\n\nSchema Capability:\n - Path: metadata.schemaContext.path\n Category: metadata\n Kind: string\n Description: Path do schema de origem.\n\nSchema Capability:\n - Path: metadata.schemaContext.operation\n Category: metadata\n Kind: string\n Description: Operação do schema (ex.: \"get\", \"post\").\n\nSchema Capability:\n - Path: metadata.schemaContext.schemaType\n Category: metadata\n Kind: enum\n Description: Tipo do schema (response/request).\n\nSchema Capability:\n - Path: metadata.schemaContext.internal\n Category: metadata\n Kind: boolean\n Description: Indica se o schema é interno.\n\nSchema Capability:\n - Path: metadata.schemaContext.tenant\n Category: metadata\n Kind: string\n Description: Tenant do schema (se aplicável).\n\nSchema Capability:\n - Path: metadata.schemaContext.locale\n Category: metadata\n Kind: string\n Description: Locale do schema (se aplicável).\n\nSchema Capability:\n - Path: metadata.serverHash\n Category: metadata\n Kind: string\n Description: Hash dos dados do servidor para detecção de mudanças.\n\nSchema Capability:\n - Path: metadata.customizations\n Category: metadata\n Kind: array\n Description: Log de customizações manuais aplicadas ao formulário.\n\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[]\n Category: fields\n Kind: object\n Description: Item de metadados do campo (FieldMetadata).\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: helpPresentation.inlineMaxLength\n Category: appearance\n Kind: number\n Description: Tamanho maximo para manter ajuda inline quando display=\"auto\".\n\nSchema Capability:\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\nSchema Capability:\n - Path: editorialContext\n Category: editorial\n Kind: object\n Description: Contexto editorial compartilhado entre os blocos hospedados antes/depois do formulario.\n\nSchema Capability:\n - Path: editorialContext.[token]\n Category: editorial\n Kind: string\n Description: Valor simples exposto no contexto editorial.\n\nSchema Capability:\n - Path: formBlocksBefore\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado antes do formulario.\n\nSchema Capability:\n - Path: formBlocksBefore.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content.\n\nSchema Capability:\n - Path: formBlocksBefore.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content editorial.\n\nSchema Capability:\n - Path: formBlocksBefore.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes do formulario.\n\nSchema Capability:\n - Path: formBlocksBefore.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes do formulario.\n\nSchema Capability:\n - Path: formBlocksBefore.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content hospedado antes do formulario.\n\nSchema Capability:\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\nSchema Capability:\n - Path: formBlocksBeforeActions.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content antes das ações.\n\nSchema Capability:\n - Path: formBlocksBeforeActions.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content antes das ações.\n\nSchema Capability:\n - Path: formBlocksBeforeActions.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes da área principal de ações.\n\nSchema Capability:\n - Path: formBlocksBeforeActions.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes da área principal de ações.\n\nSchema Capability:\n - Path: formBlocksBeforeActions.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content antes das ações.\n\nSchema Capability:\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\nSchema Capability:\n - Path: formBlocksAfter.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content de fechamento.\n\nSchema Capability:\n - Path: formBlocksAfter.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content de fechamento.\n\nSchema Capability:\n - Path: formBlocksAfter.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados depois do formulario.\n\nSchema Capability:\n - Path: formBlocksAfter.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado depois do formulario.\n\nSchema Capability:\n - Path: formBlocksAfter.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content de fechamento.\n\nSchema Capability:\n - Path: sections[].id\n Category: layout\n Kind: string\n Description: ID único da seção.\n\nSchema Capability:\n - Path: sections[].title\n Category: layout\n Kind: string\n Description: Título exibido para cada seção do formulário.\n\nSchema Capability:\n - Path: sections[].description\n Category: layout\n Kind: string\n Description: Descrição auxiliar exibida abaixo do título da seção.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].sectionHeader.mode\n Category: layout\n Kind: enum\n Description: Estratégia visual do header da seção.",
8666
8666
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8667
- "contentHash": "c05a6371db5ac065bf75223cf06663456383933d63d8fe60f7d4588cffb5ac69",
8667
+ "contentHash": "057e50c9848029496159e1fb7db4433e6d9f441e64f6f711fdd3e10eacef19fa",
8668
8668
  "sourceKind": "component_definition",
8669
8669
  "sourceId": "praxis-dynamic-form",
8670
8670
  "corpusVersion": "1.0.0"
8671
8671
  },
8672
8672
  {
8673
8673
  "chunkIndex": 2,
8674
+ "chunkKind": "capabilities",
8675
+ "content": "Schema Capability:\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\nSchema Capability:\n - Path: sections[].sectionHeader.initialsSourceField\n Category: layout\n Kind: string\n Description: Campo textual usado para derivar iniciais do avatar.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].sectionHeader.initialsMaxLength\n Category: layout\n Kind: number\n Description: Máximo de letras exibidas no avatar textual.\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].collapsed\n Category: layout\n Kind: boolean\n Description: Estado inicial da seção (colapsada/expandida) quando `collapsible` é true.\n\nSchema Capability:\n - Path: sections[].gapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após a seção.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].appearance\n Category: appearance\n Kind: enum\n Description: Preset visual do container/cabeçalho da seção.\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].titleStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para o título da seção.\n\nSchema Capability:\n - Path: sections[].descriptionStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para a descrição da seção.\n\nSchema Capability:\n - Path: sections[].titleColor\n Category: appearance\n Kind: string\n Description: Cor do título da seção (CSS color ou token).\n\nSchema Capability:\n - Path: sections[].descriptionColor\n Category: appearance\n Kind: string\n Description: Cor da descrição da seção (CSS color ou token).\n\nSchema Capability:\n - Path: sections[].headerAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento horizontal do conteúdo do cabeçalho da seção.\n\nSchema Capability:\n - Path: sections[].headerTooltip\n Category: layout\n Kind: string\n Description: Texto de tooltip para o cabeçalho da seção.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da seção.\n\nSchema Capability:\n - Path: sections[].styles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da seção.\n\nSchema Capability:\n - Path: sections[].rows[].id\n Category: layout\n Kind: string\n Description: ID único da linha dentro de uma seção.\n\nSchema Capability:\n - Path: sections[].rows[].title\n Category: layout\n Kind: string\n Description: Título interno da linha (usado em editores e labels).\n\nSchema Capability:\n - Path: sections[].rows[].gap\n Category: layout\n Kind: number\n Description: Espaçamento horizontal (em px) entre colunas nesta linha.\n\nSchema Capability:\n - Path: sections[].rows[].rowGap\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após esta linha.\n\nSchema Capability:\n - Path: sections[].rows[].columns[].id\n Category: layout\n Kind: string\n Description: ID único da coluna dentro de uma linha.\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].testId\n Category: layout\n Kind: string\n Description: Atributo data-testid aplicado ao container da coluna.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].items[].kind\n Category: layout\n Kind: enum\n Description: Tipo do item de layout da coluna.\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].items[].fieldName\n Category: layout\n Kind: string\n Description: Nome do campo quando kind é \"field\".",
8676
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8677
+ "contentHash": "7bd1ce34bf36df588bb3fae515d854a24b59a8fd48a9d58b2f8ecaae51ea105b",
8678
+ "sourceKind": "component_definition",
8679
+ "sourceId": "praxis-dynamic-form",
8680
+ "corpusVersion": "1.0.0"
8681
+ },
8682
+ {
8683
+ "chunkIndex": 3,
8684
+ "chunkKind": "capabilities",
8685
+ "content": "Schema Capability:\n - Path: sections[].rows[].columns[].items[].document\n Category: editorial\n Kind: object\n Description: RichContentDocument do bloco visual quando kind é \"richContent\".\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].items[].rootClassName\n Category: appearance\n Kind: string\n Description: Classe CSS opcional aplicada ao bloco visual richContent.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].order.sm\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas pequenas (sm).\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].order.lg\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas grandes (lg).\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].hidden.xs\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra pequenas (xs).\n\nSchema Capability:\n - Path: sections[].rows[].columns[].hidden.sm\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas pequenas (sm).\n\nSchema Capability:\n - Path: sections[].rows[].columns[].hidden.md\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas médias (md).\n\nSchema Capability:\n - Path: sections[].rows[].columns[].hidden.lg\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas grandes (lg).\n\nSchema Capability:\n - Path: sections[].rows[].columns[].hidden.xl\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra grandes (xl).\n\nSchema Capability:\n - Path: sections[].rows[].columns[].align\n Category: layout\n Kind: enum\n Description: Alinhamento vertical do conteúdo da coluna.\n\nSchema Capability:\n - Path: sections[].rows[].columns[].padding\n Category: layout\n Kind: number\n Description: Padding (em px) interno da coluna.\n\nSchema Capability:\n - Path: sections[].rows[].columns[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada à coluna.\n\nSchema Capability:\n - Path: actions.submit.id\n Category: actions\n Kind: string\n Description: ID do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.icon\n Category: actions\n Kind: string\n Description: Ícone (Material Icons) para o botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.color\n Category: actions\n Kind: enum\n Description: Cor do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n\nSchema Capability:\n - Path: actions.submit.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de submissão.\n\nSchema Capability:\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\nSchema Capability:\n - Path: actions.cancel.id\n Category: actions\n Kind: string\n Description: ID do botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.icon\n Category: actions\n Kind: string\n Description: Ícone (Material Icons) para o botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.color\n Category: actions\n Kind: enum\n Description: Cor do botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de cancelar.",
8686
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8687
+ "contentHash": "f34d296ee57e962539a19f213748c29fb83ce6cfa25db7beb9506f80822ca00e",
8688
+ "sourceKind": "component_definition",
8689
+ "sourceId": "praxis-dynamic-form",
8690
+ "corpusVersion": "1.0.0"
8691
+ },
8692
+ {
8693
+ "chunkIndex": 4,
8694
+ "chunkKind": "capabilities",
8695
+ "content": "Schema Capability:\n - Path: actions.cancel.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n\nSchema Capability:\n - Path: actions.cancel.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de cancelar.\n\nSchema Capability:\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\nSchema Capability:\n - Path: actions.reset.id\n Category: actions\n Kind: string\n Description: ID do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.icon\n Category: actions\n Kind: string\n Description: Ícone (Material Icons) para o botão de reset.\n\nSchema Capability:\n - Path: actions.reset.color\n Category: actions\n Kind: enum\n Description: Cor do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de reset.\n\nSchema Capability:\n - Path: actions.reset.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de reset.\n\nSchema Capability:\n - Path: actions.reset.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de reset.\n\nSchema Capability:\n - Path: actions.reset.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n\nSchema Capability:\n - Path: actions.reset.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de reset.\n\nSchema Capability:\n - Path: actions.reset.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de reset.\n\nSchema Capability:\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\nSchema Capability:\n - Path: actions.custom\n Category: actions\n Kind: array\n Description: Lista de botões de ação customizados.\n\nSchema Capability:\n - Path: actions.custom[]\n Category: actions\n Kind: object\n Description: Configuração de um botão de ação customizado.\n\nSchema Capability:\n - Path: actions.custom[].id\n Category: actions\n Kind: string\n Description: ID da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].visible\n Category: actions\n Kind: boolean\n Description: Visibilidade da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].label\n Category: actions\n Kind: string\n Description: Rótulo da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].icon\n Category: actions\n Kind: string\n Description: Ícone (Material Icons) para a ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].color\n Category: actions\n Kind: enum\n Description: Cor da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].variant\n Category: actions\n Kind: enum\n Description: Variante visual da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].size\n Category: actions\n Kind: enum\n Description: Tamanho da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada à ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados à ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].disabled\n Category: actions\n Kind: boolean\n Description: Desabilita a ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].type\n Category: actions\n Kind: enum\n Description: Tipo do botão da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n\nSchema Capability:\n - Path: actions.custom[].tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido na ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento na ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado para a ação customizada.\n\nSchema Capability:\n - Path: actions.position\n Category: layout\n Kind: enum\n Description: Posicionamento horizontal da barra de ações.\n\nSchema Capability:\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\nSchema Capability:\n - Path: actions.spacing\n Category: layout\n Kind: enum\n Description: Espaçamento entre os botões na barra de ações.\n\nSchema Capability:\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\nSchema Capability:\n - Path: actions.divider\n Category: layout\n Kind: boolean\n Description: Exibe um divisor superior acima da barra de ações.\n\nSchema Capability:\n - Path: actions.placement\n Category: layout\n Kind: enum\n Description: Localização estrutural da barra de ações no layout.\n\nSchema Capability:\n - Path: actions.mobile.position\n Category: layout\n Kind: enum\n Description: Posicionamento da barra de ações em dispositivos móveis.\n\nSchema Capability:\n - Path: actions.mobile.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões em dispositivos móveis.\n\nSchema Capability:\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\nSchema Capability:\n - Path: actions.containerClassName\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da barra de ações.\n\nSchema Capability:\n - Path: actions.containerStyles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da barra de ações.",
8696
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8697
+ "contentHash": "9cfad48adaa90e88eb8231e6c56ea92199382bde6a062c94b11cc802f209516a",
8698
+ "sourceKind": "component_definition",
8699
+ "sourceId": "praxis-dynamic-form",
8700
+ "corpusVersion": "1.0.0"
8701
+ },
8702
+ {
8703
+ "chunkIndex": 5,
8704
+ "chunkKind": "capabilities",
8705
+ "content": "Schema Capability:\n - Path: actions.showSaveButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de submit.\n\nSchema Capability:\n - Path: actions.submitButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de submit.\n\nSchema Capability:\n - Path: actions.showCancelButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de cancel.\n\nSchema Capability:\n - Path: actions.cancelButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de cancel.\n\nSchema Capability:\n - Path: actions.showResetButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de reset.\n\nSchema Capability:\n - Path: actions.resetButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de reset.\n\nSchema Capability:\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\nSchema Capability:\n - Path: behavior.trackHistory\n Category: behavior\n Kind: boolean\n Description: Habilita rastreamento de histórico para desfazer/refazer (se suportado).\n\nSchema Capability:\n - Path: behavior.focusFirstError\n Category: behavior\n Kind: boolean\n Description: Ao submeter, foca automaticamente no primeiro campo com erro.\n\nSchema Capability:\n - Path: behavior.scrollToErrors\n Category: behavior\n Kind: boolean\n Description: Ao submeter, rola a página para exibir o primeiro erro.\n\nSchema Capability:\n - Path: behavior.clearAfterSave\n Category: behavior\n Kind: boolean\n Description: Limpa o formulário após uma submissão bem-sucedida.\n\nSchema Capability:\n - Path: behavior.redirectAfterSave\n Category: behavior\n Kind: string\n Description: URL para redirecionar após uma submissão bem-sucedida.\n\nSchema Capability:\n - Path: behavior.reactiveValidation\n Category: validation\n Kind: boolean\n Description: Ativa validação reativa (em tempo real) em `valueChanges`.\n\nSchema Capability:\n - Path: behavior.reactiveValidationDebounceMs\n Category: validation\n Kind: number\n Description: Debounce (em ms) para a validação reativa.\n\nSchema Capability:\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\nSchema Capability:\n - Path: api.loadEndpoint\n Category: api\n Kind: string\n Description: URL para buscar dados para popular o formulário (GET).\n\nSchema Capability:\n - Path: api.saveMethod\n Category: api\n Kind: enum\n Description: Método HTTP para a requisição de salvar.\n\nSchema Capability:\n - Path: api.timeout\n Category: api\n Kind: number\n Description: Tempo limite (em ms) para as requisições API.\n\nSchema Capability:\n - Path: api.headers\n Category: api\n Kind: object\n Description: Cabeçalhos HTTP personalizados para as requisições API.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: messages.updateRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após atualização de registro.\n\nSchema Capability:\n - Path: messages.createRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após criação de registro.\n\nSchema Capability:\n - Path: messages.updateRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após atualização de registro.\n\nSchema Capability:\n - Path: messages.createRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após criação de registro.\n\nSchema Capability:\n - Path: messages.confirmations.submit\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de submeter o formulário.\n\nSchema Capability:\n - Path: messages.confirmations.cancel\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de cancelar.\n\nSchema Capability:\n - Path: messages.confirmations.reset\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de resetar o formulário.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: messages.customActions.[actionId].success\n Category: messages\n Kind: string\n Description: Mensagem de sucesso para a ação customizada.\n\nSchema Capability:\n - Path: messages.customActions.[actionId].error\n Category: messages\n Kind: string\n Description: Mensagem de erro para a ação customizada.\n\nSchema Capability:\n - Path: messages.customActions.[actionId].confirmation\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para a ação customizada.\n\nSchema Capability:\n - Path: messages.loading.submit\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o envio do formulário.\n\nSchema Capability:\n - Path: messages.loading.cancel\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o cancelamento.\n\nSchema Capability:\n - Path: messages.loading.reset\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o reset do formulário.\n\nSchema Capability:\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\nSchema Capability:\n - Path: formRules[].id\n Category: rules\n Kind: string\n Description: ID único da regra de layout.\n\nSchema Capability:\n - Path: formRules[].name\n Category: rules\n Kind: string\n Description: Nome amigável da regra de layout.\n\nSchema Capability:\n - Path: formRules[].description\n Category: rules\n Kind: string\n Description: Descrição da regra de layout para documentação.\n\nSchema Capability:\n - Path: formRules[].metadata.origin\n Category: rules\n Kind: enum\n Description: Origem da regra sugerida pela IA.\n\nSchema Capability:\n - Path: formRules[].metadata.reviewStatus\n Category: rules\n Kind: enum\n Description: Status de revisão humana da regra sugerida pela IA.\n\nSchema Capability:\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\nSchema Capability:\n - Path: formRules[].context\n Category: rules\n Kind: enum\n Description: Contexto legado da regra (quando properties não forem informadas).\n\nSchema Capability:\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`.",
8706
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8707
+ "contentHash": "b9d96b46a7eec674ad9cd481a6765bab68a58d01ecaf6114efa20d70502d0104",
8708
+ "sourceKind": "component_definition",
8709
+ "sourceId": "praxis-dynamic-form",
8710
+ "corpusVersion": "1.0.0"
8711
+ },
8712
+ {
8713
+ "chunkIndex": 6,
8714
+ "chunkKind": "capabilities",
8715
+ "content": "Schema Capability:\n - Path: formRules[].targets[]\n Category: rules\n Kind: string\n Description: ID do alvo da regra.\n\nSchema Capability:\n - Path: formRules[].targetFields\n Category: rules\n Kind: array\n Description: Alias legado para alvos de campo.\n\nSchema Capability:\n - Path: formRules[].targetFields[]\n Category: rules\n Kind: string\n Description: ID do campo alvo (alias legado).\n\nSchema Capability:\n - Path: formRules[].effect.condition\n Category: rules\n Kind: expression\n Description: Condicao canonica da regra, expressa em Json Logic.\n\nSchema Capability:\n - Path: formCommandRules\n Category: rules\n Kind: array\n Description: Regras condicionais de comando avaliadas depois que formRules estabilizam valores calculados.\n\nSchema Capability:\n - Path: formCommandRules[].condition\n Category: rules\n Kind: expression\n Description: Condicao Json Logic avaliada sobre formData estabilizado, incluindo field values calculados.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: formCommandRules[].policy\n Category: rules\n Kind: object\n Description: Politica operacional do comando: trigger, distinct, distinctBy, debounceMs, errorPolicy e runOnInitialEvaluation.\n\nSchema Capability:\n - Path: formRulesState\n Category: metadata\n Kind: object\n Description: Estado interno do builder visual de regras, gerado apenas para round-trip do editor.\n\nSchema Capability:\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\nSchema Capability:\n - Path: hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeInit.\n\nSchema Capability:\n - Path: hooks.beforeInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.beforeInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.beforeInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.beforeInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterInit.\n\nSchema Capability:\n - Path: hooks.afterInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.afterInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.afterInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.afterInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeValidate.\n\nSchema Capability:\n - Path: hooks.beforeValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.beforeValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.beforeValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.beforeValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterValidate.\n\nSchema Capability:\n - Path: hooks.afterValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.afterValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.afterValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.afterValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeSubmit.\n\nSchema Capability:\n - Path: hooks.beforeSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.beforeSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.beforeSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.beforeSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterSubmit.\n\nSchema Capability:\n - Path: hooks.afterSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.afterSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.afterSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.afterSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hooks.onError[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para onError.\n\nSchema Capability:\n - Path: hooks.onError[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.onError[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.onError[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.onError[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hints.dataModes.create\n Category: form_config\n Kind: string\n Description: Dica para o modo de criação de dados.\n\nSchema Capability:\n - Path: hints.dataModes.edit\n Category: form_config\n Kind: string\n Description: Dica para o modo de edição de dados.\n\nSchema Capability:\n - Path: hints.dataModes.view\n Category: form_config\n Kind: string\n Description: Dica para o modo de visualização de dados.\n\nSchema Capability:\n - Path: hints.uiModes.presentation\n Category: form_config\n Kind: string\n Description: Dica para o modo de apresentação da UI.",
8716
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8717
+ "contentHash": "0d30c9ed381b5a69050e4922828ae287af246f0a927e7925cf1b0aa68e33fbb5",
8718
+ "sourceKind": "component_definition",
8719
+ "sourceId": "praxis-dynamic-form",
8720
+ "corpusVersion": "1.0.0"
8721
+ },
8722
+ {
8723
+ "chunkIndex": 7,
8724
+ "chunkKind": "capabilities",
8725
+ "content": "Schema Capability:\n - Path: hints.uiModes.readonly\n Category: form_config\n Kind: string\n Description: Dica para o modo de somente leitura da UI.\n\nSchema Capability:\n - Path: hints.uiModes.disabled\n Category: form_config\n Kind: string\n Description: Dica para o modo desabilitado da UI.\n\nSchema Capability:\n - Path: hints.uiModes.visible\n Category: form_config\n Kind: string\n Description: Dica para o modo de visibilidade da UI.\n\nSchema Capability:\n - Path: fieldMetadata[].id\n Category: identity\n Kind: string\n Description: Identificador unico da instancia do componente.\n\nSchema Capability:\n - Path: fieldMetadata[].version\n Category: identity\n Kind: string\n Description: Versao do schema de metadata (migracao).\n\nSchema Capability:\n - Path: fieldMetadata[].context\n Category: identity\n Kind: enum\n Description: Contexto de uso do componente (form/filter/table/dialog/standalone).\n\nSchema Capability:\n - Path: fieldMetadata[].createdAt\n Category: misc\n Kind: string\n Description: Timestamp de criacao (ISO).\n\nSchema Capability:\n - Path: fieldMetadata[].updatedAt\n Category: misc\n Kind: string\n Description: Timestamp de atualizacao (ISO).\n\nSchema Capability:\n - Path: fieldMetadata[].tags\n Category: identity\n Kind: array\n Description: Tags para categorizacao e busca.\n\nSchema Capability:\n - Path: fieldMetadata[].cssClass\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao host do componente.\n\nSchema Capability:\n - Path: fieldMetadata[].style\n Category: appearance\n Kind: object\n Description: Estilos inline (objeto CSS).\n\nSchema Capability:\n - Path: fieldMetadata[].dataAttributes\n Category: data\n Kind: object\n Description: Data attributes para teste/analytics.\n\nSchema Capability:\n - Path: fieldMetadata[].name\n Category: identity\n Kind: string\n Description: Identificador único do campo. Essencial para binding.\n\nSchema Capability:\n - Path: fieldMetadata[].label\n Category: identity\n Kind: string\n Description: Rótulo principal exibido para o usuário.\n\nSchema Capability:\n - Path: fieldMetadata[].placeholder\n Category: identity\n Kind: string\n Description: Texto temporário exibido quando vazio.\n\nSchema Capability:\n - Path: fieldMetadata[].hint\n Category: identity\n Kind: string\n Description: Texto de ajuda exibido abaixo do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].helpText\n Category: identity\n Kind: string\n Description: Texto semântico de ajuda publicado pelo schema/DTO.\n\nSchema Capability:\n - Path: fieldMetadata[].tooltip\n Category: identity\n Kind: string\n Description: Texto exibido ao passar o mouse.\n\nSchema Capability:\n - Path: fieldMetadata[].tooltipOnHover\n Category: identity\n Kind: boolean\n Description: Habilita apresentação do tooltip no hover quando suportado pelo renderer.\n\nSchema Capability:\n - Path: fieldMetadata[].description\n Category: identity\n Kind: string\n Description: Descrição detalhada (usada em documentação ou helps extensos).\n\nSchema Capability:\n - Path: fieldMetadata[].selectionMode\n Category: behavior\n Kind: enum\n Description: Semântica de seleção explícita para controles de escolha.\n\nSchema Capability:\n - Path: fieldMetadata[].variant\n Category: appearance\n Kind: string\n Description: Variante visual/semântica do controle.\n\nSchema Capability:\n - Path: fieldMetadata[].density\n Category: appearance\n Kind: enum\n Description: Densidade visual do shell do controle.\n\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].group\n Category: identity\n Kind: string\n Description: Agrupador lógico do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].order\n Category: layout\n Kind: number\n Description: Ordem de exibição do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].width\n Category: layout\n Kind: string\n Description: Largura do campo (ex: 50%, 100px).\n\nSchema Capability:\n - Path: fieldMetadata[].isFlex\n Category: layout\n Kind: boolean\n Description: Se true, usa flex-grow para preencher espaço.\n\nSchema Capability:\n - Path: fieldMetadata[].controlType\n Category: behavior\n Kind: enum\n Description: Tipo do componente de UI (input, select, datepicker, etc).\n\nSchema Capability:\n - Path: fieldMetadata[].dataType\n Category: data\n Kind: enum\n Description: Tipo de dado do campo (text, number, date, etc).\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.appearance\n Category: appearance\n Kind: enum\n Description: Aparência do campo Material (fill/outline).\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.color\n Category: appearance\n Kind: enum\n Description: Tema de cor Material (primary/accent/warn).\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.floatLabel\n Category: appearance\n Kind: enum\n Description: Comportamento do rótulo flutuante.\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.subscriptSizing\n Category: appearance\n Kind: enum\n Description: Estratégia de sizing do subscript (erros/hints).\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.hideRequiredMarker\n Category: appearance\n Kind: boolean\n Description: Oculta o asterisco de campo obrigatório.\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.density\n Category: appearance\n Kind: enum\n Description: Densidade do campo Material.\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.disableRipple\n Category: appearance\n Kind: boolean\n Description: Desativa ripple/ondulação em componentes Material.\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.customPalette\n Category: appearance\n Kind: object\n Description: Override de paleta (primary/accent/warn).\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.animations\n Category: appearance\n Kind: object\n Description: Configuração de animações (disable, duration, easing).\n\nSchema Capability:\n - Path: fieldMetadata[].prefixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido antes do valor.\n\nSchema Capability:\n - Path: fieldMetadata[].suffixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido depois do valor.\n\nSchema Capability:\n - Path: fieldMetadata[].iconPosition\n Category: appearance\n Kind: enum\n Description: Posição preferencial do ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].iconSize\n Category: appearance\n Kind: enum\n Description: Tamanho do ícone.\n\nSchema Capability:\n - Path: fieldMetadata[].iconColor\n Category: appearance\n Kind: string\n Description: Cor semântica ou token de cor aplicado ao ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].iconClass\n Category: appearance\n Kind: string\n Description: Classe CSS controlada pelo host para o ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].iconStyle\n Category: appearance\n Kind: string\n Description: Estilo visual semântico do ícone quando o renderer suportar variações.",
8726
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8727
+ "contentHash": "fd4b705c0e4b7d01233e4fe51a75532848dd9e3fd9ca5812f8faada5ee9f1fe0",
8728
+ "sourceKind": "component_definition",
8729
+ "sourceId": "praxis-dynamic-form",
8730
+ "corpusVersion": "1.0.0"
8731
+ },
8732
+ {
8733
+ "chunkIndex": 8,
8734
+ "chunkKind": "capabilities",
8735
+ "content": "Schema Capability:\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].presentation.prefix\n Category: appearance\n Kind: string\n Description: Prefixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.suffix\n Category: appearance\n Kind: string\n Description: Sufixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n\nSchema Capability:\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n\nSchema Capability:\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n\nSchema Capability:\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.",
8736
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8737
+ "contentHash": "680baee6a38106f22c4710309b6d65ef7e59d1ee08bb65cca97f004070a99d0c",
8738
+ "sourceKind": "component_definition",
8739
+ "sourceId": "praxis-dynamic-form",
8740
+ "corpusVersion": "1.0.0"
8741
+ },
8742
+ {
8743
+ "chunkIndex": 9,
8744
+ "chunkKind": "capabilities",
8745
+ "content": "Schema Capability:\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n\nSchema Capability:\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n\nSchema Capability:\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n\nSchema Capability:\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n\nSchema Capability:\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n\nSchema Capability:\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n\nSchema Capability:\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n\nSchema Capability:\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.reason\n Category: misc\n Kind: string\n Description: Justificativa explicativa/auditavel da politica de acesso do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n\nSchema Capability:\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.",
8746
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8747
+ "contentHash": "02f3921c10fb0dd88775888b7143c2cad0a14ccd228d35ea95cdb587a28b3c3f",
8748
+ "sourceKind": "component_definition",
8749
+ "sourceId": "praxis-dynamic-form",
8750
+ "corpusVersion": "1.0.0"
8751
+ },
8752
+ {
8753
+ "chunkIndex": 10,
8754
+ "chunkKind": "capabilities",
8755
+ "content": "Schema Capability:\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n\nSchema Capability:\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n\nSchema Capability:\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n\nSchema Capability:\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n\nSchema Capability:\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n\nSchema Capability:\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n\nSchema Capability:\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n\nSchema Capability:\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n\nSchema Capability:\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n\nComponent Capability:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n\nComponent Capability:\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n\nComponent Capability:\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n\nComponent Capability:\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n\nComponent Capability:\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n\nComponent Capability:\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\n\nComponent Capability:\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n\nComponent Capability:\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n\nComponent Capability:\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n\nComponent Capability:\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n\nComponent Capability:\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n\nComponent Capability:\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n\nComponent Capability:\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n\nComponent Capability:\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n\nComponent Capability:\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n\nComponent Capability:\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n\nComponent Capability:\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n\nComponent Capability:\n - Path: inputs.generatedLayoutPreset\n Category: inputs\n Kind: enum\n Description: Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.\n\nComponent Capability:\n - Path: inputs.layoutPolicy\n Category: inputs\n Kind: object\n Description: Politica opt-in para materializar layout diretamente do schema atual sem depender de FormConfig.sections authoradas.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.preset\n Category: inputs\n Kind: enum\n Description: Preset de layout schema-driven. compactPresentation cobre detalhe read-only; groupedCommand cobre create/edit.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.persistence\n Category: inputs\n Kind: enum\n Description: Define se sections geradas sao transient ou podem virar layout authorado apos detach explicito.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.",
8756
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8757
+ "contentHash": "418dd77e4d37bcf80ba1fe9c405b691cfc53416dc9364ce400449da2b4749731",
8758
+ "sourceKind": "component_definition",
8759
+ "sourceId": "praxis-dynamic-form",
8760
+ "corpusVersion": "1.0.0"
8761
+ },
8762
+ {
8763
+ "chunkIndex": 11,
8764
+ "chunkKind": "capabilities",
8765
+ "content": "Component Capability:\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.widthPrecedence\n Category: inputs\n Kind: enum\n Description: Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.\n\nComponent Capability:\n - Path: inputs.fieldIconPolicy\n Category: inputs\n Kind: enum\n Description: Controla se icones prefix/suffix dos metadados aparecem em todos os modos, apenas apresentacao, ou nunca.\n\nComponent Capability:\n - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n\nComponent Capability:\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n\nComponent Capability:\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n\nComponent Capability:\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n\nComponent Capability:\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n\nComponent Capability:\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n\nComponent Capability:\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n\nComponent Capability:\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n\nComponent Capability:\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n\nComponent Capability:\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n\nComponent Capability:\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n\nComponent Capability:\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n\nComponent Capability:\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n\nComponent Capability:\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n\nComponent Capability:\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n\nComponent Capability:\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n\nComponent Capability:\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n\nComponent Capability:\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n\nComponent Capability:\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n\nComponent Capability:\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n\nComponent Capability:\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n\nComponent Capability:\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n\nComponent Capability:\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n\nComponent Capability:\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n\nComponent Capability:\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n\nComponent Capability:\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n\nComponent Capability:\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n\nComponent Capability:\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.",
8766
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8767
+ "contentHash": "a8b570c3523646026b9ed80c42c25ab891a056b77ece8f13aff58dd5469bae1e",
8768
+ "sourceKind": "component_definition",
8769
+ "sourceId": "praxis-dynamic-form",
8770
+ "corpusVersion": "1.0.0"
8771
+ },
8772
+ {
8773
+ "chunkIndex": 12,
8774
+ "chunkKind": "capabilities",
8775
+ "content": "Component Capability:\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n\nComponent Capability:\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n\nComponent Capability:\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.\n\nComponent Capability:\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n\nComponent Capability:\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n\nComponent Capability:\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n\nComponent Capability:\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n\nComponent Capability:\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n\nComponent Capability:\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n\nComponent Capability:\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\n\nCapability Note:\n - Este catalogo descreve inputs e outputs do componente.\n\nCapability Note:\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n\nCapability Note:\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n\nCapability Note:\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n\nCapability Note:\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n\nCapability Note:\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.",
8776
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-component-ai-capabilities.ts",
8777
+ "contentHash": "f170eb134e370e2fe148ce677d5ff969edeb7db977c11b298cbefd6c393b4a27",
8778
+ "sourceKind": "component_definition",
8779
+ "sourceId": "praxis-dynamic-form",
8780
+ "corpusVersion": "1.0.0"
8781
+ },
8782
+ {
8783
+ "chunkIndex": 13,
8784
+ "chunkKind": "authoring_manifest",
8785
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"identity\"}",
8786
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8787
+ "contentHash": "9b87db909a9f1436c70294714f19e567b1e83df02c306bba28f6f25f9e8252db",
8788
+ "sourceKind": "component_definition",
8789
+ "sourceId": "praxis-dynamic-form",
8790
+ "corpusVersion": "1.0.0"
8791
+ },
8792
+ {
8793
+ "chunkIndex": 14,
8794
+ "chunkKind": "authoring_manifest",
8795
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"showAiAssistant\",\"type\":\"boolean\",\"description\":\"Mostra os gatilhos do copiloto semantico Praxis\"},{\"name\":\"config\",\"type\":\"FormConfig\",\"description\":\"Configuração do formulário; sections é opcional em forms schema-driven e não deve ser criado como array vazio apenas para satisfazer TypeScript.\"},{\"name\":\"resourcePath\",\"type\":\"string\",\"description\":\"Caminho do recurso (API)\"},{\"name\":\"readUrl\",\"type\":\"string\",\"description\":\"Endpoint canonico de leitura para surfaces VIEW/READ_PROJECTION\"},{\"name\":\"mode\",\"type\":\"string\",\"allowedValues\":[\"create\",\"edit\",\"view\"],\"description\":\"Modo de operação\"},{\"name\":\"generatedLayoutPreset\",\"type\":\"string\",\"allowedValues\":[\"default\",\"compactPresentation\"],\"description\":\"Preset usado apenas ao gerar a configuracao inicial a partir de metadata/schema; nao reprocessa layouts persistidos ou autorados.\"},{\"name\":\"layoutPolicy\",\"type\":\"DynamicFormLayoutPolicy\",\"description\":\"Politica opt-in para layout schema-driven transient. Use source=schema apenas quando o backend schema for a fonte canonica do agrupamento; use detailSummary para seleção de campos e densidade responsiva do resumo read-only compacto sem FormConfig.sections locais. Quando o resumo precisar vencer x-ui.width publicado para outras surfaces, use detailSummary.widthPrecedence=summary.\"},{\"name\":\"fieldIconPolicy\",\"type\":\"string\",\"allowedValues\":[\"all\",\"presentation-only\",\"none\"],\"description\":\"Politica visual do host para icones prefix/suffix de campos vindos da metadata. Use presentation-only para manter icones decorativos em apresentacao e ocultar em controles tradicionais.\"},{\"name\":\"enableCustomization\",\"type\":\"boolean\",\"description\":\"Habilita edição visual\"}]}",
8796
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8797
+ "contentHash": "3a3c68111c47dbf379c8b6fef3d3d2fd5a951ca17d2dd6095d04b7451dc7789b",
8798
+ "sourceKind": "component_definition",
8799
+ "sourceId": "praxis-dynamic-form",
8800
+ "corpusVersion": "1.0.0"
8801
+ },
8802
+ {
8803
+ "chunkIndex": 15,
8804
+ "chunkKind": "authoring_manifest",
8805
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"description\":\"Campos do formulário (metadados schema-backed ou local; use para ops de propriedade)\"},{\"kind\":\"schemaBackedField\",\"resolver\":\"field-by-name-or-label\",\"description\":\"Campos com origem no schema do backend; não removíveis via authoring\"},{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"description\":\"Campos locais com source:\\\"local\\\"; adicionados/removidos via authoring\"},{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"description\":\"Seções de layout identificadas por id estável\"},{\"kind\":\"row\",\"resolver\":\"row-by-id-in-section\",\"description\":\"Linhas dentro de seções, identificadas por id estável\"},{\"kind\":\"column\",\"resolver\":\"column-by-id-in-row\",\"description\":\"Colunas dentro de linhas, identificadas por id estável\"},{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"description\":\"Blocos visuais richContent em sections[].rows[].columns[].items[]; não participam do payload de submissão\"},{\"kind\":\"layoutPlacement\",\"resolver\":\"layout-placement-by-field\",\"description\":\"Posicionamento de campo no layout; target para ops de reposicionamento\"},{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"description\":\"Ações da toolbar (submit, cancel, reset)\"},{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"description\":\"Regras de visibilidade e validação\"},{\"kind\":\"message\",\"resolver\":\"message-by-id\",\"description\":\"Mensagens inline do formulário (info, warning, error); ops em desenvolvimento\"}]}",
8806
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8807
+ "contentHash": "7d8180f5b72dd55ee81f68c27177cbc000c08ecf4aee2a62f96a17bff0ea4f8b",
8808
+ "sourceKind": "component_definition",
8809
+ "sourceId": "praxis-dynamic-form",
8810
+ "corpusVersion": "1.0.0"
8811
+ },
8812
+ {
8813
+ "chunkIndex": 16,
8814
+ "chunkKind": "authoring_manifest",
8815
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"field.label.set\",\"title\":\"Alterar rótulo do campo\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"label\"],\"properties\":{\"label\":{\"type\":\"string\",\"minLength\":1}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].label\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.placeholder.set\",\"title\":\"Alterar placeholder do campo\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"placeholder\"],\"properties\":{\"placeholder\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].placeholder\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.required.set\",\"title\":\"Definir obrigatoriedade\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"required\"],\"properties\":{\"required\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].required\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.readOnly.set\",\"title\":\"Definir campo como somente leitura\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"readOnly\"],\"properties\":{\"readOnly\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].readOnly\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.disabled.set\",\"title\":\"Definir campo como desabilitado\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"disabled\"],\"properties\":{\"disabled\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].disabled\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.hidden.set\",\"title\":\"Definir visibilidade inicial\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"hidden\"],\"properties\":{\"hidden\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\"],\"affectedPaths\":[\"fieldMetadata[].hidden\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.controlType.set\",\"title\":\"Alterar tipo de controle\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"controlType\"],\"properties\":{\"controlType\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"field-exists\",\"control-type-compatible\"],\"affectedPaths\":[\"fieldMetadata[].controlType\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.optionSource.set\",\"title\":\"Definir fonte de opções do campo\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"optionSource\"],\"properties\":{\"optionSource\":{\"type\":\"object\",\"required\":[\"key\",\"type\",\"resourcePath\"],\"properties\":{\"key\":{\"type\":\"string\"},\"type\":{\"enum\":[\"RESOURCE_ENTITY\",\"DISTINCT_DIMENSION\",\"CATEGORICAL_BUCKET\",\"LIGHT_LOOKUP\",\"STATIC_CANONICAL\"]},\"resourcePath\":{\"type\":\"string\"},\"valuePropertyPath\":{\"type\":\"string\"},\"labelPropertyPath\":{\"type\":\"string\"},\"dependsOn\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"dependencyFilterMap\":{\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\"}},\"includeIds\":{\"type\":\"boolean\"},\"capabilities\":{\"type\":\"object\",\"properties\":{\"filter\":{\"type\":\"boolean\"},\"byIds\":{\"type\":\"boolean\"},\"detail\":{\"type\":\"boolean\"},\"create\":{\"type\":\"boolean\"}}},\"display\":{\"type\":\"object\"},\"selectionPolicy\":{\"type\":\"object\"}}}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\",\"option-source-valid\"],\"affectedPaths\":[\"fieldMetadata[].optionSource\"],\"submissionImpact\":\"affects-remote-binding\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"field.local.add\",\"title\":\"Adicionar campo local\",\"scope\":\"global\",\"targetKind\":\"localField\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"name\",\"label\",\"controlType\",\"source\"],\"properties\":{\"name\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"controlType\":{\"type\":\"string\"},\"source\":{\"const\":\"local\",\"description\":\"Obrigatório. Discriminador que distingue campos locais de schema-backed.\"},\"transient\":{\"type\":\"boolean\",\"default\":false,\"description\":\"Se true, o valor não persiste entre navegações.\"},\"submitPolicy\":{\"enum\":[\"omit\",\"include\",\"includeWhenDirty\"],\"default\":\"omit\"}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-name-unique\",\"local-schema-name-no-collision\"],\"affectedPaths\":[\"fieldMetadata[]\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"field.local.remove\",\"title\":\"Remover campo local\",\"scope\":\"field\",\"targetKind\":\"localField\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"remove-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"},{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-field-cleanup\",\"handlerContract\":{\"reads\":[\"fieldMetadata[].name\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"writes\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"identityKeys\":[\"fieldMetadata[].name\",\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.name\"],\"properties\":{\"target.name\":{\"type\":\"string\"}}},\"failureModes\":[\"target-field-not-found\",\"target-field-not-local\",\"layout-reference-conflict\"],\"description\":\"Remove every layout placement that references the removed local field by fieldMetadata[].name.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"field-exists\",\"field-is-local\"],\"affectedPaths\":[\"fieldMetadata[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\",\"target-exists\"]}]}",
8816
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8817
+ "contentHash": "303ff29486849a61c1b509b6c1410fc3416a827fed09cf55d274f365ecebc1bc",
8818
+ "sourceKind": "component_definition",
8819
+ "sourceId": "praxis-dynamic-form",
8820
+ "corpusVersion": "1.0.0"
8821
+ },
8822
+ {
8823
+ "chunkIndex": 17,
8824
+ "chunkKind": "authoring_manifest",
8825
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"field.submitPolicy.set\",\"title\":\"Definir política de submissão do campo\",\"scope\":\"field\",\"targetKind\":\"localField\",\"target\":{\"kind\":\"localField\",\"resolver\":\"field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"submitPolicy\"],\"properties\":{\"submitPolicy\":{\"enum\":[\"omit\",\"include\",\"includeWhenDirty\"]}}},\"effects\":[{\"kind\":\"merge-by-key\",\"path\":\"fieldMetadata[]\",\"key\":\"name\"}],\"validators\":[\"field-exists\",\"field-is-local\",\"editor-round-trip-preserve\"],\"affectedPaths\":[\"fieldMetadata[].submitPolicy\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.section.add\",\"title\":\"Adicionar nova seção\",\"scope\":\"global\",\"targetKind\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"title\"],\"properties\":{\"id\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"collapsible\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"sections[]\",\"key\":\"id\"}],\"validators\":[\"section-id-unique\"],\"affectedPaths\":[\"sections[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"layout.section.remove\",\"title\":\"Remover seção\",\"scope\":\"section\",\"targetKind\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"remove-by-key\",\"path\":\"sections[]\",\"key\":\"id\"},{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-section-cleanup\",\"handlerContract\":{\"reads\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"writes\":[\"sections[]\"],\"identityKeys\":[\"sections[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.id\"],\"properties\":{\"target.id\":{\"type\":\"string\"}}},\"failureModes\":[\"target-section-not-found\",\"ambiguous-section-target\"],\"description\":\"Removes the target section and its nested rows, columns, and field placements without deleting fieldMetadata records.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"section-exists\"],\"affectedPaths\":[\"sections[]\",\"sections[].rows[]\",\"sections[].rows[].columns[]\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.row.add\",\"title\":\"Adicionar linha numa seção\",\"scope\":\"section\",\"targetKind\":\"section\",\"target\":{\"kind\":\"section\",\"resolver\":\"section-by-id-or-title\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\"},\"columns\":{\"type\":\"number\",\"minimum\":1,\"maximum\":12,\"default\":1}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"sections[].rows[]\",\"key\":\"id\"}],\"validators\":[\"section-exists\",\"row-id-unique-in-section\"],\"affectedPaths\":[\"sections[].rows[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.column.add\",\"title\":\"Adicionar coluna numa linha\",\"scope\":\"row\",\"targetKind\":\"row\",\"target\":{\"kind\":\"row\",\"resolver\":\"row-by-id-in-section\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\"],\"properties\":{\"id\":{\"type\":\"string\"},\"span\":{\"type\":\"number\",\"minimum\":1,\"maximum\":12,\"default\":6}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"sections[].rows[].columns[]\",\"key\":\"id\"}],\"validators\":[\"row-exists\",\"column-id-unique-in-row\"],\"affectedPaths\":[\"sections[].rows[].columns[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.field.move\",\"title\":\"Mover campo no layout\",\"scope\":\"field\",\"targetKind\":\"field\",\"target\":{\"kind\":\"field\",\"resolver\":\"field-by-name-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-reconciler\",\"handlerContract\":{\"reads\":[\"fieldMetadata[].name\",\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"writes\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"identityKeys\":[\"fieldMetadata[].name\",\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.name\",\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"target.name\":{\"type\":\"string\"},\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"failureModes\":[\"target-field-not-found\",\"target-layout-location-not-found\",\"ambiguous-field-target\",\"duplicate-field-placement\"],\"description\":\"Moves a field placement by stable section, row, column, and field ids; index is insertion position only.\"}}],\"validators\":[\"field-exists\",\"layout-target-exists\",\"no-index-as-identity\",\"field-exists-in-layout\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\",\"sections[].rows[].columns[].fields\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.visualBlock.add\",\"title\":\"Adicionar bloco visual\",\"scope\":\"column\",\"targetKind\":\"column\",\"target\":{\"kind\":\"column\",\"resolver\":\"column-by-id-in-row\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"document\"],\"properties\":{\"id\":{\"type\":\"string\"},\"document\":{\"type\":\"object\",\"required\":[\"kind\",\"version\",\"nodes\"],\"properties\":{\"kind\":{\"const\":\"praxis.rich-content\"},\"version\":{\"type\":\"string\"},\"nodes\":{\"type\":\"array\"}}},\"layout\":{\"enum\":[\"block\",\"inline\"],\"default\":\"block\"},\"rootClassName\":{\"type\":[\"string\",\"null\"]},\"index\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-visual-block-add\",\"handlerContract\":{\"reads\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items\"],\"writes\":[\"sections[].rows[].columns[].items\"],\"identityKeys\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.sectionId\",\"target.rowId\",\"target.columnId\",\"id\",\"document\"],\"properties\":{\"target.sectionId\":{\"type\":\"string\"},\"target.rowId\":{\"type\":\"string\"},\"target.columnId\":{\"type\":\"string\"},\"id\":{\"type\":\"string\"},\"document\":{\"type\":\"object\"},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"rootClassName\":{\"type\":[\"string\",\"null\"]},\"index\":{\"type\":\"number\"}}},\"failureModes\":[\"target-layout-location-not-found\",\"duplicate-visual-block-id\",\"invalid-rich-content-document\"],\"description\":\"Adds a richContent layout item into sections[].rows[].columns[].items[] by stable section, row, and column ids.\"}}],\"validators\":[\"layout-target-exists\",\"visual-block-id-unique\",\"rich-content-document-valid\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]}]}",
8826
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8827
+ "contentHash": "00f4147198136ee6914770808c98047b839e5a33da8607472a8331d87e7a36a6",
8828
+ "sourceKind": "component_definition",
8829
+ "sourceId": "praxis-dynamic-form",
8830
+ "corpusVersion": "1.0.0"
8831
+ },
8832
+ {
8833
+ "chunkIndex": 18,
8834
+ "chunkKind": "authoring_manifest",
8835
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"layout.visualBlock.update\",\"title\":\"Atualizar bloco visual\",\"scope\":\"layout\",\"targetKind\":\"visualBlock\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"document\":{\"type\":\"object\",\"required\":[\"kind\",\"version\",\"nodes\"],\"properties\":{\"kind\":{\"const\":\"praxis.rich-content\"},\"version\":{\"type\":\"string\"},\"nodes\":{\"type\":\"array\"}}},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"rootClassName\":{\"type\":[\"string\",\"null\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-visual-block-update\",\"handlerContract\":{\"reads\":[\"sections[].rows[].columns[].items[].id\"],\"writes\":[\"sections[].rows[].columns[].items\"],\"identityKeys\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.itemId\"],\"properties\":{\"target.itemId\":{\"type\":\"string\"},\"document\":{\"type\":\"object\"},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"rootClassName\":{\"type\":[\"string\",\"null\"]}}},\"failureModes\":[\"target-visual-block-not-found\",\"invalid-rich-content-document\"],\"description\":\"Updates a richContent layout item by stable layout item id without touching fieldMetadata or form submit payload.\"}}],\"validators\":[\"visual-block-exists\",\"rich-content-document-valid\",\"editor-round-trip-preserve\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.visualBlock.move\",\"title\":\"Mover bloco visual\",\"scope\":\"layout\",\"targetKind\":\"visualBlock\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-visual-block-move\",\"handlerContract\":{\"reads\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"writes\":[\"sections[].rows[].columns[].items\"],\"identityKeys\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.itemId\",\"targetSectionId\",\"targetRowId\",\"targetColumnId\"],\"properties\":{\"target.itemId\":{\"type\":\"string\"},\"targetSectionId\":{\"type\":\"string\"},\"targetRowId\":{\"type\":\"string\"},\"targetColumnId\":{\"type\":\"string\"},\"index\":{\"type\":\"number\"}}},\"failureModes\":[\"target-visual-block-not-found\",\"target-layout-location-not-found\",\"ambiguous-visual-block-target\"],\"description\":\"Moves a richContent layout item by stable item, section, row, and column ids; index is insertion position only.\"}}],\"validators\":[\"visual-block-exists\",\"layout-target-exists\",\"no-index-as-identity\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"layout.visualBlock.remove\",\"title\":\"Remover bloco visual\",\"scope\":\"layout\",\"targetKind\":\"visualBlock\",\"target\":{\"kind\":\"visualBlock\",\"resolver\":\"layout-item-by-id\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"form-layout-visual-block-remove\",\"handlerContract\":{\"reads\":[\"sections[].rows[].columns[].items[].id\"],\"writes\":[\"sections[].rows[].columns[].items\"],\"identityKeys\":[\"sections[].id\",\"sections[].rows[].id\",\"sections[].rows[].columns[].id\",\"sections[].rows[].columns[].items[].id\"],\"inputSchema\":{\"type\":\"object\",\"required\":[\"target.itemId\"],\"properties\":{\"target.itemId\":{\"type\":\"string\"}}},\"failureModes\":[\"target-visual-block-not-found\",\"ambiguous-visual-block-target\"],\"description\":\"Removes a richContent layout item from sections[].rows[].columns[].items[] without touching fieldMetadata or form submit payload.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"visual-block-exists\"],\"affectedPaths\":[\"sections[].rows[].columns[].items\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"rule.visibility.add\",\"title\":\"Adicionar regra de visibilidade\",\"scope\":\"global\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"type\":{\"const\":\"visibility\",\"description\":\"Discriminador de tipo da regra; obrigatório para distinção em formRules[]\"},\"targetType\":{\"enum\":[\"field\",\"section\",\"row\",\"column\",\"action\",\"visualBlock\"],\"default\":\"field\"},\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1},\"condition\":{\"type\":\"object\",\"description\":\"JsonLogic AST. Visual-safe subset: field comparisons with scalar or field operands plus and/or groups. Advanced operators are runtime JSON-only until focused visual round-trip support exists.\"},\"metadata\":{\"type\":\"object\",\"required\":[\"origin\",\"reviewStatus\"],\"properties\":{\"origin\":{\"const\":\"llm\",\"description\":\"Origem obrigatória para regra sugerida por IA.\"},\"reviewStatus\":{\"const\":\"pending\",\"description\":\"Toda regra criada pela IA entra pendente de revisão humana.\"}}}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"validators\":[\"rule-id-unique\",\"rule-target-refs-exist\",\"json-logic-valid\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"rule.validation.add\",\"title\":\"Adicionar regra de validação\",\"scope\":\"global\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"message\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"type\":{\"const\":\"validation\",\"description\":\"Discriminador de tipo da regra; obrigatório para distinção em formRules[]\"},\"targetType\":{\"enum\":[\"field\",\"section\",\"row\",\"column\",\"action\",\"visualBlock\"],\"default\":\"field\"},\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1},\"condition\":{\"type\":\"object\",\"description\":\"JsonLogic AST; quando true, exibe mensagem de erro. Visual-safe subset: field comparisons with scalar or field operands plus and/or groups. Advanced operators are runtime JSON-only until focused visual round-trip support exists.\"},\"message\":{\"type\":\"string\",\"description\":\"Mensagem de erro a exibir ao usuário\"},\"level\":{\"enum\":[\"error\",\"warning\"],\"default\":\"error\"},\"metadata\":{\"type\":\"object\",\"required\":[\"origin\",\"reviewStatus\"],\"properties\":{\"origin\":{\"const\":\"llm\",\"description\":\"Origem obrigatória para regra sugerida por IA.\"},\"reviewStatus\":{\"const\":\"pending\",\"description\":\"Toda regra criada pela IA entra pendente de revisão humana.\"}}}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"validators\":[\"rule-id-unique\",\"rule-target-refs-exist\",\"json-logic-valid\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\"]}]}",
8836
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8837
+ "contentHash": "214915fce646b82e90adfcf29bc3de187224140628f757a0832d717c63ae1115",
8838
+ "sourceKind": "component_definition",
8839
+ "sourceId": "praxis-dynamic-form",
8840
+ "corpusVersion": "1.0.0"
8841
+ },
8842
+ {
8843
+ "chunkIndex": 19,
8844
+ "chunkKind": "authoring_manifest",
8845
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"rule.computedValue.add\",\"title\":\"Adicionar regra de valor calculado\",\"scope\":\"global\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"type\",\"targets\",\"condition\",\"value\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"type\":{\"const\":\"computedValue\",\"description\":\"Discriminador de regra que escreve effect.properties.value em formRules[].\"},\"targetType\":{\"const\":\"field\",\"description\":\"Valor calculado só é materializado em FormControl de campo.\"},\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1},\"condition\":{\"type\":\"object\",\"description\":\"JsonLogic AST; quando true aplica value, quando false aplica valueWhenFalse se informado. Computed expressions are runtime JSON-only unless a focused visual round-trip path exists.\"},\"value\":{\"type\":\"object\",\"description\":\"Envelope obrigatório e fechado: exatamente { expression: <JsonLogic> } para cálculo ou exatamente { literal: <valor> } para valor literal estruturado.\",\"oneOf\":[{\"required\":[\"expression\"],\"not\":{\"required\":[\"literal\"]},\"additionalProperties\":false},{\"required\":[\"literal\"],\"not\":{\"required\":[\"expression\"]},\"additionalProperties\":false}],\"properties\":{\"expression\":{\"type\":\"object\",\"description\":\"JsonLogic AST avaliado contra o contexto do formulário.\"},\"literal\":{\"description\":\"Valor literal, inclusive objeto estruturado.\"}}},\"valueWhenFalse\":{\"type\":\"object\",\"description\":\"Envelope opcional e fechado aplicado no ramo falso. Use exatamente { literal: null } para limpar o valor.\",\"oneOf\":[{\"required\":[\"expression\"],\"not\":{\"required\":[\"literal\"]},\"additionalProperties\":false},{\"required\":[\"literal\"],\"not\":{\"required\":[\"expression\"]},\"additionalProperties\":false}],\"properties\":{\"expression\":{\"type\":\"object\",\"description\":\"JsonLogic AST avaliado contra o contexto do formulário.\"},\"literal\":{\"description\":\"Valor literal, inclusive null.\"}}},\"metadata\":{\"type\":\"object\",\"required\":[\"origin\",\"reviewStatus\"],\"properties\":{\"origin\":{\"const\":\"llm\",\"description\":\"Origem obrigatória para regra sugerida por IA.\"},\"reviewStatus\":{\"const\":\"pending\",\"description\":\"Toda regra criada pela IA entra pendente de revisão humana.\"}}}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"validators\":[\"rule-id-unique\",\"rule-target-refs-exist\",\"json-logic-valid\",\"computed-value-envelope-valid\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"rule.visualBlockGuidance.add\",\"title\":\"Materializar orientação visual derivada\",\"scope\":\"global\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"id\",\"type\",\"targetType\",\"targets\",\"condition\",\"properties\",\"metadata\"],\"properties\":{\"id\":{\"type\":\"string\"},\"name\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"type\":{\"const\":\"visualBlockGuidance\",\"description\":\"Discriminador para regra de orientação visual derivada em formRules[].\"},\"targetType\":{\"const\":\"visualBlock\",\"description\":\"Projeções visuais sempre apontam para richContent layout items e não representam a decisão canônica.\"},\"context\":{\"enum\":[\"notification\",\"style\"],\"default\":\"notification\"},\"targets\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"minItems\":1},\"condition\":{\"type\":\"object\",\"description\":\"JsonLogic AST; quando true aplica properties, quando false aplica propertiesWhenFalse. Visual-safe subset: field comparisons with scalar or field operands plus and/or groups. Advanced operators are runtime JSON-only until focused visual round-trip support exists.\"},\"properties\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"visible\":{\"type\":\"boolean\"},\"hidden\":{\"type\":\"boolean\"},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"className\":{\"type\":\"string\"},\"rootClassName\":{\"type\":\"string\"},\"style\":{\"type\":\"object\"},\"text\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"message\":{\"type\":\"string\"},\"textNodeId\":{\"type\":\"string\"},\"titleNodeId\":{\"type\":\"string\"},\"messageNodeId\":{\"type\":\"string\"}},\"description\":\"Use apenas propriedades suportadas por RULE_PROPERTY_SCHEMA.visualBlock; não escreva document, HTML, handlers, dados de payload ou regra de negócio canônica.\"},\"propertiesWhenFalse\":{\"type\":\"object\",\"properties\":{\"visible\":{\"type\":\"boolean\"},\"hidden\":{\"type\":\"boolean\"},\"layout\":{\"enum\":[\"block\",\"inline\"]},\"className\":{\"type\":\"string\"},\"rootClassName\":{\"type\":\"string\"},\"style\":{\"type\":\"object\"},\"text\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"message\":{\"type\":\"string\"},\"textNodeId\":{\"type\":\"string\"},\"titleNodeId\":{\"type\":\"string\"},\"messageNodeId\":{\"type\":\"string\"}}},\"metadata\":{\"type\":\"object\",\"required\":[\"origin\",\"reviewStatus\"],\"properties\":{\"origin\":{\"const\":\"llm\",\"description\":\"Origem obrigatória para regra sugerida por IA.\"},\"reviewStatus\":{\"const\":\"pending\",\"description\":\"Toda regra criada pela IA entra pendente de revisão humana.\"}}}}},\"effects\":[{\"kind\":\"append-unique\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"validators\":[\"rule-id-unique\",\"visual-block-exists\",\"json-logic-valid\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"rule.remove\",\"title\":\"Remover regra\",\"scope\":\"rule\",\"targetKind\":\"formRule\",\"target\":{\"kind\":\"formRule\",\"resolver\":\"rule-by-id-or-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"properties\":{}},\"effects\":[{\"kind\":\"remove-by-key\",\"path\":\"formRules[]\",\"key\":\"id\"}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"rule-exists\"],\"affectedPaths\":[\"formRules[]\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"config-initialized\",\"target-exists\"]},{\"operationId\":\"action.submit.configure\",\"title\":\"Configurar botão de envio\",\"scope\":\"global\",\"targetKind\":\"formAction\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"visible\":{\"type\":\"boolean\"},\"color\":{\"enum\":[\"primary\",\"accent\",\"warn\",\"basic\"]}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"actions.submit\"}],\"validators\":[\"editor-round-trip-preserve\"],\"affectedPaths\":[\"actions.submit\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"config-initialized\"]},{\"operationId\":\"action.cancel.configure\",\"title\":\"Configurar botão de cancelar\",\"scope\":\"global\",\"targetKind\":\"formAction\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"visible\":{\"type\":\"boolean\"},\"color\":{\"enum\":[\"primary\",\"accent\",\"warn\",\"basic\"]},\"navigateTo\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"actions.cancel\"}],\"validators\":[\"editor-round-trip-preserve\"],\"affectedPaths\":[\"actions.cancel\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]}]}",
8846
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8847
+ "contentHash": "db95bed57633dfdc895ba3cee1d86e65f999ed0eb9ca3e9f830bb4f8b36bfc5c",
8848
+ "sourceKind": "component_definition",
8849
+ "sourceId": "praxis-dynamic-form",
8850
+ "corpusVersion": "1.0.0"
8851
+ },
8852
+ {
8853
+ "chunkIndex": 20,
8854
+ "chunkKind": "authoring_manifest",
8855
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"action.reset.configure\",\"title\":\"Configurar botão de reset\",\"scope\":\"global\",\"targetKind\":\"formAction\",\"target\":{\"kind\":\"formAction\",\"resolver\":\"action-by-id-or-label\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"label\":{\"type\":\"string\"},\"icon\":{\"type\":\"string\"},\"visible\":{\"type\":\"boolean\"},\"color\":{\"enum\":[\"primary\",\"accent\",\"warn\",\"basic\"]},\"confirmBeforeReset\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"merge-object\",\"path\":\"actions.reset\"}],\"validators\":[\"editor-round-trip-preserve\"],\"affectedPaths\":[\"actions.reset\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"config-initialized\"]}]}",
8856
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8857
+ "contentHash": "793df38d50e22391a84ffb79af38bd267b95d17a4c91e528ea4a4f825a7650b9",
8858
+ "sourceKind": "component_definition",
8859
+ "sourceId": "praxis-dynamic-form",
8860
+ "corpusVersion": "1.0.0"
8861
+ },
8862
+ {
8863
+ "chunkIndex": 21,
8864
+ "chunkKind": "authoring_manifest",
8865
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"field-exists\",\"level\":\"error\",\"code\":\"DF001\",\"description\":\"O campo alvo deve existir em fieldMetadata.\"},{\"validatorId\":\"field-name-unique\",\"level\":\"error\",\"code\":\"DF002\",\"description\":\"Nomes de campos devem ser únicos em fieldMetadata.\"},{\"validatorId\":\"section-id-unique\",\"level\":\"error\",\"code\":\"DF003\",\"description\":\"IDs de seções devem ser únicos em sections[].\"},{\"validatorId\":\"section-exists\",\"level\":\"error\",\"code\":\"DF004\",\"description\":\"A seção alvo deve existir em sections[].\"},{\"validatorId\":\"field-exists-in-layout\",\"level\":\"warning\",\"code\":\"DF005\",\"description\":\"Campo definido em fieldMetadata mas ausente no layout.\"},{\"validatorId\":\"local-schema-name-no-collision\",\"level\":\"error\",\"code\":\"DF006\",\"description\":\"Nome de campo local não pode colidir com campo schema-backed existente.\"},{\"validatorId\":\"field-is-local\",\"level\":\"error\",\"code\":\"DF007\",\"description\":\"Operação restrita a campos locais (source:\\\"local\\\"). Campo schema-backed não pode ser removido ou ter submitPolicy alterada.\"},{\"validatorId\":\"rule-id-unique\",\"level\":\"error\",\"code\":\"DF008\",\"description\":\"IDs de regras devem ser únicos em formRules[].\"},{\"validatorId\":\"rule-exists\",\"level\":\"error\",\"code\":\"DF009\",\"description\":\"A regra alvo deve existir em formRules[].\"},{\"validatorId\":\"rule-target-refs-exist\",\"level\":\"error\",\"code\":\"DF010\",\"description\":\"Todos os targets da regra devem referenciar campos, seções, ações ou blocos visuais existentes.\"},{\"validatorId\":\"computed-value-envelope-valid\",\"level\":\"error\",\"code\":\"DF023\",\"description\":\"Valores calculados devem usar envelope explícito e fechado, exatamente { expression: <JsonLogic> } ou exatamente { literal: <valor> }; objetos literais sem envelope ou envelopes com chaves extras são ambíguos.\"},{\"validatorId\":\"json-logic-valid\",\"level\":\"error\",\"code\":\"DF011\",\"description\":\"A expressão JsonLogic deve ser um AST válido (suporte canônico à spec JsonLogic).\"},{\"validatorId\":\"layout-target-exists\",\"level\":\"error\",\"code\":\"DF012\",\"description\":\"A seção/linha/coluna de destino devem existir antes de mover o campo.\"},{\"validatorId\":\"no-index-as-identity\",\"level\":\"error\",\"code\":\"DF013\",\"description\":\"Operações de layout não devem usar índice de array como identidade canônica; use IDs estáveis.\"},{\"validatorId\":\"row-exists\",\"level\":\"error\",\"code\":\"DF014\",\"description\":\"A linha alvo deve existir na seção especificada.\"},{\"validatorId\":\"row-id-unique-in-section\",\"level\":\"error\",\"code\":\"DF015\",\"description\":\"O id da nova linha deve ser único dentro da seção alvo.\"},{\"validatorId\":\"column-id-unique-in-row\",\"level\":\"error\",\"code\":\"DF016\",\"description\":\"O id da nova coluna deve ser único dentro da linha alvo.\"},{\"validatorId\":\"control-type-compatible\",\"level\":\"error\",\"code\":\"DF017\",\"description\":\"O tipo de controle deve ser compatível com o tipo de dado do campo.\"},{\"validatorId\":\"option-source-valid\",\"level\":\"error\",\"code\":\"DF018\",\"description\":\"A fonte de opções deve ser válida para o tipo de controle especificado.\"},{\"validatorId\":\"editor-round-trip-preserve\",\"level\":\"error\",\"code\":\"DF019\",\"description\":\"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"},{\"validatorId\":\"visual-block-exists\",\"level\":\"error\",\"code\":\"DF020\",\"description\":\"O bloco visual alvo deve existir como item kind:\\\"richContent\\\" em sections[].rows[].columns[].items[].\"},{\"validatorId\":\"visual-block-id-unique\",\"level\":\"error\",\"code\":\"DF021\",\"description\":\"IDs de blocos visuais devem ser unicos entre os itens de layout do formulario.\"},{\"validatorId\":\"rich-content-document-valid\",\"level\":\"error\",\"code\":\"DF022\",\"description\":\"O document do bloco visual deve seguir o contrato RichContentDocument canonico.\"}]}",
8866
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8867
+ "contentHash": "69329b63e8a8ee30ed74893c3e950e87f34957a945989b7cae4a72c1a1bd6047",
8868
+ "sourceKind": "component_definition",
8869
+ "sourceId": "praxis-dynamic-form",
8870
+ "corpusVersion": "1.0.0"
8871
+ },
8872
+ {
8873
+ "chunkIndex": 22,
8874
+ "chunkKind": "authoring_manifest",
8875
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"strip-undefined\",\"normalize-json-logic\",\"stable-field-order\",\"preserve-column-layout-items\",\"preserve-local-field-source\",\"preserve-section-row-column-ids\"]}",
8876
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8877
+ "contentHash": "e7164e2e190a2324020f918879e0070e6d0ee59a77497dc9dca831708315b087",
8878
+ "sourceKind": "component_definition",
8879
+ "sourceId": "praxis-dynamic-form",
8880
+ "corpusVersion": "1.0.0"
8881
+ },
8882
+ {
8883
+ "chunkIndex": 23,
8674
8884
  "chunkKind": "authoring_manifest",
8675
- "content": "{\n \"schemaVersion\": \"1.0.0\",\n \"componentId\": \"praxis-dynamic-form\",\n \"ownerPackage\": \"@praxisui/dynamic-form\",\n \"configSchemaId\": \"FormConfig\",\n \"manifestVersion\": \"1.5.0\",\n \"runtimeInputs\": [\n {\n \"name\": \"showAiAssistant\",\n \"type\": \"boolean\",\n \"description\": \"Mostra os gatilhos do copiloto semantico Praxis\"\n },\n {\n \"name\": \"config\",\n \"type\": \"FormConfig\",\n \"description\": \"Configuração do formulário; sections é opcional em forms schema-driven e não deve ser criado como array vazio apenas para satisfazer TypeScript.\"\n },\n {\n \"name\": \"resourcePath\",\n \"type\": \"string\",\n \"description\": \"Caminho do recurso (API)\"\n },\n {\n \"name\": \"readUrl\",\n \"type\": \"string\",\n \"description\": \"Endpoint canonico de leitura para surfaces VIEW/READ_PROJECTION\"\n },\n {\n \"name\": \"mode\",\n \"type\": \"string\",\n \"allowedValues\": [\n \"create\",\n \"edit\",\n \"view\"\n ],\n \"description\": \"Modo de operação\"\n },\n {\n \"name\": \"generatedLayoutPreset\",\n \"type\": \"string\",\n \"allowedValues\": [\n \"default\",\n \"compactPresentation\"\n ],\n \"description\": \"Preset usado apenas ao gerar a configuracao inicial a partir de metadata/schema; nao reprocessa layouts persistidos ou autorados.\"\n },\n {\n \"name\": \"layoutPolicy\",\n \"type\": \"DynamicFormLayoutPolicy\",\n \"description\": \"Politica opt-in para layout schema-driven transient. Use source=schema apenas quando o backend schema for a fonte canonica do agrupamento; use detailSummary para seleção de campos e densidade responsiva do resumo read-only compacto sem FormConfig.sections locais. Quando o resumo precisar vencer x-ui.width publicado para outras surfaces, use detailSummary.widthPrecedence=summary.\"\n },\n {\n \"name\": \"fieldIconPolicy\",\n \"type\": \"string\",\n \"allowedValues\": [\n \"all\",\n \"presentation-only\",\n \"none\"\n ],\n \"description\": \"Politica visual do host para icones prefix/suffix de campos vindos da metadata. Use presentation-only para manter icones decorativos em apresentacao e ocultar em controles tradicionais.\"\n },\n {\n \"name\": \"enableCustomization\",\n \"type\": \"boolean\",\n \"description\": \"Habilita edição visual\"\n }\n ],\n \"editableTargets\": [\n {\n \"kind\": \"field\",\n \"resolver\": \"field-by-name-or-label\",\n \"description\": \"Campos do formulário (metadados schema-backed ou local; use para ops de propriedade)\"\n },\n {\n \"kind\": \"schemaBackedField\",\n \"resolver\": \"field-by-name-or-label\",\n \"description\": \"Campos com origem no schema do backend; não removíveis via authoring\"\n },\n {\n \"kind\": \"localField\",\n \"resolver\": \"field-by-name\",\n \"description\": \"Campos locais com source:\\\"local\\\"; adicionados/removidos via authoring\"\n },\n {\n \"kind\": \"section\",\n \"resolver\": \"section-by-id-or-title\",\n \"description\": \"Seções de layout identificadas por id estável\"\n },\n {\n \"kind\": \"row\",\n \"resolver\": \"row-by-id-in-section\",\n \"description\": \"Linhas dentro de seções, identificadas por id estável\"\n },\n {\n \"kind\": \"column\",\n \"resolver\": \"column-by-id-in-row\",\n \"description\": \"Colunas dentro de linhas, identificadas por id estável\"\n },\n {\n \"kind\": \"visualBlock\",\n \"resolver\": \"layout-item-by-id\",\n \"description\": \"Blocos visuais richContent em sections[].rows[].columns[].items[]; não participam do payload de submissão\"\n },\n {\n \"kind\": \"layoutPlacement\",\n \"resolver\": \"layout-placement-by-field\",\n \"description\": \"Posicionamento de campo no layout; target para ops de reposicionamento\"\n },\n {\n \"kind\": \"formAction\",\n \"resolver\": \"action-by-id-or-label\",\n \"description\": \"Ações da toolbar (submit, cancel, reset)\"\n },\n {\n \"kind\": \"formRule\",\n \"resolver\": \"rule-by-id-or-name\",\n \"description\": \"Regras de visibilidade e validação\"\n },\n {\n \"kind\": \"message\",\n \"resolver\": \"message-by-id\",\n \"description\": \"Mensagens inline do formulário (info, warning, error); ops em desenvolvimento\"\n }\n ],\n \"operations\": [\n {\n \"operationId\": \"field.label.set\",\n \"title\": \"Alterar rótulo do campo\",\n \"scope\": \"field\",\n \"targetKind\": \"field\",\n \"target\": {\n \"kind\": \"field\",\n \"resolver\": \"field-by-name-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"label\"\n ],\n \"properties\": {\n \"label\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"fieldMetadata[]\",\n \"key\": \"name\"\n }\n ],\n \"validators\": [\n \"field-exists\"\n ],\n \"affectedPaths\": [\n \"fieldMetadata[].label\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"field.placeholder.set\",\n \"title\": \"Alterar placeholder do campo\",\n \"scope\": \"field\",\n \"targetKind\": \"field\",\n \"target\": {\n \"kind\": \"field\",\n \"resolver\": \"field-by-name-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"placeholder\"\n ],\n \"properties\": {\n \"placeholder\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"fieldMetadata[]\",\n \"key\": \"name\"\n }\n ],\n \"validators\": [\n \"field-exists\"\n ],\n \"affectedPaths\": [\n \"fieldMetadata[].placeholder\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"field.required.set\",\n \"title\": \"Definir obrigatoriedade\",\n \"scope\": \"field\",\n \"targetKind\": \"field\",\n \"target\": {\n \"kind\": \"field\",\n \"resolver\": \"field-by-name-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"required\"\n ],\n \"properties\": {\n \"required\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"fieldMetadata[]\",\n \"key\": \"name\"\n }\n ],\n \"validators\": [\n \"field-exists\"\n ],\n \"affectedPaths\": [\n \"fieldMetadata[].required\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"field.readOnly.set\",\n \"title\": \"Definir campo como somente leitura\",\n \"scope\": \"field\",\n \"targetKind\": \"field\",\n \"target\": {\n \"kind\": \"field\",\n \"resolver\": \"field-by-name-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"readOnly\"\n ],\n \"properties\": {\n \"readOnly\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"fieldMetadata[]\",\n \"key\": \"name\"\n }\n ],\n \"validators\": [\n \"field-exists\"\n ],\n \"affectedPaths\": [\n \"fieldMetadata[].readOnly\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"field.disabled.set\",\n \"title\": \"Definir campo como desabilitado\",\n \"scope\": \"field\",\n \"targetKind\": \"field\",\n \"target\": {\n \"kind\": \"field\",\n \"resolver\": \"field-by-name-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"disabled\"\n ],\n \"properties\": {\n \"disabled\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"fieldMetadata[]\",\n \"key\": \"name\"\n }\n ],\n \"validators\": [\n \"field-exists\"\n ],\n \"affectedPaths\": [\n \"fieldMetadata[].disabled\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"field.hidden.set\",\n \"title\": \"Definir visibilidade inicial\",\n \"scope\": \"field\",\n \"targetKind\": \"field\",\n \"target\": {\n \"kind\": \"field\",\n \"resolver\": \"field-by-name-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"hidden\"\n ],\n \"properties\": {\n \"hidden\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"fieldMetadata[]\",\n \"key\": \"name\"\n }\n ],\n \"validators\": [\n \"field-exists\"\n ],\n \"affectedPaths\": [\n \"fieldMetadata[].hidden\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"field.controlType.set\",\n \"title\": \"Alterar tipo de controle\",\n \"scope\": \"field\",\n \"targetKind\": \"field\",\n \"target\": {\n \"kind\": \"field\",\n \"resolver\": \"field-by-name-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"controlType\"\n ],\n \"properties\": {\n \"controlType\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"fieldMetadata[]\",\n \"key\": \"name\"\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"field-exists\",\n \"control-type-compatible\"\n ],\n \"affectedPaths\": [\n \"fieldMetadata[].controlType\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"field.optionSource.set\",\n \"title\": \"Definir fonte de opções do campo\",\n \"scope\": \"field\",\n \"targetKind\": \"field\",\n \"target\": {\n \"kind\": \"field\",\n \"resolver\": \"field-by-name-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"optionSource\"\n ],\n \"properties\": {\n \"optionSource\": {\n \"type\": \"object\",\n \"required\": [\n \"key\",\n \"type\",\n \"resourcePath\"\n ],\n \"properties\": {\n \"key\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"enum\": [\n \"RESOURCE_ENTITY\",\n \"DISTINCT_DIMENSION\",\n \"CATEGORICAL_BUCKET\",\n \"LIGHT_LOOKUP\",\n \"STATIC_CANONICAL\"\n ]\n },\n \"resourcePath\": {\n \"type\": \"string\"\n },\n \"valuePropertyPath\": {\n \"type\": \"string\"\n },\n \"labelPropertyPath\": {\n \"type\": \"string\"\n },\n \"dependsOn\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"dependencyFilterMap\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"includeIds\": {\n \"type\": \"boolean\"\n },\n \"capabilities\": {\n \"type\": \"object\",\n \"properties\": {\n \"filter\": {\n \"type\": \"boolean\"\n },\n \"byIds\": {\n \"type\": \"boolean\"\n },\n \"detail\": {\n \"type\": \"boolean\"\n },\n \"create\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"display\": {\n \"type\": \"object\"\n },\n \"selectionPolicy\": {\n \"type\": \"object\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"fieldMetadata[]\",\n \"key\": \"name\"\n }\n ],\n \"validators\": [\n \"field-exists\",\n \"option-source-valid\"\n ],\n \"affectedPaths\": [\n \"fieldMetadata[].optionSource\"\n ],\n \"submissionImpact\": \"affects-remote-binding\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"field.local.add\",\n \"title\": \"Adicionar campo local\",\n \"scope\": \"global\",\n \"targetKind\": \"localField\",\n \"target\": {\n \"kind\": \"localField\",\n \"resolver\": \"field-by-name\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"name\",\n \"label\",\n \"controlType\",\n \"source\"\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"controlType\": {\n \"type\": \"string\"\n },\n \"source\": {\n \"const\": \"local\",\n \"description\": \"Obrigatório. Discriminador que distingue campos locais de schema-backed.\"\n },\n \"transient\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Se true, o valor não persiste entre navegações.\"\n },\n \"submitPolicy\": {\n \"enum\": [\n \"omit\",\n \"include\",\n \"includeWhenDirty\"\n ],\n \"default\": \"omit\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"fieldMetadata[]\",\n \"key\": \"name\"\n }\n ],\n \"validators\": [\n \"field-name-unique\",\n \"local-schema-name-no-collision\"\n ],\n \"affectedPaths\": [\n \"fieldMetadata[]\"\n ],\n \"submissionImpact\": \"affects-submission\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"field.local.remove\",\n \"title\": \"Remover campo local\",\n \"scope\": \"field\",\n \"targetKind\": \"localField\",\n \"target\": {\n \"kind\": \"localField\",\n \"resolver\": \"field-by-name\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {}\n },\n \"effects\": [\n {\n \"kind\": \"remove-by-key\",\n \"path\": \"fieldMetadata[]\",\n \"key\": \"name\"\n },\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"form-layout-field-cleanup\",\n \"handlerContract\": {\n \"reads\": [\n \"fieldMetadata[].name\",\n \"sections[].rows[].columns[].items\",\n \"sections[].rows[].columns[].fields\"\n ],\n \"writes\": [\n \"sections[].rows[].columns[].items\",\n \"sections[].rows[].columns[].fields\"\n ],\n \"identityKeys\": [\n \"fieldMetadata[].name\",\n \"sections[].id\",\n \"sections[].rows[].id\",\n \"sections[].rows[].columns[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"target.name\"\n ],\n \"properties\": {\n \"target.name\": {\n \"type\": \"string\"\n }\n }\n },\n \"failureModes\": [\n \"target-field-not-found\",\n \"target-field-not-local\",\n \"layout-reference-conflict\"\n ],\n \"description\": \"Remove every layout placement that references the removed local field by fieldMetadata[].name.\"\n }\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"field-exists\",\n \"field-is-local\"\n ],\n \"affectedPaths\": [\n \"fieldMetadata[]\",\n \"sections[].rows[].columns[].items\",\n \"sections[].rows[].columns[].fields\"\n ],\n \"submissionImpact\": \"affects-submission\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"field.submitPolicy.set\",\n \"title\": \"Definir política de submissão do campo\",\n \"scope\": \"field\",\n \"targetKind\": \"localField\",\n \"target\": {\n \"kind\": \"localField\",\n \"resolver\": \"field-by-name\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"submitPolicy\"\n ],\n \"properties\": {\n \"submitPolicy\": {\n \"enum\": [\n \"omit\",\n \"include\",\n \"includeWhenDirty\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"fieldMetadata[]\",\n \"key\": \"name\"\n }\n ],\n \"validators\": [\n \"field-exists\",\n \"field-is-local\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"fieldMetadata[].submitPolicy\"\n ],\n \"submissionImpact\": \"affects-submission\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"layout.section.add\",\n \"title\": \"Adicionar nova seção\",\n \"scope\": \"global\",\n \"targetKind\": \"section\",\n \"target\": {\n \"kind\": \"section\",\n \"resolver\": \"section-by-id-or-title\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"title\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"collapsible\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"sections[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"section-id-unique\"\n ],\n \"affectedPaths\": [\n \"sections[]\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"layout.section.remove\",\n \"title\": \"Remover seção\",\n \"scope\": \"section\",\n \"targetKind\": \"section\",\n \"target\": {\n \"kind\": \"section\",\n \"resolver\": \"section-by-id-or-title\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {}\n },\n \"effects\": [\n {\n \"kind\": \"remove-by-key\",\n \"path\": \"sections[]\",\n \"key\": \"id\"\n },\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"form-layout-section-cleanup\",\n \"handlerContract\": {\n \"reads\": [\n \"sections[].id\",\n \"sections[].rows[].id\",\n \"sections[].rows[].columns[].id\",\n \"sections[].rows[].columns[].items\",\n \"sections[].rows[].columns[].fields\"\n ],\n \"writes\": [\n \"sections[]\"\n ],\n \"identityKeys\": [\n \"sections[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"target.id\"\n ],\n \"properties\": {\n \"target.id\": {\n \"type\": \"string\"\n }\n }\n },\n \"failureModes\": [\n \"target-section-not-found\",\n \"ambiguous-section-target\"\n ],\n \"description\": \"Removes the target section and its nested rows, columns, and field placements without deleting fieldMetadata records.\"\n }\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"section-exists\"\n ],\n \"affectedPaths\": [\n \"sections[]\",\n \"sections[].rows[]\",\n \"sections[].rows[].columns[]\",\n \"sections[].rows[].columns[].items\",\n \"sections[].rows[].columns[].fields\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"layout.row.add\",\n \"title\": \"Adicionar linha numa seção\",\n \"scope\": \"section\",\n \"targetKind\": \"section\",\n \"target\": {\n \"kind\": \"section\",\n \"resolver\": \"section-by-id-or-title\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"columns\": {\n \"type\": \"number\",\n \"minimum\": 1,\n \"maximum\": 12,\n \"default\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"sections[].rows[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"section-exists\",\n \"row-id-unique-in-section\"\n ],\n \"affectedPaths\": [\n \"sections[].rows[]\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"layout.column.add\",\n \"title\": \"Adicionar coluna numa linha\",\n \"scope\": \"row\",\n \"targetKind\": \"row\",\n \"target\": {\n \"kind\": \"row\",\n \"resolver\": \"row-by-id-in-section\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"span\": {\n \"type\": \"number\",\n \"minimum\": 1,\n \"maximum\": 12,\n \"default\": 6\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"sections[].rows[].columns[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"row-exists\",\n \"column-id-unique-in-row\"\n ],\n \"affectedPaths\": [\n \"sections[].rows[].columns[]\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"layout.field.move\",\n \"title\": \"Mover campo no layout\",\n \"scope\": \"field\",\n \"targetKind\": \"field\",\n \"target\": {\n \"kind\": \"field\",\n \"resolver\": \"field-by-name-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"targetSectionId\",\n \"targetRowId\",\n \"targetColumnId\"\n ],\n \"properties\": {\n \"targetSectionId\": {\n \"type\": \"string\"\n },\n \"targetRowId\": {\n \"type\": \"string\"\n },\n \"targetColumnId\": {\n \"type\": \"string\"\n },\n \"index\": {\n \"type\": \"number\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"form-layout-reconciler\",\n \"handlerContract\": {\n \"reads\": [\n \"fieldMetadata[].name\",\n \"sections[].id\",\n \"sections[].rows[].id\",\n \"sections[].rows[].columns[].id\",\n \"sections[].rows[].columns[].items\",\n \"sections[].rows[].columns[].fields\"\n ],\n \"writes\": [\n \"sections[].rows[].columns[].items\",\n \"sections[].rows[].columns[].fields\"\n ],\n \"identityKeys\": [\n \"fieldMetadata[].name\",\n \"sections[].id\",\n \"sections[].rows[].id\",\n \"sections[].rows[].columns[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"target.name\",\n \"targetSectionId\",\n \"targetRowId\",\n \"targetColumnId\"\n ],\n \"properties\": {\n \"target.name\": {\n \"type\": \"string\"\n },\n \"targetSectionId\": {\n \"type\": \"string\"\n },\n \"targetRowId\": {\n \"type\": \"string\"\n },\n \"targetColumnId\": {\n \"type\": \"string\"\n },\n \"index\": {\n \"type\": \"number\"\n }\n }\n },\n \"failureModes\": [\n \"target-field-not-found\",\n \"target-layout-location-not-found\",\n \"ambiguous-field-target\",\n \"duplicate-field-placement\"\n ],\n \"description\": \"Moves a field placement by stable section, row, column, and field ids; index is insertion position only.\"\n }\n }\n ],\n \"validators\": [\n \"field-exists\",\n \"layout-target-exists\",\n \"no-index-as-identity\",\n \"field-exists-in-layout\"\n ],\n \"affectedPaths\": [\n \"sections[].rows[].columns[].items\",\n \"sections[].rows[].columns[].fields\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"layout.visualBlock.add\",\n \"title\": \"Adicionar bloco visual\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-id-in-row\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"document\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"document\": {\n \"type\": \"object\",\n \"required\": [\n \"kind\",\n \"version\",\n \"nodes\"\n ],\n \"properties\": {\n \"kind\": {\n \"const\": \"praxis.rich-content\"\n },\n \"version\": {\n \"type\": \"string\"\n },\n \"nodes\": {\n \"type\": \"array\"\n }\n }\n },\n \"layout\": {\n \"enum\": [\n \"block\",\n \"inline\"\n ],\n \"default\": \"block\"\n },\n \"rootClassName\": {\n \"type\": [\n \"string\",\n \"null\"\n ]\n },\n \"index\": {\n \"type\": \"number\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"form-layout-visual-block-add\",\n \"handlerContract\": {\n \"reads\": [\n \"sections[].id\",\n \"sections[].rows[].id\",\n \"sections[].rows[].columns[].id\",\n \"sections[].rows[].columns[].items\"\n ],\n \"writes\": [\n \"sections[].rows[].columns[].items\"\n ],\n \"identityKeys\": [\n \"sections[].id\",\n \"sections[].rows[].id\",\n \"sections[].rows[].columns[].id\",\n \"sections[].rows[].columns[].items[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"target.sectionId\",\n \"target.rowId\",\n \"target.columnId\",\n \"id\",\n \"document\"\n ],\n \"properties\": {\n \"target.sectionId\": {\n \"type\": \"string\"\n },\n \"target.rowId\": {\n \"type\": \"string\"\n },\n \"target.columnId\": {\n \"type\": \"string\"\n },\n \"id\": {\n \"type\": \"string\"\n },\n \"document\": {\n \"type\": \"object\"\n },\n \"layout\": {\n \"enum\": [\n \"block\",\n \"inline\"\n ]\n },\n \"rootClassName\": {\n \"type\": [\n \"string\",\n \"null\"\n ]\n },\n \"index\": {\n \"type\": \"number\"\n }\n }\n },\n \"failureModes\": [\n \"target-layout-location-not-found\",\n \"duplicate-visual-block-id\",\n \"invalid-rich-content-document\"\n ],\n \"description\": \"Adds a richContent layout item into sections[].rows[].columns[].items[] by stable section, row, and column ids.\"\n }\n }\n ],\n \"validators\": [\n \"layout-target-exists\",\n \"visual-block-id-unique\",\n \"rich-content-document-valid\"\n ],\n \"affectedPaths\": [\n \"sections[].rows[].columns[].items\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"layout.visualBlock.update\",\n \"title\": \"Atualizar bloco visual\",\n \"scope\": \"layout\",\n \"targetKind\": \"visualBlock\",\n \"target\": {\n \"kind\": \"visualBlock\",\n \"resolver\": \"layout-item-by-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"document\": {\n \"type\": \"object\",\n \"required\": [\n \"kind\",\n \"version\",\n \"nodes\"\n ],\n \"properties\": {\n \"kind\": {\n \"const\": \"praxis.rich-content\"\n },\n \"version\": {\n \"type\": \"string\"\n },\n \"nodes\": {\n \"type\": \"array\"\n }\n }\n },\n \"layout\": {\n \"enum\": [\n \"block\",\n \"inline\"\n ]\n },\n \"rootClassName\": {\n \"type\": [\n \"string\",\n \"null\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"form-layout-visual-block-update\",\n \"handlerContract\": {\n \"reads\": [\n \"sections[].rows[].columns[].items[].id\"\n ],\n \"writes\": [\n \"sections[].rows[].columns[].items\"\n ],\n \"identityKeys\": [\n \"sections[].id\",\n \"sections[].rows[].id\",\n \"sections[].rows[].columns[].id\",\n \"sections[].rows[].columns[].items[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"target.itemId\"\n ],\n \"properties\": {\n \"target.itemId\": {\n \"type\": \"string\"\n },\n \"document\": {\n \"type\": \"object\"\n },\n \"layout\": {\n \"enum\": [\n \"block\",\n \"inline\"\n ]\n },\n \"rootClassName\": {\n \"type\": [\n \"string\",\n \"null\"\n ]\n }\n }\n },\n \"failureModes\": [\n \"target-visual-block-not-found\",\n \"invalid-rich-content-document\"\n ],\n \"description\": \"Updates a richContent layout item by stable layout item id without touching fieldMetadata or form submit payload.\"\n }\n }\n ],\n \"validators\": [\n \"visual-block-exists\",\n \"rich-content-document-valid\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"sections[].rows[].columns[].items\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"layout.visualBlock.move\",\n \"title\": \"Mover bloco visual\",\n \"scope\": \"layout\",\n \"targetKind\": \"visualBlock\",\n \"target\": {\n \"kind\": \"visualBlock\",\n \"resolver\": \"layout-item-by-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"targetSectionId\",\n \"targetRowId\",\n \"targetColumnId\"\n ],\n \"properties\": {\n \"targetSectionId\": {\n \"type\": \"string\"\n },\n \"targetRowId\": {\n \"type\": \"string\"\n },\n \"targetColumnId\": {\n \"type\": \"string\"\n },\n \"index\": {\n \"type\": \"number\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"form-layout-visual-block-move\",\n \"handlerContract\": {\n \"reads\": [\n \"sections[].id\",\n \"sections[].rows[].id\",\n \"sections[].rows[].columns[].id\",\n \"sections[].rows[].columns[].items[].id\"\n ],\n \"writes\": [\n \"sections[].rows[].columns[].items\"\n ],\n \"identityKeys\": [\n \"sections[].id\",\n \"sections[].rows[].id\",\n \"sections[].rows[].columns[].id\",\n \"sections[].rows[].columns[].items[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"target.itemId\",\n \"targetSectionId\",\n \"targetRowId\",\n \"targetColumnId\"\n ],\n \"properties\": {\n \"target.itemId\": {\n \"type\": \"string\"\n },\n \"targetSectionId\": {\n \"type\": \"string\"\n },\n \"targetRowId\": {\n \"type\": \"string\"\n },\n \"targetColumnId\": {\n \"type\": \"string\"\n },\n \"index\": {\n \"type\": \"number\"\n }\n }\n },\n \"failureModes\": [\n \"target-visual-block-not-found\",\n \"target-layout-location-not-found\",\n \"ambiguous-visual-block-target\"\n ],\n \"description\": \"Moves a richContent layout item by stable item, section, row, and column ids; index is insertion position only.\"\n }\n }\n ],\n \"validators\": [\n \"visual-block-exists\",\n \"layout-target-exists\",\n \"no-index-as-identity\"\n ],\n \"affectedPaths\": [\n \"sections[].rows[].columns[].items\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"layout.visualBlock.remove\",\n \"title\": \"Remover bloco visual\",\n \"scope\": \"layout\",\n \"targetKind\": \"visualBlock\",\n \"target\": {\n \"kind\": \"visualBlock\",\n \"resolver\": \"layout-item-by-id\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {}\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"form-layout-visual-block-remove\",\n \"handlerContract\": {\n \"reads\": [\n \"sections[].rows[].columns[].items[].id\"\n ],\n \"writes\": [\n \"sections[].rows[].columns[].items\"\n ],\n \"identityKeys\": [\n \"sections[].id\",\n \"sections[].rows[].id\",\n \"sections[].rows[].columns[].id\",\n \"sections[].rows[].columns[].items[].id\"\n ],\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"target.itemId\"\n ],\n \"properties\": {\n \"target.itemId\": {\n \"type\": \"string\"\n }\n }\n },\n \"failureModes\": [\n \"target-visual-block-not-found\",\n \"ambiguous-visual-block-target\"\n ],\n \"description\": \"Removes a richContent layout item from sections[].rows[].columns[].items[] without touching fieldMetadata or form submit payload.\"\n }\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"visual-block-exists\"\n ],\n \"affectedPaths\": [\n \"sections[].rows[].columns[].items\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"rule.visibility.add\",\n \"title\": \"Adicionar regra de visibilidade\",\n \"scope\": \"global\",\n \"targetKind\": \"formRule\",\n \"target\": {\n \"kind\": \"formRule\",\n \"resolver\": \"rule-by-id-or-name\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"type\",\n \"targets\",\n \"condition\",\n \"metadata\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"const\": \"visibility\",\n \"description\": \"Discriminador de tipo da regra; obrigatório para distinção em formRules[]\"\n },\n \"targetType\": {\n \"enum\": [\n \"field\",\n \"section\",\n \"row\",\n \"column\",\n \"action\",\n \"visualBlock\"\n ],\n \"default\": \"field\"\n },\n \"targets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1\n },\n \"condition\": {\n \"type\": \"object\",\n \"description\": \"JsonLogic AST. Visual-safe subset: field comparisons with scalar or field operands plus and/or groups. Advanced operators are runtime JSON-only until focused visual round-trip support exists.\"\n },\n \"metadata\": {\n \"type\": \"object\",\n \"required\": [\n \"origin\",\n \"reviewStatus\"\n ],\n \"properties\": {\n \"origin\": {\n \"const\": \"llm\",\n \"description\": \"Origem obrigatória para regra sugerida por IA.\"\n },\n \"reviewStatus\": {\n \"const\": \"pending\",\n \"description\": \"Toda regra criada pela IA entra pendente de revisão humana.\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"formRules[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"rule-id-unique\",\n \"rule-target-refs-exist\",\n \"json-logic-valid\"\n ],\n \"affectedPaths\": [\n \"formRules[]\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"rule.validation.add\",\n \"title\": \"Adicionar regra de validação\",\n \"scope\": \"global\",\n \"targetKind\": \"formRule\",\n \"target\": {\n \"kind\": \"formRule\",\n \"resolver\": \"rule-by-id-or-name\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"type\",\n \"targets\",\n \"condition\",\n \"message\",\n \"metadata\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"const\": \"validation\",\n \"description\": \"Discriminador de tipo da regra; obrigatório para distinção em formRules[]\"\n },\n \"targetType\": {\n \"enum\": [\n \"field\",\n \"section\",\n \"row\",\n \"column\",\n \"action\",\n \"visualBlock\"\n ],\n \"default\": \"field\"\n },\n \"targets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1\n },\n \"condition\": {\n \"type\": \"object\",\n \"description\": \"JsonLogic AST; quando true, exibe mensagem de erro. Visual-safe subset: field comparisons with scalar or field operands plus and/or groups. Advanced operators are runtime JSON-only until focused visual round-trip support exists.\"\n },\n \"message\": {\n \"type\": \"string\",\n \"description\": \"Mensagem de erro a exibir ao usuário\"\n },\n \"level\": {\n \"enum\": [\n \"error\",\n \"warning\"\n ],\n \"default\": \"error\"\n },\n \"metadata\": {\n \"type\": \"object\",\n \"required\": [\n \"origin\",\n \"reviewStatus\"\n ],\n \"properties\": {\n \"origin\": {\n \"const\": \"llm\",\n \"description\": \"Origem obrigatória para regra sugerida por IA.\"\n },\n \"reviewStatus\": {\n \"const\": \"pending\",\n \"description\": \"Toda regra criada pela IA entra pendente de revisão humana.\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"formRules[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"rule-id-unique\",\n \"rule-target-refs-exist\",\n \"json-logic-valid\"\n ],\n \"affectedPaths\": [\n \"formRules[]\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"rule.computedValue.add\",\n \"title\": \"Adicionar regra de valor calculado\",\n \"scope\": \"global\",\n \"targetKind\": \"formRule\",\n \"target\": {\n \"kind\": \"formRule\",\n \"resolver\": \"rule-by-id-or-name\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"type\",\n \"targets\",\n \"condition\",\n \"value\",\n \"metadata\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"const\": \"computedValue\",\n \"description\": \"Discriminador de regra que escreve effect.properties.value em formRules[].\"\n },\n \"targetType\": {\n \"const\": \"field\",\n \"description\": \"Valor calculado só é materializado em FormControl de campo.\"\n },\n \"targets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1\n },\n \"condition\": {\n \"type\": \"object\",\n \"description\": \"JsonLogic AST; quando true aplica value, quando false aplica valueWhenFalse se informado. Computed expressions are runtime JSON-only unless a focused visual round-trip path exists.\"\n },\n \"value\": {\n \"type\": \"object\",\n \"description\": \"Envelope obrigatório e fechado: exatamente { expression: <JsonLogic> } para cálculo ou exatamente { literal: <valor> } para valor literal estruturado.\",\n \"oneOf\": [\n {\n \"required\": [\n \"expression\"\n ],\n \"not\": {\n \"required\": [\n \"literal\"\n ]\n },\n \"additionalProperties\": false\n },\n {\n \"required\": [\n \"literal\"\n ],\n \"not\": {\n \"required\": [\n \"expression\"\n ]\n },\n \"additionalProperties\": false\n }\n ],\n \"properties\": {\n \"expression\": {\n \"type\": \"object\",\n \"description\": \"JsonLogic AST avaliado contra o contexto do formulário.\"\n },\n \"literal\": {\n \"description\": \"Valor literal, inclusive objeto estruturado.\"\n }\n }\n },\n \"valueWhenFalse\": {\n \"type\": \"object\",\n \"description\": \"Envelope opcional e fechado aplicado no ramo falso. Use exatamente { literal: null } para limpar o valor.\",\n \"oneOf\": [\n {\n \"required\": [\n \"expression\"\n ],\n \"not\": {\n \"required\": [\n \"literal\"\n ]\n },\n \"additionalProperties\": false\n },\n {\n \"required\": [\n \"literal\"\n ],\n \"not\": {\n \"required\": [\n \"expression\"\n ]\n },\n \"additionalProperties\": false\n }\n ],\n \"properties\": {\n \"expression\": {\n \"type\": \"object\",\n \"description\": \"JsonLogic AST avaliado contra o contexto do formulário.\"\n },\n \"literal\": {\n \"description\": \"Valor literal, inclusive null.\"\n }\n }\n },\n \"metadata\": {\n \"type\": \"object\",\n \"required\": [\n \"origin\",\n \"reviewStatus\"\n ],\n \"properties\": {\n \"origin\": {\n \"const\": \"llm\",\n \"description\": \"Origem obrigatória para regra sugerida por IA.\"\n },\n \"reviewStatus\": {\n \"const\": \"pending\",\n \"description\": \"Toda regra criada pela IA entra pendente de revisão humana.\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"formRules[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"rule-id-unique\",\n \"rule-target-refs-exist\",\n \"json-logic-valid\",\n \"computed-value-envelope-valid\"\n ],\n \"affectedPaths\": [\n \"formRules[]\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"rule.visualBlockGuidance.add\",\n \"title\": \"Materializar orientação visual derivada\",\n \"scope\": \"global\",\n \"targetKind\": \"formRule\",\n \"target\": {\n \"kind\": \"formRule\",\n \"resolver\": \"rule-by-id-or-name\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"type\",\n \"targetType\",\n \"targets\",\n \"condition\",\n \"properties\",\n \"metadata\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"const\": \"visualBlockGuidance\",\n \"description\": \"Discriminador para regra de orientação visual derivada em formRules[].\"\n },\n \"targetType\": {\n \"const\": \"visualBlock\",\n \"description\": \"Projeções visuais sempre apontam para richContent layout items e não representam a decisão canônica.\"\n },\n \"context\": {\n \"enum\": [\n \"notification\",\n \"style\"\n ],\n \"default\": \"notification\"\n },\n \"targets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1\n },\n \"condition\": {\n \"type\": \"object\",\n \"description\": \"JsonLogic AST; quando true aplica properties, quando false aplica propertiesWhenFalse. Visual-safe subset: field comparisons with scalar or field operands plus and/or groups. Advanced operators are runtime JSON-only until focused visual round-trip support exists.\"\n },\n \"properties\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"visible\": {\n \"type\": \"boolean\"\n },\n \"hidden\": {\n \"type\": \"boolean\"\n },\n \"layout\": {\n \"enum\": [\n \"block\",\n \"inline\"\n ]\n },\n \"className\": {\n \"type\": \"string\"\n },\n \"rootClassName\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"object\"\n },\n \"text\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"message\": {\n \"type\": \"string\"\n },\n \"textNodeId\": {\n \"type\": \"string\"\n },\n \"titleNodeId\": {\n \"type\": \"string\"\n },\n \"messageNodeId\": {\n \"type\": \"string\"\n }\n },\n \"description\": \"Use apenas propriedades suportadas por RULE_PROPERTY_SCHEMA.visualBlock; não escreva document, HTML, handlers, dados de payload ou regra de negócio canônica.\"\n },\n \"propertiesWhenFalse\": {\n \"type\": \"object\",\n \"properties\": {\n \"visible\": {\n \"type\": \"boolean\"\n },\n \"hidden\": {\n \"type\": \"boolean\"\n },\n \"layout\": {\n \"enum\": [\n \"block\",\n \"inline\"\n ]\n },\n \"className\": {\n \"type\": \"string\"\n },\n \"rootClassName\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"object\"\n },\n \"text\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"message\": {\n \"type\": \"string\"\n },\n \"textNodeId\": {\n \"type\": \"string\"\n },\n \"titleNodeId\": {\n \"type\": \"string\"\n },\n \"messageNodeId\": {\n \"type\": \"string\"\n }\n }\n },\n \"metadata\": {\n \"type\": \"object\",\n \"required\": [\n \"origin\",\n \"reviewStatus\"\n ],\n \"properties\": {\n \"origin\": {\n \"const\": \"llm\",\n \"description\": \"Origem obrigatória para regra sugerida por IA.\"\n },\n \"reviewStatus\": {\n \"const\": \"pending\",\n \"description\": \"Toda regra criada pela IA entra pendente de revisão humana.\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"formRules[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"rule-id-unique\",\n \"visual-block-exists\",\n \"json-logic-valid\"\n ],\n \"affectedPaths\": [\n \"formRules[]\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"rule.remove\",\n \"title\": \"Remover regra\",\n \"scope\": \"rule\",\n \"targetKind\": \"formRule\",\n \"target\": {\n \"kind\": \"formRule\",\n \"resolver\": \"rule-by-id-or-name\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"properties\": {}\n },\n \"effects\": [\n {\n \"kind\": \"remove-by-key\",\n \"path\": \"formRules[]\",\n \"key\": \"id\"\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"rule-exists\"\n ],\n \"affectedPaths\": [\n \"formRules[]\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"action.submit.configure\",\n \"title\": \"Configurar botão de envio\",\n \"scope\": \"global\",\n \"targetKind\": \"formAction\",\n \"target\": {\n \"kind\": \"formAction\",\n \"resolver\": \"action-by-id-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"label\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"visible\": {\n \"type\": \"boolean\"\n },\n \"color\": {\n \"enum\": [\n \"primary\",\n \"accent\",\n \"warn\",\n \"basic\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"actions.submit\"\n }\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"actions.submit\"\n ],\n \"submissionImpact\": \"affects-submission\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"action.cancel.configure\",\n \"title\": \"Configurar botão de cancelar\",\n \"scope\": \"global\",\n \"targetKind\": \"formAction\",\n \"target\": {\n \"kind\": \"formAction\",\n \"resolver\": \"action-by-id-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"label\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"visible\": {\n \"type\": \"boolean\"\n },\n \"color\": {\n \"enum\": [\n \"primary\",\n \"accent\",\n \"warn\",\n \"basic\"\n ]\n },\n \"navigateTo\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"actions.cancel\"\n }\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"actions.cancel\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"action.reset.configure\",\n \"title\": \"Configurar botão de reset\",\n \"scope\": \"global\",\n \"targetKind\": \"formAction\",\n \"target\": {\n \"kind\": \"formAction\",\n \"resolver\": \"action-by-id-or-label\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"label\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"visible\": {\n \"type\": \"boolean\"\n },\n \"color\": {\n \"enum\": [\n \"primary\",\n \"accent\",\n \"warn\",\n \"basic\"\n ]\n },\n \"confirmBeforeReset\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"actions.reset\"\n }\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"actions.reset\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n }\n ],\n \"validators\": [\n {\n \"validatorId\": \"field-exists\",\n \"level\": \"error\",\n \"code\": \"DF001\",\n \"description\": \"O campo alvo deve existir em fieldMetadata.\"\n },\n {\n \"validatorId\": \"field-name-unique\",\n \"level\": \"error\",\n \"code\": \"DF002\",\n \"description\": \"Nomes de campos devem ser únicos em fieldMetadata.\"\n },\n {\n \"validatorId\": \"section-id-unique\",\n \"level\": \"error\",\n \"code\": \"DF003\",\n \"description\": \"IDs de seções devem ser únicos em sections[].\"\n },\n {\n \"validatorId\": \"section-exists\",\n \"level\": \"error\",\n \"code\": \"DF004\",\n \"description\": \"A seção alvo deve existir em sections[].\"\n },\n {\n \"validatorId\": \"field-exists-in-layout\",\n \"level\": \"warning\",\n \"code\": \"DF005\",\n \"description\": \"Campo definido em fieldMetadata mas ausente no layout.\"\n },\n {\n \"validatorId\": \"local-schema-name-no-collision\",\n \"level\": \"error\",\n \"code\": \"DF006\",\n \"description\": \"Nome de campo local não pode colidir com campo schema-backed existente.\"\n },\n {\n \"validatorId\": \"field-is-local\",\n \"level\": \"error\",\n \"code\": \"DF007\",\n \"description\": \"Operação restrita a campos locais (source:\\\"local\\\"). Campo schema-backed não pode ser removido ou ter submitPolicy alterada.\"\n },\n {\n \"validatorId\": \"rule-id-unique\",\n \"level\": \"error\",\n \"code\": \"DF008\",\n \"description\": \"IDs de regras devem ser únicos em formRules[].\"\n },\n {\n \"validatorId\": \"rule-exists\",\n \"level\": \"error\",\n \"code\": \"DF009\",\n \"description\": \"A regra alvo deve existir em formRules[].\"\n },\n {\n \"validatorId\": \"rule-target-refs-exist\",\n \"level\": \"error\",\n \"code\": \"DF010\",\n \"description\": \"Todos os targets da regra devem referenciar campos, seções, ações ou blocos visuais existentes.\"\n },\n {\n \"validatorId\": \"computed-value-envelope-valid\",\n \"level\": \"error\",\n \"code\": \"DF023\",\n \"description\": \"Valores calculados devem usar envelope explícito e fechado, exatamente { expression: <JsonLogic> } ou exatamente { literal: <valor> }; objetos literais sem envelope ou envelopes com chaves extras são ambíguos.\"\n },\n {\n \"validatorId\": \"json-logic-valid\",\n \"level\": \"error\",\n \"code\": \"DF011\",\n \"description\": \"A expressão JsonLogic deve ser um AST válido (suporte canônico à spec JsonLogic).\"\n },\n {\n \"validatorId\": \"layout-target-exists\",\n \"level\": \"error\",\n \"code\": \"DF012\",\n \"description\": \"A seção/linha/coluna de destino devem existir antes de mover o campo.\"\n },\n {\n \"validatorId\": \"no-index-as-identity\",\n \"level\": \"error\",\n \"code\": \"DF013\",\n \"description\": \"Operações de layout não devem usar índice de array como identidade canônica; use IDs estáveis.\"\n },\n {\n \"validatorId\": \"row-exists\",\n \"level\": \"error\",\n \"code\": \"DF014\",\n \"description\": \"A linha alvo deve existir na seção especificada.\"\n },\n {\n \"validatorId\": \"row-id-unique-in-section\",\n \"level\": \"error\",\n \"code\": \"DF015\",\n \"description\": \"O id da nova linha deve ser único dentro da seção alvo.\"\n },\n {\n \"validatorId\": \"column-id-unique-in-row\",\n \"level\": \"error\",\n \"code\": \"DF016\",\n \"description\": \"O id da nova coluna deve ser único dentro da linha alvo.\"\n },\n {\n \"validatorId\": \"control-type-compatible\",\n \"level\": \"error\",\n \"code\": \"DF017\",\n \"description\": \"O tipo de controle deve ser compatível com o tipo de dado do campo.\"\n },\n {\n \"validatorId\": \"option-source-valid\",\n \"level\": \"error\",\n \"code\": \"DF018\",\n \"description\": \"A fonte de opções deve ser válida para o tipo de controle especificado.\"\n },\n {\n \"validatorId\": \"editor-round-trip-preserve\",\n \"level\": \"error\",\n \"code\": \"DF019\",\n \"description\": \"Edição não deve corromper propriedades críticas para o round-trip do editor. Aplicado após operações que afetam submitPolicy ou source de campos locais.\"\n },\n {\n \"validatorId\": \"visual-block-exists\",\n \"level\": \"error\",\n \"code\": \"DF020\",\n \"description\": \"O bloco visual alvo deve existir como item kind:\\\"richContent\\\" em sections[].rows[].columns[].items[].\"\n },\n {\n \"validatorId\": \"visual-block-id-unique\",\n \"level\": \"error\",\n \"code\": \"DF021\",\n \"description\": \"IDs de blocos visuais devem ser unicos entre os itens de layout do formulario.\"\n },\n {\n \"validatorId\": \"rich-content-document-valid\",\n \"level\": \"error\",\n \"code\": \"DF022\",\n \"description\": \"O document do bloco visual deve seguir o contrato RichContentDocument canonico.\"\n }\n ],\n \"roundTripRequirements\": [\n \"strip-undefined\",\n \"normalize-json-logic\",\n \"stable-field-order\",\n \"preserve-column-layout-items\",\n \"preserve-local-field-source\",\n \"preserve-section-row-column-ids\"\n ],\n \"examples\": [\n {\n \"id\": \"add-local-transient-field\",\n \"request\": \"Adicionar campo auxiliar local \\\"notasInternas\\\" que não deve aparecer no payload de envio\",\n \"operationId\": \"field.local.add\",\n \"params\": {\n \"name\": \"notasInternas\",\n \"label\": \"Notas Internas\",\n \"controlType\": \"textarea\",\n \"source\": \"local\",\n \"transient\": true,\n \"submitPolicy\": \"omit\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"relabel-schema-backed-field\",\n \"request\": \"Mudar o label do campo email para \\\"E-mail Corporativo\\\"\",\n \"operationId\": \"field.label.set\",\n \"target\": \"email\",\n \"params\": {\n \"label\": \"E-mail Corporativo\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"move-field-to-column\",\n \"request\": \"Mover campo telefone para a primeira coluna da seção de contato\",\n \"operationId\": \"layout.field.move\",\n \"target\": \"telefone\",\n \"params\": {\n \"targetSectionId\": \"secao-contato\",\n \"targetRowId\": \"row-1\",\n \"targetColumnId\": \"col-1\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-visual-block\",\n \"request\": \"Adicionar um aviso visual antes dos campos de contato\",\n \"operationId\": \"layout.visualBlock.add\",\n \"target\": \"col-contato\",\n \"params\": {\n \"id\": \"aviso-contato\",\n \"document\": {\n \"kind\": \"praxis.rich-content\",\n \"version\": \"1.0.0\",\n \"nodes\": [\n {\n \"type\": \"text\",\n \"text\": \"Confira os dados antes de salvar.\"\n }\n ]\n },\n \"layout\": \"block\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"move-visual-block\",\n \"request\": \"Mover o aviso visual para a segunda coluna da secao de contato\",\n \"operationId\": \"layout.visualBlock.move\",\n \"target\": \"aviso-contato\",\n \"params\": {\n \"targetSectionId\": \"secao-contato\",\n \"targetRowId\": \"row-1\",\n \"targetColumnId\": \"col-2\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-visibility-rule\",\n \"request\": \"Ocultar o campo cpf quando o tipo de pessoa for jurídica\",\n \"operationId\": \"rule.visibility.add\",\n \"params\": {\n \"id\": \"ocultar-cpf-pj\",\n \"name\": \"Ocultar CPF para PJ\",\n \"targetType\": \"field\",\n \"targets\": [\n \"cpf\"\n ],\n \"condition\": {\n \"==\": [\n {\n \"var\": \"tipoPessoa\"\n },\n \"juridica\"\n ]\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-computed-value-rule\",\n \"request\": \"Calcular idade a partir da data de nascimento e limpar quando a data estiver vazia\",\n \"operationId\": \"rule.computedValue.add\",\n \"params\": {\n \"id\": \"birth-date-computes-age\",\n \"name\": \"Calcular idade\",\n \"type\": \"computedValue\",\n \"targetType\": \"field\",\n \"targets\": [\n \"age\"\n ],\n \"condition\": {\n \"!\": [\n {\n \"isBlank\": [\n {\n \"var\": \"birthDate\"\n }\n ]\n }\n ]\n },\n \"value\": {\n \"expression\": {\n \"yearsSince\": [\n {\n \"var\": \"birthDate\"\n }\n ]\n }\n },\n \"valueWhenFalse\": {},\n \"metadata\": {\n \"origin\": \"llm\",\n \"reviewStatus\": \"pending\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-visual-block-guidance-rule\",\n \"request\": \"Materializar no aviso visual a decisao governada que exige aprovacao de compliance para fornecedor com risco critico\",\n \"operationId\": \"rule.visualBlockGuidance.add\",\n \"params\": {\n \"id\": \"supplier-risk-guidance\",\n \"name\": \"Supplier risk guidance\",\n \"type\": \"visualBlockGuidance\",\n \"targetType\": \"visualBlock\",\n \"targets\": [\n \"supplier-risk-notice\"\n ],\n \"condition\": {\n \"===\": [\n {\n \"var\": \"riscoFornecedor\"\n },\n \"critico\"\n ]\n },\n \"properties\": {\n \"message\": \"Fornecedor critico exige aprovacao de compliance antes de emitir o pedido.\",\n \"messageNodeId\": \"message\",\n \"className\": \"supplier-risk-notice supplier-risk-notice--critical\"\n },\n \"propertiesWhenFalse\": {\n \"message\": \"Fornecedor sem bloqueios criticos para este pedido.\",\n \"messageNodeId\": \"message\",\n \"className\": \"supplier-risk-notice supplier-risk-notice--neutral\"\n },\n \"metadata\": {\n \"origin\": \"llm\",\n \"reviewStatus\": \"pending\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"reject-unknown-field\",\n \"request\": \"Alterar o label do campo \\\"campoInexistente\\\"\",\n \"operationId\": \"field.label.set\",\n \"target\": \"campoInexistente\",\n \"params\": {\n \"label\": \"Novo Label\"\n },\n \"isPositive\": false\n },\n {\n \"id\": \"require-confirmation-remove-field\",\n \"request\": \"Remover o campo auxiliar \\\"notasInternas\\\"\",\n \"operationId\": \"field.local.remove\",\n \"target\": \"notasInternas\",\n \"isPositive\": true\n },\n {\n \"id\": \"require-confirmation-remove-section\",\n \"request\": \"Remover a seção \\\"Dados Adicionais\\\"\",\n \"operationId\": \"layout.section.remove\",\n \"target\": \"secao-dados-adicionais\",\n \"isPositive\": true\n },\n {\n \"id\": \"round-trip-no-drift\",\n \"request\": \"Salvar e reabrir o formulário editado sem drift de configuração\",\n \"operationId\": \"field.label.set\",\n \"target\": \"nome\",\n \"params\": {\n \"label\": \"Nome Completo\"\n },\n \"isPositive\": true\n }\n ]\n}",
8885
+ "content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.5.0\",\"componentId\":\"praxis-dynamic-form\",\"ownerPackage\":\"@praxisui/dynamic-form\",\"configSchemaId\":\"FormConfig\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"add-local-transient-field\",\"request\":\"Adicionar campo auxiliar local \\\"notasInternas\\\" que não deve aparecer no payload de envio\",\"operationId\":\"field.local.add\",\"params\":{\"name\":\"notasInternas\",\"label\":\"Notas Internas\",\"controlType\":\"textarea\",\"source\":\"local\",\"transient\":true,\"submitPolicy\":\"omit\"},\"isPositive\":true},{\"id\":\"relabel-schema-backed-field\",\"request\":\"Mudar o label do campo email para \\\"E-mail Corporativo\\\"\",\"operationId\":\"field.label.set\",\"target\":\"email\",\"params\":{\"label\":\"E-mail Corporativo\"},\"isPositive\":true},{\"id\":\"move-field-to-column\",\"request\":\"Mover campo telefone para a primeira coluna da seção de contato\",\"operationId\":\"layout.field.move\",\"target\":\"telefone\",\"params\":{\"targetSectionId\":\"secao-contato\",\"targetRowId\":\"row-1\",\"targetColumnId\":\"col-1\"},\"isPositive\":true},{\"id\":\"add-visual-block\",\"request\":\"Adicionar um aviso visual antes dos campos de contato\",\"operationId\":\"layout.visualBlock.add\",\"target\":\"col-contato\",\"params\":{\"id\":\"aviso-contato\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"text\":\"Confira os dados antes de salvar.\"}]},\"layout\":\"block\"},\"isPositive\":true},{\"id\":\"move-visual-block\",\"request\":\"Mover o aviso visual para a segunda coluna da secao de contato\",\"operationId\":\"layout.visualBlock.move\",\"target\":\"aviso-contato\",\"params\":{\"targetSectionId\":\"secao-contato\",\"targetRowId\":\"row-1\",\"targetColumnId\":\"col-2\"},\"isPositive\":true},{\"id\":\"add-visibility-rule\",\"request\":\"Ocultar o campo cpf quando o tipo de pessoa for jurídica\",\"operationId\":\"rule.visibility.add\",\"params\":{\"id\":\"ocultar-cpf-pj\",\"name\":\"Ocultar CPF para PJ\",\"targetType\":\"field\",\"targets\":[\"cpf\"],\"condition\":{\"==\":[{\"var\":\"tipoPessoa\"},\"juridica\"]}},\"isPositive\":true},{\"id\":\"add-computed-value-rule\",\"request\":\"Calcular idade a partir da data de nascimento e limpar quando a data estiver vazia\",\"operationId\":\"rule.computedValue.add\",\"params\":{\"id\":\"birth-date-computes-age\",\"name\":\"Calcular idade\",\"type\":\"computedValue\",\"targetType\":\"field\",\"targets\":[\"age\"],\"condition\":{\"!\":[{\"isBlank\":[{\"var\":\"birthDate\"}]}]},\"value\":{\"expression\":{\"yearsSince\":[{\"var\":\"birthDate\"}]}},\"valueWhenFalse\":{},\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"}},\"isPositive\":true},{\"id\":\"add-visual-block-guidance-rule\",\"request\":\"Materializar no aviso visual a decisao governada que exige aprovacao de compliance para fornecedor com risco critico\",\"operationId\":\"rule.visualBlockGuidance.add\",\"params\":{\"id\":\"supplier-risk-guidance\",\"name\":\"Supplier risk guidance\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"targets\":[\"supplier-risk-notice\"],\"condition\":{\"===\":[{\"var\":\"riscoFornecedor\"},\"critico\"]},\"properties\":{\"message\":\"Fornecedor critico exige aprovacao de compliance antes de emitir o pedido.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--critical\"},\"propertiesWhenFalse\":{\"message\":\"Fornecedor sem bloqueios criticos para este pedido.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--neutral\"},\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"}},\"isPositive\":true},{\"id\":\"reject-unknown-field\",\"request\":\"Alterar o label do campo \\\"campoInexistente\\\"\",\"operationId\":\"field.label.set\",\"target\":\"campoInexistente\",\"params\":{\"label\":\"Novo Label\"},\"isPositive\":false},{\"id\":\"require-confirmation-remove-field\",\"request\":\"Remover o campo auxiliar \\\"notasInternas\\\"\",\"operationId\":\"field.local.remove\",\"target\":\"notasInternas\",\"isPositive\":true},{\"id\":\"require-confirmation-remove-section\",\"request\":\"Remover a seção \\\"Dados Adicionais\\\"\",\"operationId\":\"layout.section.remove\",\"target\":\"secao-dados-adicionais\",\"isPositive\":true},{\"id\":\"round-trip-no-drift\",\"request\":\"Salvar e reabrir o formulário editado sem drift de configuração\",\"operationId\":\"field.label.set\",\"target\":\"nome\",\"params\":{\"label\":\"Nome Completo\"},\"isPositive\":true}]}",
8676
8886
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/praxis-dynamic-form-authoring-manifest.ts",
8677
- "contentHash": "effb374416943bb3ff473cfefc2022de6e2c6f7ad59f29d22a3986970d38ef3d",
8887
+ "contentHash": "db9e8a0ec84c1cb6035dc3b6491ce902f9b223cd48c1802103a5c26c40987dfd",
8888
+ "sourceKind": "component_definition",
8889
+ "sourceId": "praxis-dynamic-form",
8890
+ "corpusVersion": "1.0.0"
8891
+ },
8892
+ {
8893
+ "chunkIndex": 24,
8894
+ "chunkKind": "context_pack",
8895
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"version\":\"v1\",\"optionsByPath\":{\"fieldMetadata[].controlType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"input\",\"label\":\"Input\"},{\"value\":\"textarea\",\"label\":\"Textarea\"},{\"value\":\"email\",\"label\":\"Email\"},{\"value\":\"password\",\"label\":\"Password\"},{\"value\":\"search\",\"label\":\"Search\"},{\"value\":\"url\",\"label\":\"URL\"},{\"value\":\"phone\",\"label\":\"Phone\"},{\"value\":\"cpfCnpjInput\",\"label\":\"CPF/CNPJ\"},{\"value\":\"numericTextBox\",\"label\":\"Number\"},{\"value\":\"currency\",\"label\":\"Currency\"},{\"value\":\"priceRange\",\"label\":\"Price range\"},{\"value\":\"date\",\"label\":\"Date picker\"},{\"value\":\"dateRange\",\"label\":\"Date range\"},{\"value\":\"dateInput\",\"label\":\"Date input\"},{\"value\":\"dateTime\",\"label\":\"Datetime\"},{\"value\":\"dateTimeRange\",\"label\":\"Datetime range\"},{\"value\":\"dateTimeLocal\",\"label\":\"Datetime local\"},{\"value\":\"time\",\"label\":\"Time input\"},{\"value\":\"timePicker\",\"label\":\"Time picker\"},{\"value\":\"timeRange\",\"label\":\"Time range\"},{\"value\":\"week\",\"label\":\"Week input\"},{\"value\":\"month\",\"label\":\"Month input\"},{\"value\":\"year\",\"label\":\"Year input\"},{\"value\":\"select\",\"label\":\"Select\"},{\"value\":\"multiSelect\",\"label\":\"Multi select\"},{\"value\":\"multiSelectTree\",\"label\":\"Multi select tree\"},{\"value\":\"treeSelect\",\"label\":\"Tree select\"},{\"value\":\"transferList\",\"label\":\"Transfer list\"},{\"value\":\"autoComplete\",\"label\":\"Autocomplete\"},{\"value\":\"searchable-select\",\"label\":\"Searchable select\"},{\"value\":\"async-select\",\"label\":\"Async select\"},{\"value\":\"radio\",\"label\":\"Radio group\"},{\"value\":\"checkbox\",\"label\":\"Checkbox group\"},{\"value\":\"selectionList\",\"label\":\"Selection list\"},{\"value\":\"toggle\",\"label\":\"Toggle\"},{\"value\":\"buttonToggle\",\"label\":\"Button toggle\"},{\"value\":\"slider\",\"label\":\"Slider\"},{\"value\":\"rangeSlider\",\"label\":\"Range slider\"},{\"value\":\"rating\",\"label\":\"Rating\"},{\"value\":\"chipInput\",\"label\":\"Chips\"},{\"value\":\"chipList\",\"label\":\"Chip list\"},{\"value\":\"upload\",\"label\":\"File upload\"},{\"value\":\"color\",\"label\":\"Color input\"},{\"value\":\"colorPicker\",\"label\":\"Color picker\"},{\"value\":\"cronBuilder\",\"label\":\"Cron builder\"}]},\"fieldMetadata[].source\":{\"mode\":\"enum\",\"options\":[{\"value\":\"schema\",\"label\":\"Schema field\"},{\"value\":\"local\",\"label\":\"Local field\"}]},\"fieldMetadata[].submitPolicy\":{\"mode\":\"enum\",\"options\":[{\"value\":\"omit\",\"label\":\"Omit from submit payload\"},{\"value\":\"include\",\"label\":\"Include in submit payload\"},{\"value\":\"includeWhenDirty\",\"label\":\"Include only when dirty\"}]},\"fieldMetadata[].materialDesign.appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"fill\",\"label\":\"Fill\"},{\"value\":\"outline\",\"label\":\"Outline\"}]},\"fieldMetadata[].materialDesign.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"}]},\"fieldMetadata[].materialDesign.floatLabel\":{\"mode\":\"enum\",\"options\":[{\"value\":\"auto\",\"label\":\"Auto\"},{\"value\":\"always\",\"label\":\"Always\"}]},\"fieldMetadata[].materialDesign.density\":{\"mode\":\"enum\",\"options\":[{\"value\":\"comfortable\",\"label\":\"Comfortable\"},{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"dense\",\"label\":\"Dense\"}]},\"actions.position\":{\"mode\":\"enum\",\"options\":[{\"value\":\"left\",\"label\":\"Left\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"right\",\"label\":\"Right\"},{\"value\":\"justified\",\"label\":\"Justified\"},{\"value\":\"split\",\"label\":\"Split\"}]},\"actions.orientation\":{\"mode\":\"enum\",\"options\":[{\"value\":\"horizontal\",\"label\":\"Horizontal\"},{\"value\":\"vertical\",\"label\":\"Vertical\"}]},\"actions.spacing\":{\"mode\":\"enum\",\"options\":[{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"normal\",\"label\":\"Normal\"},{\"value\":\"spacious\",\"label\":\"Spacious\"}]},\"actions.placement\":{\"mode\":\"enum\",\"options\":[{\"value\":\"insideLastSection\",\"label\":\"Inside last section\"},{\"value\":\"afterSections\",\"label\":\"After sections\"},{\"value\":\"top\",\"label\":\"Top\"}]},\"actions.submit.type\":{\"mode\":\"enum\",\"options\":[{\"value\":\"button\",\"label\":\"Button\"},{\"value\":\"submit\",\"label\":\"Submit\"},{\"value\":\"reset\",\"label\":\"Reset\"}]},\"actions.submit.variant\":{\"mode\":\"enum\",\"options\":[{\"value\":\"raised\",\"label\":\"Raised\"},{\"value\":\"stroked\",\"label\":\"Stroked\"},{\"value\":\"flat\",\"label\":\"Flat\"},{\"value\":\"fab\",\"label\":\"Fab\"}]},\"actions.submit.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"small\",\"label\":\"Small\"},{\"value\":\"medium\",\"label\":\"Medium\"},{\"value\":\"large\",\"label\":\"Large\"}]},\"actions.submit.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"},{\"value\":\"basic\",\"label\":\"Basic\"}]},\"sections[].headerAlign\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"}]},\"sections[].appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"card\",\"label\":\"Card\"},{\"value\":\"plain\",\"label\":\"Plain\"},{\"value\":\"step\",\"label\":\"Step\"}]},\"sections[].sectionHeader.mode\":{\"mode\":\"enum\",\"options\":[{\"value\":\"icon\",\"label\":\"Icon\"},{\"value\":\"avatar-image\",\"label\":\"Avatar image\"},{\"value\":\"avatar-initials\",\"label\":\"Avatar initials\"},{\"value\":\"auto\",\"label\":\"Auto\"}]},\"sections[].sectionHeader.emptyState\":{\"mode\":\"enum\",\"options\":[{\"value\":\"placeholder-avatar\",\"label\":\"Neutral placeholder\"},{\"value\":\"fallback-icon\",\"label\":\"Fallback icon\"},{\"value\":\"none\",\"label\":\"None\"}]},\"sections[].sectionHeader.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"sm\",\"label\":\"Small\"},{\"value\":\"md\",\"label\":\"Medium\"},{\"value\":\"lg\",\"label\":\"Large\"}]},\"sections[].stepLabel\":{\"mode\":\"suggested\",\"options\":[{\"value\":\"Dados básicos\",\"label\":\"Dados básicos\"},{\"value\":\"Detalhes\",\"label\":\"Detalhes\"},{\"value\":\"Confirmação\",\"label\":\"Confirmação\"}]},\"sections[].titleStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"titleLarge\",\"label\":\"Title large\"},{\"value\":\"titleMedium\",\"label\":\"Title medium\"},{\"value\":\"titleSmall\",\"label\":\"Title small\"},{\"value\":\"headlineSmall\",\"label\":\"Headline small\"}]},\"sections[].descriptionStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"bodyLarge\",\"label\":\"Body large\"},{\"value\":\"bodyMedium\",\"label\":\"Body medium\"},{\"value\":\"bodySmall\",\"label\":\"Body small\"}]},\"sections[].rows[].columns[].align\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"end\",\"label\":\"End\"},{\"value\":\"stretch\",\"label\":\"Stretch\"}]},\"sections[].rows[].columns[].items[].kind\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"richContent\",\"label\":\"Rich content\"}]},\"sections[].rows[].columns[].items[].layout\":{\"mode\":\"enum\",\"options\":[{\"value\":\"block\",\"label\":\"Block\"},{\"value\":\"inline\",\"label\":\"Inline\"}]},\"formRules[].targetType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"section\",\"label\":\"Section\"},{\"value\":\"row\",\"label\":\"Row\"},{\"value\":\"column\",\"label\":\"Column\"},{\"value\":\"action\",\"label\":\"Action\"},{\"value\":\"visualBlock\",\"label\":\"Visual block\"}]},\"formRules[].context\":{\"mode\":\"enum\",\"options\":[{\"value\":\"visibility\",\"label\":\"Visibility\"},{\"value\":\"readOnly\",\"label\":\"Read only\"},{\"value\":\"style\",\"label\":\"Style\"},{\"value\":\"validation\",\"label\":\"Validation\"},{\"value\":\"notification\",\"label\":\"Notification\"}]}}}}",
8896
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
8897
+ "contentHash": "96b0802d5e1fcb465a050fed18bf6bff72c8154d840320b6a30ff3b2f163544e",
8898
+ "sourceKind": "component_definition",
8899
+ "sourceId": "praxis-dynamic-form",
8900
+ "corpusVersion": "1.0.0"
8901
+ },
8902
+ {
8903
+ "chunkIndex": 25,
8904
+ "chunkKind": "context_pack",
8905
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"field.visibility.hide\",\"intentExamples\":[\"hide field\",\"ocultar campo\",\"esconder campo\",\"invisible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":true}]}},{\"id\":\"field.visibility.show\",\"intentExamples\":[\"show field\",\"mostrar campo\",\"exibir campo\",\"visible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":false}]}},{\"id\":\"field.label.set\",\"intentExamples\":[\"label\",\"rename field\",\"renomear campo\",\"titulo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"label\":\"{{value}}\"}]}},{\"id\":\"field.placeholder.set\",\"intentExamples\":[\"placeholder\",\"hint text\",\"texto de ajuda\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"placeholder\":\"{{value}}\"}]}},{\"id\":\"field.required.enable\",\"intentExamples\":[\"required\",\"obrigatorio\",\"mandatory\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":true}]}},{\"id\":\"field.required.disable\",\"intentExamples\":[\"optional\",\"nao obrigatorio\",\"opcional\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":false}]}},{\"id\":\"field.readonly.enable\",\"intentExamples\":[\"readonly\",\"somente leitura\",\"read only\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":true}]}},{\"id\":\"field.readonly.disable\",\"intentExamples\":[\"editable\",\"editavel\",\"read write\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":false}]}},{\"id\":\"field.disabled.enable\",\"intentExamples\":[\"disable field\",\"desabilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":true}]}},{\"id\":\"field.disabled.disable\",\"intentExamples\":[\"enable field\",\"habilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":false}]}},{\"id\":\"field.controlType.set\",\"intentExamples\":[\"control type\",\"tipo de campo\",\"controlType\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"controlType\":\"{{value}}\"}]}},{\"id\":\"field.icon.prefix.set\",\"intentExamples\":[\"prefix icon\",\"icone prefixo\",\"icon before\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"prefixIcon\":\"{{value}}\"}]}},{\"id\":\"field.icon.suffix.set\",\"intentExamples\":[\"suffix icon\",\"icone sufixo\",\"icon after\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"suffixIcon\":\"{{value}}\"}]}},{\"id\":\"section.title.set\",\"intentExamples\":[\"section title\",\"titulo da secao\",\"section name\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"title\":\"{{value}}\"}]}},{\"id\":\"section.description.set\",\"intentExamples\":[\"section description\",\"descricao da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"description\":\"{{value}}\"}]}},{\"id\":\"section.add\",\"intentExamples\":[\"add section\",\"adicionar secao\",\"nova secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{value}}\",\"title\":\"{{value}}\",\"rows\":[]}]},\"safetyNotes\":\"Certifique-se de que o ID da seção é único e relevante.\"},{\"id\":\"section.remove\",\"intentExamples\":[\"remove section\",\"remover secao\",\"excluir secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"section.order.set\",\"intentExamples\":[\"order section\",\"reordenar secao\",\"mover secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_order\":\"{{value}}\"}]},\"safetyNotes\":\"A reordenação de seções é uma operação que deve ser revisada.\"},{\"id\":\"row.add\",\"intentExamples\":[\"add row\",\"adicionar linha\",\"nova linha na secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"columns\":[]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da linha é único e relevante na seção.\"},{\"id\":\"row.remove\",\"intentExamples\":[\"remove row\",\"remover linha\",\"excluir linha da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]},\"safetyNotes\":\"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.add\",\"intentExamples\":[\"add column\",\"adicionar coluna\",\"nova coluna na linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"items\":[]}]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da coluna é único e relevante na linha.\"},{\"id\":\"column.remove\",\"intentExamples\":[\"remove column\",\"remover coluna\",\"excluir coluna da linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]}]},\"safetyNotes\":\"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.field.add\",\"intentExamples\":[\"add field to column\",\"adicionar campo a coluna\",\"colocar campo na coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"id\":\"field-{{value}}\",\"fieldName\":\"{{value}}\"}]}]}]}]},\"safetyNotes\":\"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"},{\"id\":\"column.field.remove\",\"intentExamples\":[\"remove field from column\",\"remover campo da coluna\",\"tirar campo da coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"fieldName\":\"{{value}}\",\"_remove\":true}]}]}]}]},\"safetyNotes\":\"Remover um campo de uma coluna pode alterar o layout do formulário.\"},{\"id\":\"actions.submit.label.set\",\"intentExamples\":[\"submit label\",\"rotulo salvar\",\"texto botao enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.submit.visible.set\",\"intentExamples\":[\"show submit\",\"esconder salvar\",\"visibilidade enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.label.set\",\"intentExamples\":[\"cancel label\",\"rotulo cancelar\",\"texto botao cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.visible.set\",\"intentExamples\":[\"show cancel\",\"esconder cancelar\",\"visibilidade cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.reset.label.set\",\"intentExamples\":[\"reset label\",\"rotulo resetar\",\"texto botao limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.reset.visible.set\",\"intentExamples\":[\"show reset\",\"esconder reset\",\"visibilidade limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"rule.add.visibility\",\"intentExamples\":[\"add visibility rule\",\"regra de visibilidade\",\"campo condicional\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{value.id}}\",\"name\":\"{{value.name}}\",\"targetType\":\"field\",\"targets\":[\"{{target}}\"],\"effect\":{\"condition\":\"{{value.condition}}\",\"properties\":{\"hidden\":false},\"propertiesWhenFalse\":{\"hidden\":true}}}]},\"safetyNotes\":\"Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao.\"},{\"id\":\"rule.remove\",\"intentExamples\":[\"remove rule\",\"excluir regra\",\"apagar regra\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"}]}}",
8906
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
8907
+ "contentHash": "5232cd538a89210decab9d4484dc0d6148fbdd9da5cca27f94d1fe0230a5f69d",
8908
+ "sourceKind": "component_definition",
8909
+ "sourceId": "praxis-dynamic-form",
8910
+ "corpusVersion": "1.0.0"
8911
+ },
8912
+ {
8913
+ "chunkIndex": 26,
8914
+ "chunkKind": "context_pack",
8915
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"rule.add.dependency\",\"intentExamples\":[\"adicionar dependencia\",\"campo depende de\",\"mostrar se\",\"obrigatorio se\",\"desabilitar se\",\"campo condicional\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"triggerField\",\"type\":\"STRING\",\"description\":\"Campo que controla a regra (ex: tipoPessoa)\"},{\"name\":\"conditionValue\",\"type\":\"STRING\",\"description\":\"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado pela regra (ex: cnpj)\"},{\"name\":\"effectType\",\"type\":\"ENUM\",\"options\":[\"visibility\",\"required\",\"disabled\"],\"description\":\"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"rule_{{params.triggerField}}_{{params.targetField}}\",\"name\":\"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"{{params.triggerField}}\"},\"{{params.conditionValue}}\"]},\"properties\":{\"hidden\":\"{{params.effectType === 'visibility' ? false : undefined}}\",\"required\":\"{{params.effectType === 'required' ? true : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? true : undefined}}\"},\"propertiesWhenFalse\":{\"hidden\":\"{{params.effectType === 'visibility' ? true : undefined}}\",\"required\":\"{{params.effectType === 'required' ? false : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? false : undefined}}\"}}}]},\"safetyNotes\":\"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"},{\"id\":\"rule.add.custom\",\"intentExamples\":[\"adicionar regra customizada\",\"regra complexa\",\"logica de formulario\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"id\",\"type\":\"STRING\",\"description\":\"ID único da regra\"},{\"name\":\"condition\",\"type\":\"STRING\",\"description\":\"Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \\\"and\\\": [{ \\\">\\\": [{ \\\"var\\\": \\\"idade\\\" }, 18] }, { \\\"==\\\": [{ \\\"var\\\": \\\"possuiHabilitacao\\\" }, true] }] })\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado\"},{\"name\":\"propertyName\",\"type\":\"STRING\",\"description\":\"Propriedade afetada (hidden, required, disabled, readOnly)\"},{\"name\":\"valueIfTrue\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for verdadeira\"},{\"name\":\"valueIfFalse\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for falsa\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{params.id}}\",\"name\":\"Regra Customizada: {{params.id}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":\"{{params.condition}}\",\"properties\":{\"{{params.propertyName}}\":\"{{params.valueIfTrue}}\"},\"propertiesWhenFalse\":{\"{{params.propertyName}}\":\"{{params.valueIfFalse}}\"}}}]}}]}}",
8916
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
8917
+ "contentHash": "4c58c0142f4bb7c1872cf2a56c04b9c6847f851be904535f3b8fb35c8a4d307a",
8918
+ "sourceKind": "component_definition",
8919
+ "sourceId": "praxis-dynamic-form",
8920
+ "corpusVersion": "1.0.0"
8921
+ },
8922
+ {
8923
+ "chunkIndex": 27,
8924
+ "chunkKind": "context_pack",
8925
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"fieldResolvers\":{\"fieldMetadata[]\":[\"name\",\"label\"],\"sections[]\":[\"id\",\"title\"],\"sections[].rows[].columns[].items[]\":[\"id\",\"fieldName\"],\"sections[].rows[].columns[].fields[]\":[]},\"hints\":[\"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\"Local fields are real form controls. Create them in fieldMetadata[] with source:\\\"local\\\", usually transient:true and submitPolicy:\\\"omit\\\", then place them as kind:\\\"field\\\" layout items.\",\"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\"Use sections[].rows[].columns[].items[] as the canonical mixed layout order. kind:\\\"field\\\" items reference fieldMetadata; kind:\\\"richContent\\\" items are visual blocks outside submit payload.\",\"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\"For field formRules that must calculate a FormControl value, use effect.properties.value with the closed envelope { expression: <JSON Logic> }, such as { expression: { yearsSince: [{ var: \\\"birthDate\\\" }] } }. Use the closed envelope { literal: <value> } for structured literal objects; do not add extra keys and do not generate TypeScript functions.\",\"For conditional side effects, use formCommandRules with effects[].kind:\\\"global-action\\\" and a structured globalAction ref. The visual editor authors the primary effect and preserves secondary effects from advanced JSON. Do not put alert/modal/navigation commands inside formRules[].effect.properties.\",\"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"]}}",
8926
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
8927
+ "contentHash": "da9c61a698f49946749c9c33ab672e544f6b66021de5242cbb663ff9866c9b97",
8928
+ "sourceKind": "component_definition",
8929
+ "sourceId": "praxis-dynamic-form",
8930
+ "corpusVersion": "1.0.0"
8931
+ },
8932
+ {
8933
+ "chunkIndex": 28,
8934
+ "chunkKind": "recipe",
8935
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment\",\"_comment\":\"Official Praxis Dynamic Form recipe for governed conditional command rules.\"}",
8936
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
8937
+ "contentHash": "6ec753dad14a7e7e39bc59fb4005980014a6ed4b983792c795dc10ccb3102bf9",
8938
+ "sourceKind": "component_definition",
8939
+ "sourceId": "praxis-dynamic-form",
8940
+ "corpusVersion": "1.0.0"
8941
+ },
8942
+ {
8943
+ "chunkIndex": 29,
8944
+ "chunkKind": "recipe",
8945
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment2\",\"_comment2\":\"Use when a form must execute host-mediated alerts or confirmations from declarative rules after computed values stabilize.\"}",
8946
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
8947
+ "contentHash": "109528d951024368d20c9e4c7304728105f50ace27c1c5ecd82ee3bd8e39949e",
8948
+ "sourceKind": "component_definition",
8949
+ "sourceId": "praxis-dynamic-form",
8950
+ "corpusVersion": "1.0.0"
8951
+ },
8952
+ {
8953
+ "chunkIndex": 30,
8954
+ "chunkKind": "recipe",
8955
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"variantId\":\"command-rules\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"status\":\"public-example\",\"tags\":[\"formCommandRules\",\"global-action\",\"computed-values\",\"business-rules\",\"llm-authoring\"],\"useWhen\":\"Create a metadata-driven form with computed values, conditional required fields and governed alert or confirmation dialogs without TypeScript host logic.\",\"examplePrompts\":[\"create a dynamic form rule that calculates age from birth date and alerts when a female applicant is under 18\",\"ask for confirmation when a vacation range starts on Friday\",\"show conditional command rules using dialog.alert and dialog.confirm\"]}}",
8956
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
8957
+ "contentHash": "862aa2573705213355785169f8550861a573424995e99f91c5b71e9b66519743",
8958
+ "sourceKind": "component_definition",
8959
+ "sourceId": "praxis-dynamic-form",
8960
+ "corpusVersion": "1.0.0"
8961
+ },
8962
+ {
8963
+ "chunkIndex": 31,
8964
+ "chunkKind": "recipe",
8965
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"platformValue\",\"platformValue\":{\"canonicalRuntime\":\"@praxisui/dynamic-form evaluates formRules first, stabilizes computed values, then evaluates formCommandRules.\",\"commandContract\":\"formCommandRules uses PraxisRuntimeConditionalEffectRule<PraxisRuntimeGlobalActionEffect> with effects[].kind = global-action and a structured GlobalActionRef.\",\"propertyBoundary\":\"Use formRules for local field/property/value changes. Use formCommandRules for side effects such as alert, confirm, navigation or host-mediated commands.\",\"policyBoundary\":\"Use policy for trigger, distinct, distinctBy and runOnInitialEvaluation. Do not encode operational throttling inside Json Logic condition.\",\"authoringBoundary\":\"The visual config editor exposes command rules and structured payload fields for the primary effect. JSON remains an advanced escape hatch, not the primary authoring path. payloadExpr is preserved from advanced JSON when no structured payload is authored, but it is not a visual field in this cut. Secondary effects remain advanced JSON-authored and are preserved when the primary effect is edited visually.\"}}",
8966
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
8967
+ "contentHash": "d01f928e890789cafa14a22682a62ac6df2c6c25b8807cb45ead09e0d892c72c",
8968
+ "sourceKind": "component_definition",
8969
+ "sourceId": "praxis-dynamic-form",
8970
+ "corpusVersion": "1.0.0"
8971
+ },
8972
+ {
8973
+ "chunkIndex": 32,
8974
+ "chunkKind": "recipe",
8975
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"authoringGuidance\",\"authoringGuidance\":[\"Keep condition as canonical Json Logic, not a string DSL.\",\"Use effect.properties.value with { \\\"expression\\\": ... } for computed values and { \\\"literal\\\": ... } for structured literal values.\",\"Do not put dialog.alert, dialog.confirm, showAlert, navigate or modal commands inside formRules[].effect.properties.\",\"Use formCommandRules[].effects[].globalAction.actionId for the host-mediated command.\",\"Use structured payload fields for the primary effect in the visual editor. Keep payloadExpr and secondary effects in advanced JSON for this cut.\",\"Use trigger on-condition-enter for side effects by default.\",\"Set runOnInitialEvaluation to false unless a command must intentionally run during initial hydration.\",\"Set distinct and distinctBy for value-change commands that should not repeat while the same condition/value remains active.\",\"For date-range commands, use the committed date range value, such as vacationPeriod.startDate, not transient picker preview state.\"]}",
8976
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
8977
+ "contentHash": "55159a7931ef7572d7fbc6c888f6e04d1c50870f6e850cdf0d645a420367dcf3",
8978
+ "sourceKind": "component_definition",
8979
+ "sourceId": "praxis-dynamic-form",
8980
+ "corpusVersion": "1.0.0"
8981
+ },
8982
+ {
8983
+ "chunkIndex": 33,
8984
+ "chunkKind": "recipe",
8985
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"teaches\",\"teaches\":[\"dynamic-form.formRules.computed-value\",\"dynamic-form.formCommandRules\",\"dynamic-form.formCommandRules.global-action\",\"dynamic-form.formCommandRules.policy\",\"global-action.dialog.alert\",\"global-action.dialog.confirm\",\"date-range.committed-value\"]}",
8986
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
8987
+ "contentHash": "d68cfc6ec6af19c378a6910df8f89be598ce9a5c998cc30b14a15a5a2f9c0e45",
8988
+ "sourceKind": "component_definition",
8989
+ "sourceId": "praxis-dynamic-form",
8990
+ "corpusVersion": "1.0.0"
8991
+ },
8992
+ {
8993
+ "chunkIndex": 34,
8994
+ "chunkKind": "recipe",
8995
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"testScenarios\",\"testScenarios\":[{\"id\":\"birthDate-age-alert-chain\",\"source\":\"business-rules-form-demo\",\"input\":{\"gender\":\"female\",\"birthDate\":\"2012-05-05\"},\"expects\":[\"formRules computes age before formCommandRules evaluate\",\"registration:female-underage-alert resolves dialog.alert from stabilized age\",\"guardianName remains a local property rule, not a command side effect\"]},{\"id\":\"distinct-age-alert\",\"source\":\"business-rules-form-demo\",\"input\":{\"gender\":\"female\",\"birthDate\":\"2012-05-05\"},\"expects\":[\"dialog.alert runs on condition enter\",\"the same age does not reopen the modal while the condition remains true\",\"distinct memory resets after the condition evaluates false\"]},{\"id\":\"friday-range-confirm\",\"source\":\"business-rules-form-demo\",\"input\":{\"vacationPeriod\":{\"startDate\":\"2026-05-01\",\"endDate\":\"2026-05-08\"}},\"expects\":[\"dialog.confirm evaluates only after startDate and endDate are committed\",\"distinctBy uses vacationPeriod.startDate\",\"picker preview state is not used as command input\"]},{\"id\":\"editor-preview-is-not-execution\",\"source\":\"config-editor\",\"input\":{\"mode\":\"preview\",\"actionId\":\"dialog.alert\"},\"expects\":[\"visual preview reports the command intent\",\"preview does not call GlobalActionService.executeRef\",\"apply/save must still validate actionId and required payload\"]}]}",
8996
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
8997
+ "contentHash": "0f3a4379c0db7f7032cef0165ccb3b659ed20c045d572b85e3bc1a8f2972617b",
8998
+ "sourceKind": "component_definition",
8999
+ "sourceId": "praxis-dynamic-form",
9000
+ "corpusVersion": "1.0.0"
9001
+ },
9002
+ {
9003
+ "chunkIndex": 35,
9004
+ "chunkKind": "recipe",
9005
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"config\",\"config\":{\"fieldMetadata\":[{\"name\":\"name\",\"label\":\"Name\",\"controlType\":\"input\",\"required\":true},{\"name\":\"gender\",\"label\":\"Gender\",\"controlType\":\"select\",\"required\":true,\"options\":[{\"label\":\"Female\",\"value\":\"female\"},{\"label\":\"Male\",\"value\":\"male\"},{\"label\":\"Other\",\"value\":\"other\"}]},{\"name\":\"birthDate\",\"label\":\"Birth date\",\"controlType\":\"datePicker\",\"manualInput\":false,\"hint\":\"Select from the calendar to avoid ambiguous date formats.\"},{\"name\":\"age\",\"label\":\"Age\",\"controlType\":\"numericTextBox\",\"required\":true,\"readOnly\":true,\"min\":0,\"max\":120},{\"name\":\"guardianName\",\"label\":\"Legal guardian\",\"controlType\":\"input\",\"placeholder\":\"Required for underage applicants\"},{\"name\":\"vacationPeriod\",\"label\":\"Vacation period\",\"controlType\":\"dateRange\",\"required\":true,\"minDate\":\"2026-01-01\",\"maxDate\":\"2026-12-31\"},{\"name\":\"reason\",\"label\":\"Notes\",\"controlType\":\"textarea\",\"rows\":3}],\"sections\":[{\"id\":\"registration\",\"title\":\"Registration\",\"appearance\":\"plain\",\"rows\":[{\"id\":\"registration-row\",\"columns\":[{\"id\":\"registration-left\",\"span\":{\"xs\":12,\"md\":6},\"fields\":[\"name\",\"gender\",\"birthDate\"]},{\"id\":\"registration-right\",\"span\":{\"xs\":12,\"md\":6},\"fields\":[\"age\",\"guardianName\"]}]}]},{\"id\":\"vacation\",\"title\":\"Vacation\",\"appearance\":\"plain\",\"rows\":[{\"id\":\"vacation-row\",\"columns\":[{\"id\":\"vacation-column\",\"span\":{\"xs\":12},\"fields\":[\"vacationPeriod\",\"reason\"]}]}]}],\"formRules\":[{\"id\":\"birth-date-computes-age\",\"name\":\"Birth date computes age\",\"targetType\":\"field\",\"targets\":[\"age\"],\"effect\":{\"condition\":{\"!\":[{\"isBlank\":[{\"var\":\"birthDate\"}]}]},\"properties\":{\"value\":{\"expression\":{\"yearsSince\":[{\"var\":\"birthDate\"}]}},\"hint\":\"Calculated from birth date.\"},\"propertiesWhenFalse\":{\"value\":{\"literal\":null},\"hint\":\"\"}}},{\"id\":\"female-underage-requires-guardian\",\"name\":\"Female underage applicant requires guardian\",\"targetType\":\"field\",\"targets\":[\"guardianName\"],\"effect\":{\"condition\":{\"and\":[{\"===\":[{\"var\":\"gender\"},\"female\"]},{\"<\":[{\"var\":\"age\"},18]}]},\"properties\":{\"required\":true,\"color\":\"warn\",\"hint\":\"Required for female applicants under 18.\"},\"propertiesWhenFalse\":{\"required\":false,\"color\":\"primary\",\"hint\":\"\"}}}],\"formCommandRules\":[{\"id\":\"registration:female-underage-alert\",\"description\":\"Alert when a female applicant is under 18 after age is computed.\",\"condition\":{\"and\":[{\"===\":[{\"var\":\"gender\"},\"female\"]},{\"!\":[{\"isBlank\":[{\"var\":\"age\"}]}]},{\"<\":[{\"var\":\"age\"},18]}]},\"effects\":[{\"id\":\"minimum-age-alert\",\"kind\":\"global-action\",\"globalAction\":{\"actionId\":\"dialog.alert\",\"payload\":{\"title\":\"Minimum age\",\"message\":\"For female registration, the expected minimum age is 18.\",\"okLabel\":\"Understood\",\"variant\":\"warning\"}}}],\"policy\":{\"trigger\":\"on-condition-enter\",\"distinct\":true,\"distinctBy\":\"age\",\"runOnInitialEvaluation\":false}},{\"id\":\"vacation:friday-start-confirm\",\"description\":\"Confirm when the committed vacation range starts on Friday.\",\"condition\":{\"and\":[{\"!\":[{\"isBlank\":[{\"var\":\"vacationPeriod.startDate\"}]}]},{\"!\":[{\"isBlank\":[{\"var\":\"vacationPeriod.endDate\"}]}]},{\"weekdayIn\":[{\"var\":\"vacationPeriod.startDate\"},[5]]}]},\"effects\":[{\"id\":\"friday-start-confirm\",\"kind\":\"global-action\",\"globalAction\":{\"actionId\":\"dialog.confirm\",\"payload\":{\"title\":\"Friday start\",\"message\":\"The vacation start date falls on a Friday. Do you want to keep this choice?\",\"confirmLabel\":\"Keep\",\"cancelLabel\":\"Review\",\"variant\":\"question\"}}}],\"policy\":{\"trigger\":\"on-condition-enter\",\"distinct\":true,\"distinctBy\":\"vacationPeriod.startDate\",\"runOnInitialEvaluation\":false}}],\"actions\":{\"submit\":{\"visible\":true,\"label\":\"Submit\",\"icon\":\"send\",\"color\":\"primary\",\"variant\":\"raised\"},\"cancel\":{\"visible\":false},\"reset\":{\"visible\":false}}}}",
9006
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
9007
+ "contentHash": "e198021d62df71257ae1d9056f246ff178d66bc2fc51862915f80e0640bb4f78",
9008
+ "sourceKind": "component_definition",
9009
+ "sourceId": "praxis-dynamic-form",
9010
+ "corpusVersion": "1.0.0"
9011
+ },
9012
+ {
9013
+ "chunkIndex": 36,
9014
+ "chunkKind": "recipe",
9015
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"diagnosticExpectations\",\"diagnosticExpectations\":{\"computedBeforeCommands\":true,\"commandEffectsAreGlobalActions\":true,\"commandsAreNotFormRuleProperties\":true,\"runOnInitialEvaluationDefault\":false,\"committedDateRangeOnly\":true,\"previewDoesNotExecuteGlobalAction\":true,\"payloadExprAdvancedJsonOnly\":true,\"scenarioSource\":\"business-rules-form-demo\"}}",
9016
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
9017
+ "contentHash": "33802c748fdb461871d4d9097d0eabb5f79f774f36c39493bd293d427ac6f70f",
9018
+ "sourceKind": "component_definition",
9019
+ "sourceId": "praxis-dynamic-form",
9020
+ "corpusVersion": "1.0.0"
9021
+ },
9022
+ {
9023
+ "chunkIndex": 37,
9024
+ "chunkKind": "recipe",
9025
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment\",\"_comment\":\"Official recipe for the procurement Entity Lookup cascade published by praxis-api-quickstart.\"}",
9026
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
9027
+ "contentHash": "ea33a5b5e5cc4858d76bc55e6864606e8b080679f7090cd9b03f1f40a39cb68a",
9028
+ "sourceKind": "component_definition",
9029
+ "sourceId": "praxis-dynamic-form",
9030
+ "corpusVersion": "1.0.0"
9031
+ },
9032
+ {
9033
+ "chunkIndex": 38,
9034
+ "chunkKind": "recipe",
9035
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment2\",\"_comment2\":\"Use this when agents need a metadata-driven form that selects governed business entities instead of simple option lists.\"}",
9036
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
9037
+ "contentHash": "79c7431f41bb9bd37e3671913275c5d7db00b5e1ef978a605aa5d346003d1d91",
9038
+ "sourceKind": "component_definition",
9039
+ "sourceId": "praxis-dynamic-form",
9040
+ "corpusVersion": "1.0.0"
9041
+ },
9042
+ {
9043
+ "chunkIndex": 39,
9044
+ "chunkKind": "recipe",
9045
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"variantId\":\"entity-lookup-procurement\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"status\":\"public-example\",\"tags\":[\"entity-lookup\",\"resource-entity\",\"option-source\",\"cascading\",\"rehydration\",\"procurement\",\"quickstart\"],\"useWhen\":\"Create a purchase order form with real company, supplier, contract and product entity selections.\",\"examplePrompts\":[\"create a purchase order form with company supplier contract and product lookups\",\"generate a form with dependent entityLookup fields backed by optionSource metadata\",\"add a governed lookup cascade with status policy and by-ids rehydration\"]}}",
9046
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
9047
+ "contentHash": "03d51f1b95a9b6466ffe8500478cc1a42ef84cf173e887b9a5eefc0abc509c9b",
9048
+ "sourceKind": "component_definition",
9049
+ "sourceId": "praxis-dynamic-form",
9050
+ "corpusVersion": "1.0.0"
9051
+ },
9052
+ {
9053
+ "chunkIndex": 40,
9054
+ "chunkKind": "recipe",
9055
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"platformValue\",\"platformValue\":{\"canonicalOwner\":\"praxis-metadata-starter publishes x-ui.optionSource with RESOURCE_ENTITY semantics.\",\"referenceHost\":\"praxis-api-quickstart exposes the procurement resource and its option-source endpoints.\",\"sharedTypes\":\"@praxisui/core owns OptionSourceMetadata and FieldControlType.ENTITY_LOOKUP.\",\"runtime\":\"@praxisui/dynamic-fields renders entityLookup and inlineEntityLookup.\",\"formIntegration\":\"@praxisui/dynamic-form keeps the submitted payload canonical while the UI rehydrates labels, status and disabled reasons.\",\"authoring\":\"@praxisui/metadata-editor exposes the optionSource.* fields used below.\"}}",
9056
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
9057
+ "contentHash": "c61ed38e39e49dbda4856c579cd3bc8a0d23b0e81b4b88fd1cb6ef902686ea63",
9058
+ "sourceKind": "component_definition",
9059
+ "sourceId": "praxis-dynamic-form",
9060
+ "corpusVersion": "1.0.0"
9061
+ },
9062
+ {
9063
+ "chunkIndex": 41,
9064
+ "chunkKind": "recipe",
9065
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"backendSurfaces\",\"backendSurfaces\":[\"GET /schemas/filtered?path=/api/procurement/purchase-orders&operation=post&schemaType=request\",\"POST /api/procurement/purchase-orders/filter\",\"GET /api/procurement/purchase-orders/capabilities\",\"POST /api/procurement/companies/option-sources/company/options/filter\",\"POST /api/procurement/suppliers/option-sources/supplier/options/filter\",\"POST /api/procurement/contracts/option-sources/contract/options/filter\",\"POST /api/procurement/products/option-sources/product/options/filter\"]}",
9066
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
9067
+ "contentHash": "d34830220c2dbcc979309c7d8d5673984f4f9fd30d7e6460571f09af89b225a6",
9068
+ "sourceKind": "component_definition",
9069
+ "sourceId": "praxis-dynamic-form",
9070
+ "corpusVersion": "1.0.0"
9071
+ },
9072
+ {
9073
+ "chunkIndex": 42,
9074
+ "chunkKind": "recipe",
9075
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"contractNotes\",\"contractNotes\":[\"Persist only stable IDs: companyId, supplierId, contractId and productId.\",\"Use x-ui.optionSource.dependsOn for cascades and add dependencyFilterMap only when the UI field differs from the backend filter key.\",\"Use selectionPolicy.allowRetainInvalidExistingValue to display historical invalid values while blocking new selections.\",\"Use capabilities.byIds=true when edit mode must rehydrate IDs already saved in the resource.\",\"Use dependencyLoadOnChange=immediate and resetOnDependentChange when child lookups must refresh and clear stale values as soon as a parent changes.\",\"Use detail.hrefTemplate or routeTemplate only as navigation metadata; it must not change the submitted value.\"]}",
9076
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
9077
+ "contentHash": "1095442697939306631284843bc300ac33c79f34f763179bd9c0b2bbe17d0f40",
9078
+ "sourceKind": "component_definition",
9079
+ "sourceId": "praxis-dynamic-form",
9080
+ "corpusVersion": "1.0.0"
9081
+ },
9082
+ {
9083
+ "chunkIndex": 43,
9084
+ "chunkKind": "recipe",
9085
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"renderingExpectations\",\"renderingExpectations\":{\"inline\":\"Default rendering uses an input-like trigger, search dropdown and rich rows with code, label, description, status and blocked reasons.\",\"selectedCard\":\"After selection, show the canonical entity identity with code, label, description, status badges and actions such as detail, change, copy code and clear.\",\"readonly\":\"Readonly mode rehydrates the saved ID and renders label, status and disabled reason without allowing changes.\",\"compact\":\"Compact mode is intended for table filters and dense forms: preserve label, code and status while reducing secondary text.\",\"dialog\":\"Dialog/value-help mode reuses the same optionSource contract and can add table search, column filters, preview panel and selection confirmation.\"}}",
9086
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
9087
+ "contentHash": "cb281998c16580abe5005ec298fcf26e4321a352723ef786f85462be8e158c1e",
9088
+ "sourceKind": "component_definition",
9089
+ "sourceId": "praxis-dynamic-form",
9090
+ "corpusVersion": "1.0.0"
9091
+ },
9092
+ {
9093
+ "chunkIndex": 44,
9094
+ "chunkKind": "recipe",
9095
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"metadata\",\"metadata\":{\"version\":\"2.0\",\"resourcePath\":\"procurement/purchase-orders\",\"resourceKey\":\"procurement.purchase-orders\",\"operation\":\"create\"}}",
9096
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
9097
+ "contentHash": "e014f01fe3ac2025858aed873848b203b2dd03db17f471129222206f4507b786",
8678
9098
  "sourceKind": "component_definition",
8679
9099
  "sourceId": "praxis-dynamic-form",
8680
9100
  "corpusVersion": "1.0.0"
8681
9101
  },
8682
9102
  {
8683
- "chunkIndex": 3,
8684
- "chunkKind": "context_pack",
8685
- "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}",
8686
- "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
8687
- "contentHash": "fce0638895fb6284d9f1f6c896a2eeb5945f4877b418f942a1872f60b1541c15",
9103
+ "chunkIndex": 45,
9104
+ "chunkKind": "recipe",
9105
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"fieldMetadata\",\"fieldMetadata\":[{\"name\":\"companyId\",\"label\":\"Empresa\",\"placeholder\":\"Buscar empresa...\",\"controlType\":\"entityLookup\",\"required\":true,\"endpoint\":\"/api/procurement/companies/option-sources/company/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"optionSource\":{\"key\":\"company\",\"type\":\"RESOURCE_ENTITY\",\"entityKey\":\"company\",\"resourcePath\":\"/api/procurement/companies\",\"filterField\":\"companyId\",\"propertyPath\":\"id\",\"valuePropertyPath\":\"id\",\"labelPropertyPath\":\"legalName\",\"codePropertyPath\":\"code\",\"descriptionPropertyPaths\":[\"documentNumber\",\"city\",\"state\"],\"statusPropertyPath\":\"status\",\"disabledReasonPropertyPath\":\"disabledReason\",\"searchPropertyPaths\":[\"code\",\"legalName\",\"documentNumber\"],\"searchMode\":\"contains\",\"pageSize\":25,\"includeIds\":true,\"selectionPolicy\":{\"statusPropertyPath\":\"status\",\"allowedStatuses\":[\"ACTIVE\"],\"blockedStatuses\":[\"INACTIVE\",\"BLOCKED\"],\"allowRetainInvalidExistingValue\":true},\"capabilities\":{\"filter\":true,\"byIds\":true,\"detail\":true,\"navigateToDetail\":true,\"auditSnapshot\":true},\"detail\":{\"hrefTemplate\":\"/api/procurement/companies/{id}\",\"routeTemplate\":\"/procurement/companies/{id}\",\"openDetailMode\":\"route\"}}},{\"name\":\"supplierId\",\"label\":\"Fornecedor\",\"placeholder\":\"Buscar fornecedor homologado...\",\"controlType\":\"entityLookup\",\"required\":true,\"endpoint\":\"/api/procurement/suppliers/option-sources/supplier/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"dependentField\":\"companyId\",\"dependencyLoadOnChange\":\"immediate\",\"resetOnDependentChange\":true,\"optionSource\":{\"key\":\"supplier\",\"type\":\"RESOURCE_ENTITY\",\"entityKey\":\"supplier\",\"resourcePath\":\"/api/procurement/suppliers\",\"filterField\":\"supplierId\",\"dependsOn\":[\"companyId\"],\"propertyPath\":\"id\",\"valuePropertyPath\":\"id\",\"labelPropertyPath\":\"legalName\",\"codePropertyPath\":\"code\",\"descriptionPropertyPaths\":[\"documentNumber\",\"homologationStatus\",\"riskLevel\"],\"statusPropertyPath\":\"status\",\"disabledReasonPropertyPath\":\"disabledReason\",\"searchPropertyPaths\":[\"code\",\"legalName\",\"documentNumber\"],\"searchMode\":\"contains\",\"pageSize\":25,\"includeIds\":true,\"selectionPolicy\":{\"statusPropertyPath\":\"status\",\"allowedStatuses\":[\"ACTIVE\",\"APPROVED\"],\"blockedStatuses\":[\"INACTIVE\",\"BLOCKED\"],\"allowRetainInvalidExistingValue\":true},\"capabilities\":{\"filter\":true,\"byIds\":true,\"detail\":true,\"navigateToDetail\":true,\"auditSnapshot\":true},\"detail\":{\"hrefTemplate\":\"/api/procurement/suppliers/{id}\",\"routeTemplate\":\"/procurement/suppliers/{id}\",\"openDetailMode\":\"route\"}}},{\"name\":\"contractId\",\"label\":\"Contrato\",\"placeholder\":\"Buscar contrato vigente...\",\"controlType\":\"entityLookup\",\"endpoint\":\"/api/procurement/contracts/option-sources/contract/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"dependentField\":\"supplierId\",\"dependencyLoadOnChange\":\"immediate\",\"resetOnDependentChange\":true,\"optionSource\":{\"key\":\"contract\",\"type\":\"RESOURCE_ENTITY\",\"entityKey\":\"contract\",\"resourcePath\":\"/api/procurement/contracts\",\"filterField\":\"contractId\",\"dependsOn\":[\"companyId\",\"supplierId\"],\"propertyPath\":\"id\",\"valuePropertyPath\":\"id\",\"labelPropertyPath\":\"number\",\"descriptionPropertyPaths\":[\"supplierName\",\"validUntil\",\"currency\"],\"statusPropertyPath\":\"status\",\"disabledReasonPropertyPath\":\"disabledReason\",\"searchPropertyPaths\":[\"number\",\"supplierName\",\"currency\"],\"searchMode\":\"contains\",\"pageSize\":25,\"includeIds\":true,\"selectionPolicy\":{\"statusPropertyPath\":\"status\",\"allowedStatuses\":[\"ACTIVE\",\"SIGNED\"],\"blockedStatuses\":[\"EXPIRED\",\"CANCELLED\"],\"allowRetainInvalidExistingValue\":true},\"capabilities\":{\"filter\":true,\"byIds\":true,\"detail\":true,\"navigateToDetail\":true,\"auditSnapshot\":true},\"detail\":{\"hrefTemplate\":\"/api/procurement/contracts/{id}\",\"routeTemplate\":\"/procurement/contracts/{id}\",\"openDetailMode\":\"route\"}}},{\"name\":\"productId\",\"label\":\"Produto\",\"placeholder\":\"Buscar produto disponivel...\",\"controlType\":\"entityLookup\",\"required\":true,\"endpoint\":\"/api/procurement/products/option-sources/product/options/filter\",\"displayField\":\"label\",\"valueField\":\"id\",\"dependentField\":\"contractId\",\"dependencyLoadOnChange\":\"immediate\",\"resetOnDependentChange\":true,\"optionSource\":{\"key\":\"product\",\"type\":\"RESOURCE_ENTITY\",\"entityKey\":\"product\",\"resourcePath\":\"/api/procurement/products\",\"filterField\":\"productId\",\"dependsOn\":[\"companyId\",\"contractId\"],\"propertyPath\":\"id\",\"valuePropertyPath\":\"id\",\"labelPropertyPath\":\"name\",\"codePropertyPath\":\"sku\",\"descriptionPropertyPaths\":[\"categoryName\",\"stockAvailable\",\"unitOfMeasure\"],\"statusPropertyPath\":\"status\",\"disabledReasonPropertyPath\":\"disabledReason\",\"searchPropertyPaths\":[\"sku\",\"name\",\"categoryName\"],\"searchMode\":\"contains\",\"pageSize\":25,\"includeIds\":true,\"selectionPolicy\":{\"statusPropertyPath\":\"status\",\"allowedStatuses\":[\"ACTIVE\",\"AVAILABLE\"],\"blockedStatuses\":[\"INACTIVE\",\"BLOCKED\"],\"allowRetainInvalidExistingValue\":true},\"capabilities\":{\"filter\":true,\"byIds\":true,\"detail\":true,\"navigateToDetail\":true,\"auditSnapshot\":true},\"detail\":{\"hrefTemplate\":\"/api/procurement/products/{id}\",\"routeTemplate\":\"/procurement/products/{id}\",\"openDetailMode\":\"route\"}}},{\"name\":\"orderDate\",\"label\":\"Data do pedido\",\"controlType\":\"date\"},{\"name\":\"currency\",\"label\":\"Moeda\",\"controlType\":\"select\",\"options\":[{\"label\":\"BRL\",\"value\":\"BRL\"},{\"label\":\"USD\",\"value\":\"USD\"}]},{\"name\":\"quantity\",\"label\":\"Quantidade\",\"controlType\":\"numericTextBox\",\"validators\":{\"min\":1}}]}",
9106
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
9107
+ "contentHash": "2eb08e2557d2ce7f356d0d1a530645401cbacf094a65ce7d78230dffa7fedf09",
8688
9108
  "sourceKind": "component_definition",
8689
9109
  "sourceId": "praxis-dynamic-form",
8690
9110
  "corpusVersion": "1.0.0"
8691
9111
  },
8692
9112
  {
8693
- "chunkIndex": 4,
9113
+ "chunkIndex": 46,
8694
9114
  "chunkKind": "recipe",
8695
- "content": "{\n \"_comment\": \"Official Praxis Dynamic Form recipe for governed conditional command rules.\",\n \"_comment2\": \"Use when a form must execute host-mediated alerts or confirmations from declarative rules after computed values stabilize.\",\n \"templateMeta\": {\n \"variantId\": \"command-rules\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"status\": \"public-example\",\n \"tags\": [\n \"formCommandRules\",\n \"global-action\",\n \"computed-values\",\n \"business-rules\",\n \"llm-authoring\"\n ],\n \"useWhen\": \"Create a metadata-driven form with computed values, conditional required fields and governed alert or confirmation dialogs without TypeScript host logic.\",\n \"examplePrompts\": [\n \"create a dynamic form rule that calculates age from birth date and alerts when a female applicant is under 18\",\n \"ask for confirmation when a vacation range starts on Friday\",\n \"show conditional command rules using dialog.alert and dialog.confirm\"\n ]\n },\n \"platformValue\": {\n \"canonicalRuntime\": \"@praxisui/dynamic-form evaluates formRules first, stabilizes computed values, then evaluates formCommandRules.\",\n \"commandContract\": \"formCommandRules uses PraxisRuntimeConditionalEffectRule<PraxisRuntimeGlobalActionEffect> with effects[].kind = global-action and a structured GlobalActionRef.\",\n \"propertyBoundary\": \"Use formRules for local field/property/value changes. Use formCommandRules for side effects such as alert, confirm, navigation or host-mediated commands.\",\n \"policyBoundary\": \"Use policy for trigger, distinct, distinctBy and runOnInitialEvaluation. Do not encode operational throttling inside Json Logic condition.\",\n \"authoringBoundary\": \"The visual config editor exposes command rules and structured payload fields for the primary effect. JSON remains an advanced escape hatch, not the primary authoring path. payloadExpr is preserved from advanced JSON when no structured payload is authored, but it is not a visual field in this cut. Secondary effects remain advanced JSON-authored and are preserved when the primary effect is edited visually.\"\n },\n \"authoringGuidance\": [\n \"Keep condition as canonical Json Logic, not a string DSL.\",\n \"Use effect.properties.value with { \\\"expression\\\": ... } for computed values and { \\\"literal\\\": ... } for structured literal values.\",\n \"Do not put dialog.alert, dialog.confirm, showAlert, navigate or modal commands inside formRules[].effect.properties.\",\n \"Use formCommandRules[].effects[].globalAction.actionId for the host-mediated command.\",\n \"Use structured payload fields for the primary effect in the visual editor. Keep payloadExpr and secondary effects in advanced JSON for this cut.\",\n \"Use trigger on-condition-enter for side effects by default.\",\n \"Set runOnInitialEvaluation to false unless a command must intentionally run during initial hydration.\",\n \"Set distinct and distinctBy for value-change commands that should not repeat while the same condition/value remains active.\",\n \"For date-range commands, use the committed date range value, such as vacationPeriod.startDate, not transient picker preview state.\"\n ],\n \"teaches\": [\n \"dynamic-form.formRules.computed-value\",\n \"dynamic-form.formCommandRules\",\n \"dynamic-form.formCommandRules.global-action\",\n \"dynamic-form.formCommandRules.policy\",\n \"global-action.dialog.alert\",\n \"global-action.dialog.confirm\",\n \"date-range.committed-value\"\n ],\n \"testScenarios\": [\n {\n \"id\": \"birthDate-age-alert-chain\",\n \"source\": \"business-rules-form-demo\",\n \"input\": {\n \"gender\": \"female\",\n \"birthDate\": \"2012-05-05\"\n },\n \"expects\": [\n \"formRules computes age before formCommandRules evaluate\",\n \"registration:female-underage-alert resolves dialog.alert from stabilized age\",\n \"guardianName remains a local property rule, not a command side effect\"\n ]\n },\n {\n \"id\": \"distinct-age-alert\",\n \"source\": \"business-rules-form-demo\",\n \"input\": {\n \"gender\": \"female\",\n \"birthDate\": \"2012-05-05\"\n },\n \"expects\": [\n \"dialog.alert runs on condition enter\",\n \"the same age does not reopen the modal while the condition remains true\",\n \"distinct memory resets after the condition evaluates false\"\n ]\n },\n {\n \"id\": \"friday-range-confirm\",\n \"source\": \"business-rules-form-demo\",\n \"input\": {\n \"vacationPeriod\": {\n \"startDate\": \"2026-05-01\",\n \"endDate\": \"2026-05-08\"\n }\n },\n \"expects\": [\n \"dialog.confirm evaluates only after startDate and endDate are committed\",\n \"distinctBy uses vacationPeriod.startDate\",\n \"picker preview state is not used as command input\"\n ]\n },\n {\n \"id\": \"editor-preview-is-not-execution\",\n \"source\": \"config-editor\",\n \"input\": {\n \"mode\": \"preview\",\n \"actionId\": \"dialog.alert\"\n },\n \"expects\": [\n \"visual preview reports the command intent\",\n \"preview does not call GlobalActionService.executeRef\",\n \"apply/save must still validate actionId and required payload\"\n ]\n }\n ],\n \"config\": {\n \"fieldMetadata\": [\n {\n \"name\": \"name\",\n \"label\": \"Name\",\n \"controlType\": \"input\",\n \"required\": true\n },\n {\n \"name\": \"gender\",\n \"label\": \"Gender\",\n \"controlType\": \"select\",\n \"required\": true,\n \"options\": [\n { \"label\": \"Female\", \"value\": \"female\" },\n { \"label\": \"Male\", \"value\": \"male\" },\n { \"label\": \"Other\", \"value\": \"other\" }\n ]\n },\n {\n \"name\": \"birthDate\",\n \"label\": \"Birth date\",\n \"controlType\": \"datePicker\",\n \"manualInput\": false,\n \"hint\": \"Select from the calendar to avoid ambiguous date formats.\"\n },\n {\n \"name\": \"age\",\n \"label\": \"Age\",\n \"controlType\": \"numericTextBox\",\n \"required\": true,\n \"readOnly\": true,\n \"min\": 0,\n \"max\": 120\n },\n {\n \"name\": \"guardianName\",\n \"label\": \"Legal guardian\",\n \"controlType\": \"input\",\n \"placeholder\": \"Required for underage applicants\"\n },\n {\n \"name\": \"vacationPeriod\",\n \"label\": \"Vacation period\",\n \"controlType\": \"dateRange\",\n \"required\": true,\n \"minDate\": \"2026-01-01\",\n \"maxDate\": \"2026-12-31\"\n },\n {\n \"name\": \"reason\",\n \"label\": \"Notes\",\n \"controlType\": \"textarea\",\n \"rows\": 3\n }\n ],\n \"sections\": [\n {\n \"id\": \"registration\",\n \"title\": \"Registration\",\n \"appearance\": \"plain\",\n \"rows\": [\n {\n \"id\": \"registration-row\",\n \"columns\": [\n {\n \"id\": \"registration-left\",\n \"span\": { \"xs\": 12, \"md\": 6 },\n \"fields\": [\"name\", \"gender\", \"birthDate\"]\n },\n {\n \"id\": \"registration-right\",\n \"span\": { \"xs\": 12, \"md\": 6 },\n \"fields\": [\"age\", \"guardianName\"]\n }\n ]\n }\n ]\n },\n {\n \"id\": \"vacation\",\n \"title\": \"Vacation\",\n \"appearance\": \"plain\",\n \"rows\": [\n {\n \"id\": \"vacation-row\",\n \"columns\": [\n {\n \"id\": \"vacation-column\",\n \"span\": { \"xs\": 12 },\n \"fields\": [\"vacationPeriod\", \"reason\"]\n }\n ]\n }\n ]\n }\n ],\n \"formRules\": [\n {\n \"id\": \"birth-date-computes-age\",\n \"name\": \"Birth date computes age\",\n \"targetType\": \"field\",\n \"targets\": [\"age\"],\n \"effect\": {\n \"condition\": {\n \"!\": [\n { \"isBlank\": [{ \"var\": \"birthDate\" }] }\n ]\n },\n \"properties\": {\n \"value\": {\n \"expression\": {\n \"yearsSince\": [{ \"var\": \"birthDate\" }]\n }\n },\n \"hint\": \"Calculated from birth date.\"\n },\n \"propertiesWhenFalse\": {\n \"value\": { \"literal\": null },\n \"hint\": \"\"\n }\n }\n },\n {\n \"id\": \"female-underage-requires-guardian\",\n \"name\": \"Female underage applicant requires guardian\",\n \"targetType\": \"field\",\n \"targets\": [\"guardianName\"],\n \"effect\": {\n \"condition\": {\n \"and\": [\n { \"===\": [{ \"var\": \"gender\" }, \"female\"] },\n { \"<\": [{ \"var\": \"age\" }, 18] }\n ]\n },\n \"properties\": {\n \"required\": true,\n \"color\": \"warn\",\n \"hint\": \"Required for female applicants under 18.\"\n },\n \"propertiesWhenFalse\": {\n \"required\": false,\n \"color\": \"primary\",\n \"hint\": \"\"\n }\n }\n }\n ],\n \"formCommandRules\": [\n {\n \"id\": \"registration:female-underage-alert\",\n \"description\": \"Alert when a female applicant is under 18 after age is computed.\",\n \"condition\": {\n \"and\": [\n { \"===\": [{ \"var\": \"gender\" }, \"female\"] },\n { \"!\": [{ \"isBlank\": [{ \"var\": \"age\" }] }] },\n { \"<\": [{ \"var\": \"age\" }, 18] }\n ]\n },\n \"effects\": [\n {\n \"id\": \"minimum-age-alert\",\n \"kind\": \"global-action\",\n \"globalAction\": {\n \"actionId\": \"dialog.alert\",\n \"payload\": {\n \"title\": \"Minimum age\",\n \"message\": \"For female registration, the expected minimum age is 18.\",\n \"okLabel\": \"Understood\",\n \"variant\": \"warning\"\n }\n }\n }\n ],\n \"policy\": {\n \"trigger\": \"on-condition-enter\",\n \"distinct\": true,\n \"distinctBy\": \"age\",\n \"runOnInitialEvaluation\": false\n }\n },\n {\n \"id\": \"vacation:friday-start-confirm\",\n \"description\": \"Confirm when the committed vacation range starts on Friday.\",\n \"condition\": {\n \"and\": [\n { \"!\": [{ \"isBlank\": [{ \"var\": \"vacationPeriod.startDate\" }] }] },\n { \"!\": [{ \"isBlank\": [{ \"var\": \"vacationPeriod.endDate\" }] }] },\n { \"weekdayIn\": [{ \"var\": \"vacationPeriod.startDate\" }, [5]] }\n ]\n },\n \"effects\": [\n {\n \"id\": \"friday-start-confirm\",\n \"kind\": \"global-action\",\n \"globalAction\": {\n \"actionId\": \"dialog.confirm\",\n \"payload\": {\n \"title\": \"Friday start\",\n \"message\": \"The vacation start date falls on a Friday. Do you want to keep this choice?\",\n \"confirmLabel\": \"Keep\",\n \"cancelLabel\": \"Review\",\n \"variant\": \"question\"\n }\n }\n }\n ],\n \"policy\": {\n \"trigger\": \"on-condition-enter\",\n \"distinct\": true,\n \"distinctBy\": \"vacationPeriod.startDate\",\n \"runOnInitialEvaluation\": false\n }\n }\n ],\n \"actions\": {\n \"submit\": {\n \"visible\": true,\n \"label\": \"Submit\",\n \"icon\": \"send\",\n \"color\": \"primary\",\n \"variant\": \"raised\"\n },\n \"cancel\": { \"visible\": false },\n \"reset\": { \"visible\": false }\n }\n },\n \"diagnosticExpectations\": {\n \"computedBeforeCommands\": true,\n \"commandEffectsAreGlobalActions\": true,\n \"commandsAreNotFormRuleProperties\": true,\n \"runOnInitialEvaluationDefault\": false,\n \"committedDateRangeOnly\": true,\n \"previewDoesNotExecuteGlobalAction\": true,\n \"payloadExprAdvancedJsonOnly\": true,\n \"scenarioSource\": \"business-rules-form-demo\"\n }\n}\n",
8696
- "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.command-rules.json",
8697
- "contentHash": "d7528a84ee8ac766f11dfe6edd1cb3c32ef0dc0168b940fe4b9734398e3ca36d",
9115
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"sections\",\"sections\":[{\"id\":\"commercial-context\",\"title\":\"Commercial context\",\"rows\":[{\"id\":\"commercial-context-row\",\"columns\":[{\"id\":\"company-column\",\"fields\":[\"companyId\",\"orderDate\"]},{\"id\":\"currency-column\",\"fields\":[\"currency\",\"quantity\"]}]}]},{\"id\":\"purchase-entities\",\"title\":\"Purchase entities\",\"rows\":[{\"id\":\"purchase-entities-row-1\",\"columns\":[{\"id\":\"supplier-column\",\"fields\":[\"supplierId\"]},{\"id\":\"contract-column\",\"fields\":[\"contractId\"]}]},{\"id\":\"purchase-entities-row-2\",\"columns\":[{\"id\":\"product-column\",\"fields\":[\"productId\"]}]}]}]}",
9116
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
9117
+ "contentHash": "3acfd01619e4e4db781d4e51f58122727ff2c59745f5d23b25074aeb83eb176a",
8698
9118
  "sourceKind": "component_definition",
8699
9119
  "sourceId": "praxis-dynamic-form",
8700
9120
  "corpusVersion": "1.0.0"
8701
9121
  },
8702
9122
  {
8703
- "chunkIndex": 5,
9123
+ "chunkIndex": 47,
8704
9124
  "chunkKind": "recipe",
8705
- "content": "{\n \"_comment\": \"Official recipe for the procurement Entity Lookup cascade published by praxis-api-quickstart.\",\n \"_comment2\": \"Use this when agents need a metadata-driven form that selects governed business entities instead of simple option lists.\",\n \"templateMeta\": {\n \"variantId\": \"entity-lookup-procurement\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"status\": \"public-example\",\n \"tags\": [\n \"entity-lookup\",\n \"resource-entity\",\n \"option-source\",\n \"cascading\",\n \"rehydration\",\n \"procurement\",\n \"quickstart\"\n ],\n \"useWhen\": \"Create a purchase order form with real company, supplier, contract and product entity selections.\",\n \"examplePrompts\": [\n \"create a purchase order form with company supplier contract and product lookups\",\n \"generate a form with dependent entityLookup fields backed by optionSource metadata\",\n \"add a governed lookup cascade with status policy and by-ids rehydration\"\n ]\n },\n \"platformValue\": {\n \"canonicalOwner\": \"praxis-metadata-starter publishes x-ui.optionSource with RESOURCE_ENTITY semantics.\",\n \"referenceHost\": \"praxis-api-quickstart exposes the procurement resource and its option-source endpoints.\",\n \"sharedTypes\": \"@praxisui/core owns OptionSourceMetadata and FieldControlType.ENTITY_LOOKUP.\",\n \"runtime\": \"@praxisui/dynamic-fields renders entityLookup and inlineEntityLookup.\",\n \"formIntegration\": \"@praxisui/dynamic-form keeps the submitted payload canonical while the UI rehydrates labels, status and disabled reasons.\",\n \"authoring\": \"@praxisui/metadata-editor exposes the optionSource.* fields used below.\"\n },\n \"backendSurfaces\": [\n \"GET /schemas/filtered?path=/api/procurement/purchase-orders&operation=post&schemaType=request\",\n \"POST /api/procurement/purchase-orders/filter\",\n \"GET /api/procurement/purchase-orders/capabilities\",\n \"POST /api/procurement/companies/option-sources/company/options/filter\",\n \"POST /api/procurement/suppliers/option-sources/supplier/options/filter\",\n \"POST /api/procurement/contracts/option-sources/contract/options/filter\",\n \"POST /api/procurement/products/option-sources/product/options/filter\"\n ],\n \"contractNotes\": [\n \"Persist only stable IDs: companyId, supplierId, contractId and productId.\",\n \"Use x-ui.optionSource.dependsOn for cascades and add dependencyFilterMap only when the UI field differs from the backend filter key.\",\n \"Use selectionPolicy.allowRetainInvalidExistingValue to display historical invalid values while blocking new selections.\",\n \"Use capabilities.byIds=true when edit mode must rehydrate IDs already saved in the resource.\",\n \"Use dependencyLoadOnChange=immediate and resetOnDependentChange when child lookups must refresh and clear stale values as soon as a parent changes.\",\n \"Use detail.hrefTemplate or routeTemplate only as navigation metadata; it must not change the submitted value.\"\n ],\n \"renderingExpectations\": {\n \"inline\": \"Default rendering uses an input-like trigger, search dropdown and rich rows with code, label, description, status and blocked reasons.\",\n \"selectedCard\": \"After selection, show the canonical entity identity with code, label, description, status badges and actions such as detail, change, copy code and clear.\",\n \"readonly\": \"Readonly mode rehydrates the saved ID and renders label, status and disabled reason without allowing changes.\",\n \"compact\": \"Compact mode is intended for table filters and dense forms: preserve label, code and status while reducing secondary text.\",\n \"dialog\": \"Dialog/value-help mode reuses the same optionSource contract and can add table search, column filters, preview panel and selection confirmation.\"\n },\n \"metadata\": {\n \"version\": \"2.0\",\n \"resourcePath\": \"procurement/purchase-orders\",\n \"resourceKey\": \"procurement.purchase-orders\",\n \"operation\": \"create\"\n },\n \"fieldMetadata\": [\n {\n \"name\": \"companyId\",\n \"label\": \"Empresa\",\n \"placeholder\": \"Buscar empresa...\",\n \"controlType\": \"entityLookup\",\n \"required\": true,\n \"endpoint\": \"/api/procurement/companies/option-sources/company/options/filter\",\n \"displayField\": \"label\",\n \"valueField\": \"id\",\n \"optionSource\": {\n \"key\": \"company\",\n \"type\": \"RESOURCE_ENTITY\",\n \"entityKey\": \"company\",\n \"resourcePath\": \"/api/procurement/companies\",\n \"filterField\": \"companyId\",\n \"propertyPath\": \"id\",\n \"valuePropertyPath\": \"id\",\n \"labelPropertyPath\": \"legalName\",\n \"codePropertyPath\": \"code\",\n \"descriptionPropertyPaths\": [\n \"documentNumber\",\n \"city\",\n \"state\"\n ],\n \"statusPropertyPath\": \"status\",\n \"disabledReasonPropertyPath\": \"disabledReason\",\n \"searchPropertyPaths\": [\n \"code\",\n \"legalName\",\n \"documentNumber\"\n ],\n \"searchMode\": \"contains\",\n \"pageSize\": 25,\n \"includeIds\": true,\n \"selectionPolicy\": {\n \"statusPropertyPath\": \"status\",\n \"allowedStatuses\": [\n \"ACTIVE\"\n ],\n \"blockedStatuses\": [\n \"INACTIVE\",\n \"BLOCKED\"\n ],\n \"allowRetainInvalidExistingValue\": true\n },\n \"capabilities\": {\n \"filter\": true,\n \"byIds\": true,\n \"detail\": true,\n \"navigateToDetail\": true,\n \"auditSnapshot\": true\n },\n \"detail\": {\n \"hrefTemplate\": \"/api/procurement/companies/{id}\",\n \"routeTemplate\": \"/procurement/companies/{id}\",\n \"openDetailMode\": \"route\"\n }\n }\n },\n {\n \"name\": \"supplierId\",\n \"label\": \"Fornecedor\",\n \"placeholder\": \"Buscar fornecedor homologado...\",\n \"controlType\": \"entityLookup\",\n \"required\": true,\n \"endpoint\": \"/api/procurement/suppliers/option-sources/supplier/options/filter\",\n \"displayField\": \"label\",\n \"valueField\": \"id\",\n \"dependentField\": \"companyId\",\n \"dependencyLoadOnChange\": \"immediate\",\n \"resetOnDependentChange\": true,\n \"optionSource\": {\n \"key\": \"supplier\",\n \"type\": \"RESOURCE_ENTITY\",\n \"entityKey\": \"supplier\",\n \"resourcePath\": \"/api/procurement/suppliers\",\n \"filterField\": \"supplierId\",\n \"dependsOn\": [\n \"companyId\"\n ],\n \"propertyPath\": \"id\",\n \"valuePropertyPath\": \"id\",\n \"labelPropertyPath\": \"legalName\",\n \"codePropertyPath\": \"code\",\n \"descriptionPropertyPaths\": [\n \"documentNumber\",\n \"homologationStatus\",\n \"riskLevel\"\n ],\n \"statusPropertyPath\": \"status\",\n \"disabledReasonPropertyPath\": \"disabledReason\",\n \"searchPropertyPaths\": [\n \"code\",\n \"legalName\",\n \"documentNumber\"\n ],\n \"searchMode\": \"contains\",\n \"pageSize\": 25,\n \"includeIds\": true,\n \"selectionPolicy\": {\n \"statusPropertyPath\": \"status\",\n \"allowedStatuses\": [\n \"ACTIVE\",\n \"APPROVED\"\n ],\n \"blockedStatuses\": [\n \"INACTIVE\",\n \"BLOCKED\"\n ],\n \"allowRetainInvalidExistingValue\": true\n },\n \"capabilities\": {\n \"filter\": true,\n \"byIds\": true,\n \"detail\": true,\n \"navigateToDetail\": true,\n \"auditSnapshot\": true\n },\n \"detail\": {\n \"hrefTemplate\": \"/api/procurement/suppliers/{id}\",\n \"routeTemplate\": \"/procurement/suppliers/{id}\",\n \"openDetailMode\": \"route\"\n }\n }\n },\n {\n \"name\": \"contractId\",\n \"label\": \"Contrato\",\n \"placeholder\": \"Buscar contrato vigente...\",\n \"controlType\": \"entityLookup\",\n \"endpoint\": \"/api/procurement/contracts/option-sources/contract/options/filter\",\n \"displayField\": \"label\",\n \"valueField\": \"id\",\n \"dependentField\": \"supplierId\",\n \"dependencyLoadOnChange\": \"immediate\",\n \"resetOnDependentChange\": true,\n \"optionSource\": {\n \"key\": \"contract\",\n \"type\": \"RESOURCE_ENTITY\",\n \"entityKey\": \"contract\",\n \"resourcePath\": \"/api/procurement/contracts\",\n \"filterField\": \"contractId\",\n \"dependsOn\": [\n \"companyId\",\n \"supplierId\"\n ],\n \"propertyPath\": \"id\",\n \"valuePropertyPath\": \"id\",\n \"labelPropertyPath\": \"number\",\n \"descriptionPropertyPaths\": [\n \"supplierName\",\n \"validUntil\",\n \"currency\"\n ],\n \"statusPropertyPath\": \"status\",\n \"disabledReasonPropertyPath\": \"disabledReason\",\n \"searchPropertyPaths\": [\n \"number\",\n \"supplierName\",\n \"currency\"\n ],\n \"searchMode\": \"contains\",\n \"pageSize\": 25,\n \"includeIds\": true,\n \"selectionPolicy\": {\n \"statusPropertyPath\": \"status\",\n \"allowedStatuses\": [\n \"ACTIVE\",\n \"SIGNED\"\n ],\n \"blockedStatuses\": [\n \"EXPIRED\",\n \"CANCELLED\"\n ],\n \"allowRetainInvalidExistingValue\": true\n },\n \"capabilities\": {\n \"filter\": true,\n \"byIds\": true,\n \"detail\": true,\n \"navigateToDetail\": true,\n \"auditSnapshot\": true\n },\n \"detail\": {\n \"hrefTemplate\": \"/api/procurement/contracts/{id}\",\n \"routeTemplate\": \"/procurement/contracts/{id}\",\n \"openDetailMode\": \"route\"\n }\n }\n },\n {\n \"name\": \"productId\",\n \"label\": \"Produto\",\n \"placeholder\": \"Buscar produto disponivel...\",\n \"controlType\": \"entityLookup\",\n \"required\": true,\n \"endpoint\": \"/api/procurement/products/option-sources/product/options/filter\",\n \"displayField\": \"label\",\n \"valueField\": \"id\",\n \"dependentField\": \"contractId\",\n \"dependencyLoadOnChange\": \"immediate\",\n \"resetOnDependentChange\": true,\n \"optionSource\": {\n \"key\": \"product\",\n \"type\": \"RESOURCE_ENTITY\",\n \"entityKey\": \"product\",\n \"resourcePath\": \"/api/procurement/products\",\n \"filterField\": \"productId\",\n \"dependsOn\": [\n \"companyId\",\n \"contractId\"\n ],\n \"propertyPath\": \"id\",\n \"valuePropertyPath\": \"id\",\n \"labelPropertyPath\": \"name\",\n \"codePropertyPath\": \"sku\",\n \"descriptionPropertyPaths\": [\n \"categoryName\",\n \"stockAvailable\",\n \"unitOfMeasure\"\n ],\n \"statusPropertyPath\": \"status\",\n \"disabledReasonPropertyPath\": \"disabledReason\",\n \"searchPropertyPaths\": [\n \"sku\",\n \"name\",\n \"categoryName\"\n ],\n \"searchMode\": \"contains\",\n \"pageSize\": 25,\n \"includeIds\": true,\n \"selectionPolicy\": {\n \"statusPropertyPath\": \"status\",\n \"allowedStatuses\": [\n \"ACTIVE\",\n \"AVAILABLE\"\n ],\n \"blockedStatuses\": [\n \"INACTIVE\",\n \"BLOCKED\"\n ],\n \"allowRetainInvalidExistingValue\": true\n },\n \"capabilities\": {\n \"filter\": true,\n \"byIds\": true,\n \"detail\": true,\n \"navigateToDetail\": true,\n \"auditSnapshot\": true\n },\n \"detail\": {\n \"hrefTemplate\": \"/api/procurement/products/{id}\",\n \"routeTemplate\": \"/procurement/products/{id}\",\n \"openDetailMode\": \"route\"\n }\n }\n },\n {\n \"name\": \"orderDate\",\n \"label\": \"Data do pedido\",\n \"controlType\": \"date\"\n },\n {\n \"name\": \"currency\",\n \"label\": \"Moeda\",\n \"controlType\": \"select\",\n \"options\": [\n {\n \"label\": \"BRL\",\n \"value\": \"BRL\"\n },\n {\n \"label\": \"USD\",\n \"value\": \"USD\"\n }\n ]\n },\n {\n \"name\": \"quantity\",\n \"label\": \"Quantidade\",\n \"controlType\": \"numericTextBox\",\n \"validators\": {\n \"min\": 1\n }\n }\n ],\n \"sections\": [\n {\n \"id\": \"commercial-context\",\n \"title\": \"Commercial context\",\n \"rows\": [\n {\n \"id\": \"commercial-context-row\",\n \"columns\": [\n {\n \"id\": \"company-column\",\n \"fields\": [\n \"companyId\",\n \"orderDate\"\n ]\n },\n {\n \"id\": \"currency-column\",\n \"fields\": [\n \"currency\",\n \"quantity\"\n ]\n }\n ]\n }\n ]\n },\n {\n \"id\": \"purchase-entities\",\n \"title\": \"Purchase entities\",\n \"rows\": [\n {\n \"id\": \"purchase-entities-row-1\",\n \"columns\": [\n {\n \"id\": \"supplier-column\",\n \"fields\": [\n \"supplierId\"\n ]\n },\n {\n \"id\": \"contract-column\",\n \"fields\": [\n \"contractId\"\n ]\n }\n ]\n },\n {\n \"id\": \"purchase-entities-row-2\",\n \"columns\": [\n {\n \"id\": \"product-column\",\n \"fields\": [\n \"productId\"\n ]\n }\n ]\n }\n ]\n }\n ],\n \"initialData\": {\n \"companyId\": 1,\n \"supplierId\": 10,\n \"contractId\": 20,\n \"productId\": 30,\n \"orderDate\": \"2026-04-15\",\n \"currency\": \"BRL\",\n \"quantity\": 2\n },\n \"expectedLookupRequests\": {\n \"filterSupplier\": {\n \"method\": \"POST\",\n \"url\": \"/api/procurement/suppliers/option-sources/supplier/options/filter\",\n \"body\": {\n \"query\": \"acme\",\n \"filters\": {\n \"companyId\": 1\n },\n \"page\": 0,\n \"size\": 25\n }\n },\n \"filterContract\": {\n \"method\": \"POST\",\n \"url\": \"/api/procurement/contracts/option-sources/contract/options/filter\",\n \"body\": {\n \"query\": \"2026\",\n \"filters\": {\n \"companyId\": 1,\n \"supplierId\": 10\n },\n \"page\": 0,\n \"size\": 25\n }\n },\n \"filterProduct\": {\n \"method\": \"POST\",\n \"url\": \"/api/procurement/products/option-sources/product/options/filter\",\n \"body\": {\n \"filters\": {\n \"companyId\": 1,\n \"contractId\": 20\n },\n \"page\": 0,\n \"size\": 25\n }\n },\n \"rehydrateSavedValues\": {\n \"method\": \"GET\",\n \"urls\": [\n \"/api/procurement/companies/option-sources/company/options/by-ids?ids=1\",\n \"/api/procurement/suppliers/option-sources/supplier/options/by-ids?ids=10\",\n \"/api/procurement/contracts/option-sources/contract/options/by-ids?ids=20\",\n \"/api/procurement/products/option-sources/product/options/by-ids?ids=30\"\n ]\n }\n },\n \"expectedOptionShape\": {\n \"id\": 10,\n \"label\": \"ACME Suprimentos Ltda\",\n \"extra\": {\n \"code\": \"FOR-8742\",\n \"description\": \"12.345.678/0001-90 - APPROVED - LOW\",\n \"status\": \"ACTIVE\",\n \"selectable\": true,\n \"disabledReason\": null,\n \"detailHref\": \"/api/procurement/suppliers/10\",\n \"detailRoute\": \"/procurement/suppliers/10\",\n \"resourcePath\": \"/api/procurement/suppliers\",\n \"entityKey\": \"supplier\"\n }\n },\n \"expectedSubmitPayload\": {\n \"companyId\": 1,\n \"supplierId\": 10,\n \"contractId\": 20,\n \"productId\": 30,\n \"orderDate\": \"2026-04-15\",\n \"currency\": \"BRL\",\n \"quantity\": 2\n }\n}\n",
9125
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"initialData\",\"initialData\":{\"companyId\":1,\"supplierId\":10,\"contractId\":20,\"productId\":30,\"orderDate\":\"2026-04-15\",\"currency\":\"BRL\",\"quantity\":2}}",
8706
9126
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
8707
- "contentHash": "beacc31baf931cb0deeed7c50a2ec087af03f373a90cab2103101e831b3aacef",
9127
+ "contentHash": "3979e8be0f74bfeff4c242fd1e28018d4c007d8c85b5c74d998b59a73e65273e",
8708
9128
  "sourceKind": "component_definition",
8709
9129
  "sourceId": "praxis-dynamic-form",
8710
9130
  "corpusVersion": "1.0.0"
8711
9131
  },
8712
9132
  {
8713
- "chunkIndex": 6,
9133
+ "chunkIndex": 48,
9134
+ "chunkKind": "recipe",
9135
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"expectedLookupRequests\",\"expectedLookupRequests\":{\"filterSupplier\":{\"method\":\"POST\",\"url\":\"/api/procurement/suppliers/option-sources/supplier/options/filter\",\"body\":{\"query\":\"acme\",\"filters\":{\"companyId\":1},\"page\":0,\"size\":25}},\"filterContract\":{\"method\":\"POST\",\"url\":\"/api/procurement/contracts/option-sources/contract/options/filter\",\"body\":{\"query\":\"2026\",\"filters\":{\"companyId\":1,\"supplierId\":10},\"page\":0,\"size\":25}},\"filterProduct\":{\"method\":\"POST\",\"url\":\"/api/procurement/products/option-sources/product/options/filter\",\"body\":{\"filters\":{\"companyId\":1,\"contractId\":20},\"page\":0,\"size\":25}},\"rehydrateSavedValues\":{\"method\":\"GET\",\"urls\":[\"/api/procurement/companies/option-sources/company/options/by-ids?ids=1\",\"/api/procurement/suppliers/option-sources/supplier/options/by-ids?ids=10\",\"/api/procurement/contracts/option-sources/contract/options/by-ids?ids=20\",\"/api/procurement/products/option-sources/product/options/by-ids?ids=30\"]}}}",
9136
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
9137
+ "contentHash": "2dc8c30a2a9a03d2b230c088dc055535cdaf9370e2428bd6b58ae10febf15f18",
9138
+ "sourceKind": "component_definition",
9139
+ "sourceId": "praxis-dynamic-form",
9140
+ "corpusVersion": "1.0.0"
9141
+ },
9142
+ {
9143
+ "chunkIndex": 49,
9144
+ "chunkKind": "recipe",
9145
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"expectedOptionShape\",\"expectedOptionShape\":{\"id\":10,\"label\":\"ACME Suprimentos Ltda\",\"extra\":{\"code\":\"FOR-8742\",\"description\":\"12.345.678/0001-90 - APPROVED - LOW\",\"status\":\"ACTIVE\",\"selectable\":true,\"disabledReason\":null,\"detailHref\":\"/api/procurement/suppliers/10\",\"detailRoute\":\"/procurement/suppliers/10\",\"resourcePath\":\"/api/procurement/suppliers\",\"entityKey\":\"supplier\"}}}",
9146
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
9147
+ "contentHash": "449513a6c90677580945d71741619b72a6af87ecec8537ec1053fe8dd42e73b2",
9148
+ "sourceKind": "component_definition",
9149
+ "sourceId": "praxis-dynamic-form",
9150
+ "corpusVersion": "1.0.0"
9151
+ },
9152
+ {
9153
+ "chunkIndex": 50,
9154
+ "chunkKind": "recipe",
9155
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"expectedSubmitPayload\",\"expectedSubmitPayload\":{\"companyId\":1,\"supplierId\":10,\"contractId\":20,\"productId\":30,\"orderDate\":\"2026-04-15\",\"currency\":\"BRL\",\"quantity\":2}}",
9156
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json",
9157
+ "contentHash": "0fe854e351821e8a79fc06166054b9def109a213e7625a58823838cf896370cc",
9158
+ "sourceKind": "component_definition",
9159
+ "sourceId": "praxis-dynamic-form",
9160
+ "corpusVersion": "1.0.0"
9161
+ },
9162
+ {
9163
+ "chunkIndex": 51,
8714
9164
  "chunkKind": "recipe",
8715
- "content": "{\n \"_comment\": \"Showcase de campos variados com props específicas (validação, máscaras, sliders, cores).\",\n \"templateMeta\": {\n \"variantId\": \"fields\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"tags\": [\n \"fields\",\n \"metadata\"\n ],\n \"useWhen\": \"mostrar apenas fieldMetadata e exemplos de campos\",\n \"examplePrompts\": [\n \"gere somente a lista de campos\",\n \"adicione novos campos ao formulario\"\n ]\n },\n \"metadata\": {\n \"version\": \"2.0\"\n },\n \"fieldMetadata\": [\n {\n \"name\": \"fullName\",\n \"label\": \"Nome completo\",\n \"controlType\": \"input\",\n \"validators\": {\n \"maxLength\": 120\n }\n },\n {\n \"name\": \"email\",\n \"label\": \"Email\",\n \"controlType\": \"email\",\n \"validators\": {\n \"required\": true,\n \"email\": true\n }\n },\n {\n \"name\": \"password\",\n \"label\": \"Senha\",\n \"controlType\": \"password\",\n \"validators\": {\n \"minLength\": 8\n }\n },\n {\n \"name\": \"profileColor\",\n \"label\": \"Cor do perfil\",\n \"controlType\": \"colorPicker\",\n \"format\": \"hex\"\n },\n {\n \"name\": \"salary\",\n \"label\": \"Salário\",\n \"controlType\": \"currency\",\n \"currencyCode\": \"BRL\",\n \"validators\": {\n \"min\": 0\n }\n },\n {\n \"name\": \"birthDate\",\n \"label\": \"Nascimento\",\n \"controlType\": \"date\",\n \"validators\": {\n \"min\": \"1900-01-01\",\n \"max\": \"2025-12-31\"\n }\n },\n {\n \"name\": \"availability\",\n \"label\": \"Disponibilidade\",\n \"controlType\": \"dateRange\"\n },\n {\n \"name\": \"workload\",\n \"label\": \"Carga horária\",\n \"controlType\": \"slider\",\n \"validators\": {\n \"min\": 0,\n \"max\": 40\n }\n },\n {\n \"name\": \"skills\",\n \"label\": \"Habilidades\",\n \"controlType\": \"multiSelect\",\n \"options\": [\n {\n \"text\": \"Angular\",\n \"value\": \"ANG\"\n },\n {\n \"text\": \"React\",\n \"value\": \"RE\"\n }\n ]\n },\n {\n \"name\": \"manager\",\n \"label\": \"Gestor\",\n \"controlType\": \"autoComplete\",\n \"endpoint\": \"/api/managers\"\n },\n {\n \"name\": \"document\",\n \"label\": \"CPF/CNPJ\",\n \"controlType\": \"cpfCnpjInput\",\n \"unmaskOnSubmit\": true\n },\n {\n \"name\": \"avatar\",\n \"label\": \"Avatar\",\n \"controlType\": \"avatar\",\n \"imageSrc\": \"https://picsum.photos/80\",\n \"materialDesign\": {\n \"shape\": \"circle\"\n }\n },\n {\n \"name\": \"attachments\",\n \"label\": \"Anexos\",\n \"controlType\": \"upload\",\n \"multiple\": true,\n \"accept\": \".pdf,.png,.jpg\"\n }\n ],\n \"sections\": [\n {\n \"id\": \"sec1\",\n \"title\": \"Perfil\",\n \"rows\": [\n {\n \"id\": \"r1\",\n \"columns\": [\n {\n \"id\": \"c1\",\n \"fields\": [\n \"fullName\",\n \"email\",\n \"password\"\n ]\n }\n ]\n }\n ]\n },\n {\n \"id\": \"sec2\",\n \"title\": \"Detalhes\",\n \"rows\": [\n {\n \"id\": \"r2\",\n \"columns\": [\n {\n \"id\": \"c2\",\n \"fields\": [\n \"profileColor\",\n \"salary\",\n \"birthDate\",\n \"availability\",\n \"workload\"\n ]\n }\n ]\n }\n ]\n },\n {\n \"id\": \"sec3\",\n \"title\": \"Outros\",\n \"rows\": [\n {\n \"id\": \"r3\",\n \"columns\": [\n {\n \"id\": \"c3\",\n \"fields\": [\n \"skills\",\n \"manager\",\n \"document\",\n \"avatar\",\n \"attachments\"\n ]\n }\n ]\n }\n ]\n }\n ]\n}\n",
9165
+ "content": "{\"_comment\":\"Showcase de campos variados com props específicas (validação, máscaras, sliders, cores).\",\"templateMeta\":{\"variantId\":\"fields\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"fields\",\"metadata\"],\"useWhen\":\"mostrar apenas fieldMetadata e exemplos de campos\",\"examplePrompts\":[\"gere somente a lista de campos\",\"adicione novos campos ao formulario\"]},\"metadata\":{\"version\":\"2.0\"},\"fieldMetadata\":[{\"name\":\"fullName\",\"label\":\"Nome completo\",\"controlType\":\"input\",\"validators\":{\"maxLength\":120}},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"email\":true}},{\"name\":\"password\",\"label\":\"Senha\",\"controlType\":\"password\",\"validators\":{\"minLength\":8}},{\"name\":\"profileColor\",\"label\":\"Cor do perfil\",\"controlType\":\"colorPicker\",\"format\":\"hex\"},{\"name\":\"salary\",\"label\":\"Salário\",\"controlType\":\"currency\",\"currencyCode\":\"BRL\",\"validators\":{\"min\":0}},{\"name\":\"birthDate\",\"label\":\"Nascimento\",\"controlType\":\"date\",\"validators\":{\"min\":\"1900-01-01\",\"max\":\"2025-12-31\"}},{\"name\":\"availability\",\"label\":\"Disponibilidade\",\"controlType\":\"dateRange\"},{\"name\":\"workload\",\"label\":\"Carga horária\",\"controlType\":\"slider\",\"validators\":{\"min\":0,\"max\":40}},{\"name\":\"skills\",\"label\":\"Habilidades\",\"controlType\":\"multiSelect\",\"options\":[{\"text\":\"Angular\",\"value\":\"ANG\"},{\"text\":\"React\",\"value\":\"RE\"}]},{\"name\":\"manager\",\"label\":\"Gestor\",\"controlType\":\"autoComplete\",\"endpoint\":\"/api/managers\"},{\"name\":\"document\",\"label\":\"CPF/CNPJ\",\"controlType\":\"cpfCnpjInput\",\"unmaskOnSubmit\":true},{\"name\":\"avatar\",\"label\":\"Avatar\",\"controlType\":\"avatar\",\"imageSrc\":\"https://picsum.photos/80\",\"materialDesign\":{\"shape\":\"circle\"}},{\"name\":\"attachments\",\"label\":\"Anexos\",\"controlType\":\"upload\",\"multiple\":true,\"accept\":\".pdf,.png,.jpg\"}],\"sections\":[{\"id\":\"sec1\",\"title\":\"Perfil\",\"rows\":[{\"id\":\"r1\",\"columns\":[{\"id\":\"c1\",\"fields\":[\"fullName\",\"email\",\"password\"]}]}]},{\"id\":\"sec2\",\"title\":\"Detalhes\",\"rows\":[{\"id\":\"r2\",\"columns\":[{\"id\":\"c2\",\"fields\":[\"profileColor\",\"salary\",\"birthDate\",\"availability\",\"workload\"]}]}]},{\"id\":\"sec3\",\"title\":\"Outros\",\"rows\":[{\"id\":\"r3\",\"columns\":[{\"id\":\"c3\",\"fields\":[\"skills\",\"manager\",\"document\",\"avatar\",\"attachments\"]}]}]}]}",
8716
9166
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.fields.json",
8717
- "contentHash": "96b6a022941bcb3ae32ac168c92a308e394731d4556b1692c63994ed91f7c300",
9167
+ "contentHash": "74aeb63d50ffa02c7c38232b74cfa8f0188b753ea177e22573418599fd590e34",
8718
9168
  "sourceKind": "component_definition",
8719
9169
  "sourceId": "praxis-dynamic-form",
8720
9170
  "corpusVersion": "1.0.0"
8721
9171
  },
8722
9172
  {
8723
- "chunkIndex": 7,
9173
+ "chunkIndex": 52,
8724
9174
  "chunkKind": "recipe",
8725
- "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",
9175
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_comment\",\"_comment\":\"Generic recipe for PraxisDynamicForm (FormConfig). Values are placeholders for AI examples.\"}",
8726
9176
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
8727
- "contentHash": "eb8680d3bf134f3a9db09ba3ecc324db4d163a86c5ec5fcd7ffe972e381c9b1e",
9177
+ "contentHash": "440adf4e81bde0eeabdcdaa216bb01c010fffbeb7767ce1ef54a80057c05d837",
8728
9178
  "sourceKind": "component_definition",
8729
9179
  "sourceId": "praxis-dynamic-form",
8730
9180
  "corpusVersion": "1.0.0"
8731
9181
  },
8732
9182
  {
8733
- "chunkIndex": 8,
9183
+ "chunkIndex": 53,
9184
+ "chunkKind": "recipe",
9185
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"templateMeta\",\"templateMeta\":{\"variantId\":\"form-config\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"full\",\"config\"],\"useWhen\":\"gerar form completo com layout, campos e regras\",\"examplePrompts\":[\"gere um formulario completo com campos e layout\",\"crie um form completo baseado no schema\"]}}",
9186
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9187
+ "contentHash": "d25021218e6d26144a625ceee052602151ecae5add0d58bc81dc3702af323eea",
9188
+ "sourceKind": "component_definition",
9189
+ "sourceId": "praxis-dynamic-form",
9190
+ "corpusVersion": "1.0.0"
9191
+ },
9192
+ {
9193
+ "chunkIndex": 54,
9194
+ "chunkKind": "recipe",
9195
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"metadata\",\"metadata\":{\"version\":\"2.0.0\",\"lastUpdated\":\"2024-02-01T12:00:00Z\",\"source\":\"local\",\"serverHash\":\"hash-abc-123\",\"schemaId\":\"path:/api/employees#request\",\"schemaContext\":{\"path\":\"/api/employees\",\"operation\":\"POST\",\"schemaType\":\"request\",\"internal\":false,\"tenant\":\"default\",\"locale\":\"pt-BR\"},\"customizations\":[{\"fieldName\":\"salary\",\"property\":\"label\",\"oldValue\":\"Salary\",\"newValue\":\"Salario\",\"timestamp\":\"2024-01-20T10:00:00Z\",\"source\":\"user\"}]}}",
9196
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9197
+ "contentHash": "3dc7e4475bd80bd0bcd7a816a452ab21e371dd69753bbf9c439c6e70b8fcd598",
9198
+ "sourceKind": "component_definition",
9199
+ "sourceId": "praxis-dynamic-form",
9200
+ "corpusVersion": "1.0.0"
9201
+ },
9202
+ {
9203
+ "chunkIndex": 55,
9204
+ "chunkKind": "recipe",
9205
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"api\",\"api\":{\"saveEndpoint\":\"/api/employees\",\"loadEndpoint\":\"/api/employees/${id}\",\"saveMethod\":\"POST\",\"timeout\":15000,\"headers\":{\"X-Module\":\"HR\",\"X-Request-Source\":\"dynamic-form\"},\"idField\":\"id\",\"beforeSave\":\"sanitizeEmployee\",\"afterLoad\":\"mapEmployee\"}}",
9206
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9207
+ "contentHash": "b12e0372426e0a049c1e6cbe714f1b9905043341d79f5e35187f70879f9a143b",
9208
+ "sourceKind": "component_definition",
9209
+ "sourceId": "praxis-dynamic-form",
9210
+ "corpusVersion": "1.0.0"
9211
+ },
9212
+ {
9213
+ "chunkIndex": 56,
9214
+ "chunkKind": "recipe",
9215
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"behavior\",\"behavior\":{\"confirmOnUnsavedChanges\":true,\"trackHistory\":true,\"focusFirstError\":true,\"scrollToErrors\":true,\"clearAfterSave\":false,\"redirectAfterSave\":\"/employees\",\"reactiveValidation\":true,\"reactiveValidationDebounceMs\":200}}",
9216
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9217
+ "contentHash": "f733f2358c76154dcd0cea0406c5002412ea4cd1652f3bc90562f070cb75fa1d",
9218
+ "sourceKind": "component_definition",
9219
+ "sourceId": "praxis-dynamic-form",
9220
+ "corpusVersion": "1.0.0"
9221
+ },
9222
+ {
9223
+ "chunkIndex": 57,
9224
+ "chunkKind": "recipe",
9225
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"messages\",\"messages\":{\"createRegistrySuccess\":\"Registro criado com sucesso.\",\"updateRegistrySuccess\":\"Registro atualizado com sucesso.\",\"createRegistryError\":\"Falha ao criar registro.\",\"updateRegistryError\":\"Falha ao atualizar registro.\",\"confirmations\":{\"submit\":\"Salvar alteracoes?\",\"cancel\":\"Descartar alteracoes?\",\"reset\":\"Limpar o formulario?\",\"archive\":\"Arquivar este registro?\"},\"customActions\":{\"archive\":{\"success\":\"Registro arquivado.\",\"error\":\"Falha ao arquivar.\",\"confirmation\":\"Arquivar registro agora?\"},\"preview\":{\"confirmation\":\"Gerar pre-visualizacao?\"}},\"loading\":{\"submit\":\"Salvando...\",\"cancel\":\"Cancelando...\",\"reset\":\"Limpando...\",\"archive\":\"Arquivando...\"}}}",
9226
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9227
+ "contentHash": "f3887f911ad0049113d17f45d8e7fc7d724b5e372e92e6d1b3c94b35f88de421",
9228
+ "sourceKind": "component_definition",
9229
+ "sourceId": "praxis-dynamic-form",
9230
+ "corpusVersion": "1.0.0"
9231
+ },
9232
+ {
9233
+ "chunkIndex": 58,
9234
+ "chunkKind": "recipe",
9235
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"hints\",\"hints\":{\"dataModes\":{\"create\":\"Preencha os dados para criar um novo registro.\",\"edit\":\"Atualize os dados e salve as alteracoes.\",\"view\":\"Visualize os dados do registro.\"},\"uiModes\":{\"presentation\":\"Modo apresentacao exibe apenas leitura.\",\"readonly\":\"Modo leitura bloqueia edicao.\",\"disabled\":\"Campos desabilitados nao permitem interacao.\",\"visible\":\"Controle de visibilidade sem destruir controles.\"}}}",
9236
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9237
+ "contentHash": "68ebcfc3b0ccb9706b298be22ec14266ef2d79b573e7f9aa5f9635b4cc1e4f3c",
9238
+ "sourceKind": "component_definition",
9239
+ "sourceId": "praxis-dynamic-form",
9240
+ "corpusVersion": "1.0.0"
9241
+ },
9242
+ {
9243
+ "chunkIndex": 59,
9244
+ "chunkKind": "recipe",
9245
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"hooks\",\"hooks\":{\"beforeInit\":[{\"priority\":100,\"timeoutMs\":1500,\"args\":{\"source\":\"cache\"},\"id\":\"load-static-options\"}],\"afterInit\":[{\"priority\":50,\"timeoutMs\":1200,\"args\":{\"enable\":true},\"id\":\"attach-shortcuts\"}],\"beforeValidate\":[{\"priority\":80,\"timeoutMs\":1200,\"args\":{\"country\":\"BR\"},\"id\":\"normalize-phones\"}],\"afterValidate\":[{\"priority\":10,\"timeoutMs\":1000,\"args\":{\"report\":\"warnings\"},\"id\":\"collect-warnings\"}],\"beforeSubmit\":[{\"priority\":100,\"timeoutMs\":2000,\"args\":{\"trimStrings\":true},\"id\":\"sanitize-employee\"}],\"afterSubmit\":[{\"priority\":20,\"timeoutMs\":1500,\"args\":{\"messageKey\":\"employeeSaved\"},\"id\":\"notify-success\"}],\"onError\":[{\"priority\":0,\"timeoutMs\":1500,\"args\":{\"messageKey\":\"employeeSaveError\"},\"id\":\"notify-error\"}]}}",
9246
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9247
+ "contentHash": "400f1981242263e21cdbe3a8673da2ea81bb735e4e858333646a199cd8cb52df",
9248
+ "sourceKind": "component_definition",
9249
+ "sourceId": "praxis-dynamic-form",
9250
+ "corpusVersion": "1.0.0"
9251
+ },
9252
+ {
9253
+ "chunkIndex": 60,
9254
+ "chunkKind": "recipe",
9255
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"fieldMetadata\",\"fieldMetadata\":[{\"name\":\"id\",\"label\":\"ID\",\"controlType\":\"numericTextBox\",\"dataType\":\"number\",\"hidden\":true,\"readOnly\":true,\"description\":\"Backend generated identifier.\"},{\"name\":\"fullName\",\"label\":\"Full name\",\"controlType\":\"input\",\"dataType\":\"text\",\"placeholder\":\"Example: Ana Souza\",\"prefixIcon\":\"person\",\"iconPosition\":\"start\",\"iconSize\":\"small\",\"validators\":{\"required\":true,\"minLength\":3,\"maxLength\":120,\"requiredMessage\":\"Name is required\",\"minLengthMessage\":\"Min 3 chars\",\"minWords\":2},\"validationMode\":\"blur\",\"debounceTime\":200,\"materialDesign\":{\"appearance\":\"outline\",\"color\":\"primary\",\"floatLabel\":\"auto\",\"density\":\"comfortable\",\"subscriptSizing\":\"dynamic\",\"hideRequiredMarker\":false,\"disableRipple\":true,\"customPalette\":{\"primary\":\"#005f73\",\"accent\":\"#0a9396\",\"warn\":\"#bb3e03\"},\"animations\":{\"disabled\":false,\"duration\":\"150ms\",\"easing\":\"ease-out\"}},\"group\":\"identity\",\"order\":1,\"width\":\"50%\",\"isFlex\":true,\"id\":\"field-full-name\",\"version\":\"1.0.0\",\"context\":\"form\",\"createdAt\":\"2024-01-01T00:00:00Z\",\"updatedAt\":\"2024-02-01T00:00:00Z\",\"tags\":[\"identity\",\"employee\"],\"cssClass\":\"field-full-name\",\"style\":{\"maxWidth\":\"480px\"},\"dataAttributes\":{\"data-qa\":\"full-name\"},\"required\":true},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"dataType\":\"email\",\"placeholder\":\"name@company.com\",\"validators\":{\"required\":true,\"email\":true,\"emailMessage\":\"Use a valid email.\"},\"unique\":true,\"ariaLabel\":\"Email address\",\"ariaDescribedBy\":\"email-help\",\"tabIndex\":2,\"accessKey\":\"e\"},{\"name\":\"phone\",\"label\":\"Phone\",\"controlType\":\"maskedTextBox\",\"dataType\":\"text\",\"mask\":\"(99) 99999-9999\",\"validators\":{\"pattern\":\"^\\\\(\\\\d{2}\\\\) \\\\d{4,5}-\\\\d{4}$\",\"patternMessage\":\"Use (11) 99999-9999\"},\"hint\":\"Include area code.\"},{\"name\":\"status\",\"label\":\"Status\",\"controlType\":\"select\",\"options\":[{\"text\":\"Active\",\"value\":\"ACTIVE\",\"icon\":\"check_circle\"},{\"text\":\"Inactive\",\"value\":\"INACTIVE\",\"icon\":\"block\"},{\"text\":\"On leave\",\"value\":\"ON_LEAVE\",\"icon\":\"schedule\"}],\"defaultValue\":\"ACTIVE\",\"validators\":{\"required\":true},\"materialDesign\":{\"appearance\":\"outline\",\"color\":\"accent\"}},{\"name\":\"departmentId\",\"label\":\"Department\",\"controlType\":\"select\",\"endpoint\":\"/api/departments\",\"valueField\":\"id\",\"displayField\":\"name\",\"queryParams\":{\"active\":true},\"cacheDuration\":300000,\"validators\":{\"required\":true},\"resourcePath\":\"/api/departments\",\"filterCriteria\":{\"active\":true},\"optionLabelKey\":\"name\",\"optionValueKey\":\"id\",\"searchable\":true},{\"name\":\"teamId\",\"label\":\"Team\",\"controlType\":\"select\",\"endpoint\":\"/api/teams\",\"valueField\":\"id\",\"displayField\":\"name\",\"dependencyFields\":[\"departmentId\"],\"dependencyFilterMap\":{\"departmentId\":\"departmentId\"},\"dependencyValuePath\":\"id\",\"dependencyLoadOnChange\":\"immediate\",\"dependencyMergeStrategy\":\"replace\",\"dependencyDebounceMs\":200,\"resetOnDependentChange\":true,\"enableDependencyCascade\":true,\"suppressInlineErrorsOnCascade\":true},{\"name\":\"managerId\",\"label\":\"Manager\",\"controlType\":\"autoComplete\",\"endpoint\":\"/api/employees\",\"queryParams\":{\"role\":\"manager\"},\"valueField\":\"id\",\"displayField\":\"name\",\"filterField\":\"name\",\"dependencyFields\":[\"departmentId\"],\"dependencyFilterMap\":{\"departmentId\":\"departmentId\"},\"dependencyLoadOnChange\":\"respectLoadOn\",\"disabled\":false},{\"name\":\"hireDate\",\"label\":\"Hire date\",\"controlType\":\"date\",\"dataType\":\"date\",\"validators\":{\"required\":true},\"minDate\":\"2020-01-01\",\"maxDate\":\"2030-12-31\",\"startView\":\"multi-year\",\"datepickerTogglePosition\":\"suffix\",\"touchUi\":true},{\"name\":\"terminationDate\",\"label\":\"Termination date\",\"controlType\":\"date\",\"conditionalDisplay\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"conditionalRequired\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]}},{\"name\":\"salary\",\"label\":\"Salary\",\"controlType\":\"currency\",\"dataType\":\"number\",\"format\":\"BRL|symbol|2\",\"validators\":{\"min\":0,\"max\":999999,\"minMessage\":\"Salary must be >= 0\"},\"min\":0,\"max\":999999,\"step\":100,\"precision\":\"fixed\",\"currencyCode\":\"BRL\",\"currencyDisplay\":\"symbol\",\"prefix\":\"R$\",\"suffix\":\"bruto\",\"inlineEditing\":true,\"transformDisplayValue\":\"formatCurrency\",\"transformSaveValue\":\"parseCurrency\"},{\"name\":\"bonusPercent\",\"label\":\"Bonus %\",\"controlType\":\"slider\",\"dataType\":\"number\",\"defaultValue\":10,\"validators\":{\"min\":0,\"max\":50},\"suffixIcon\":\"percent\",\"min\":0,\"max\":50,\"step\":5,\"thumbLabel\":true,\"showTicks\":true,\"vertical\":false,\"invert\":false},{\"name\":\"workMode\",\"label\":\"Work mode\",\"controlType\":\"radio\",\"options\":[{\"text\":\"CLT\",\"value\":\"CLT\"},{\"text\":\"PJ\",\"value\":\"PJ\"},{\"text\":\"Intern\",\"value\":\"INTERN\"}],\"defaultValue\":\"CLT\"},{\"name\":\"skills\",\"label\":\"Skills\",\"controlType\":\"multiSelect\",\"options\":[{\"text\":\"Angular\",\"value\":\"ANG\"},{\"text\":\"React\",\"value\":\"RE\"},{\"text\":\"Node\",\"value\":\"NODE\"}],\"visibleIn\":[\"form\",\"filter\"],\"multiple\":true,\"searchable\":true,\"clearable\":true,\"selectAll\":true,\"maxSelections\":5,\"virtualScroll\":true,\"emptyOptionText\":\"None\"},{\"name\":\"availability\",\"label\":\"Availability\",\"controlType\":\"dateRange\",\"rangeSeparator\":\" to \"},{\"name\":\"notes\",\"label\":\"Notes\",\"controlType\":\"textarea\",\"validators\":{\"maxLength\":500},\"hint\":\"Add relevant notes.\",\"textTransformApply\":\"displayOnly\",\"rows\":4,\"minRows\":3,\"maxRows\":8,\"resize\":\"vertical\",\"spellcheck\":true,\"inputMode\":\"text\",\"textTransform\":\"uppercase\",\"readonly\":false,\"formHidden\":false,\"tableHidden\":true,\"filterHidden\":false},{\"name\":\"isActive\",\"label\":\"Active\",\"controlType\":\"toggle\",\"dataType\":\"boolean\",\"defaultValue\":true},{\"name\":\"avatar\",\"label\":\"Photo\",\"controlType\":\"upload\",\"accept\":\".png,.jpg,.jpeg\",\"multiple\":false,\"materialDesign\":{\"appearance\":\"outline\"},\"uploadUrl\":\"/api/uploads/avatars\",\"autoUpload\":true,\"maxFileSize\":5242880,\"maxFiles\":2,\"fileRestrictions\":{\"minResolution\":\"128x128\",\"maxResolution\":\"2048x2048\"},\"chunkSize\":1048576,\"withCredentials\":false,\"headers\":{\"X-Upload-Source\":\"dynamic-form\"},\"method\":\"POST\",\"saveField\":\"file\"},{\"name\":\"terms\",\"label\":\"Accept terms\",\"controlType\":\"checkbox\",\"validators\":{\"requiredChecked\":true},\"tooltip\":\"Required to submit.\"},{\"name\":\"username\",\"label\":\"Username\",\"controlType\":\"input\",\"dataType\":\"text\",\"type\":\"text\",\"minLength\":3,\"maxLength\":20,\"pattern\":\"^[a-zA-Z0-9_]+$\",\"validators\":{\"required\":true,\"patternMessage\":\"Use letters, numbers, underscore\"},\"inputMode\":\"text\",\"autoComplete\":\"username\",\"readonly\":false,\"spellcheck\":false,\"textTransform\":\"lowercase\",\"placeholder\":\"user_name\"},{\"name\":\"password\",\"label\":\"Password\",\"controlType\":\"password\",\"dataType\":\"text\",\"type\":\"password\",\"showPasswordToggle\":true,\"autoComplete\":\"current-password\",\"validators\":{\"required\":true,\"minLength\":8}},{\"name\":\"country\",\"label\":\"Country\",\"controlType\":\"select\",\"dataType\":\"text\",\"options\":[{\"text\":\"Brazil\",\"value\":\"BR\"},{\"text\":\"United States\",\"value\":\"US\"},{\"text\":\"Canada\",\"value\":\"CA\"}],\"optionLabelKey\":\"text\",\"optionValueKey\":\"value\",\"emptyOptionText\":\"Select a country\",\"searchable\":true,\"clearable\":true,\"resourcePath\":\"/api/countries\",\"filterCriteria\":{\"active\":true},\"multiple\":false},{\"name\":\"orgTree\",\"label\":\"Organization\",\"controlType\":\"treeSelect\",\"treeConfig\":{\"expandByDefault\":true,\"selectionMode\":\"single\"},\"nodes\":[{\"label\":\"HQ\",\"value\":\"hq\",\"children\":[{\"label\":\"Finance\",\"value\":\"finance\"}]},{\"label\":\"Branch\",\"value\":\"branch\"}],\"multiple\":false},{\"name\":\"ratingScore\",\"label\":\"Satisfaction\",\"controlType\":\"rating\",\"value\":3,\"max\":5,\"ratingMax\":5,\"ratingPrecision\":0.5,\"ratingIcon\":\"star\",\"ratingEmptyIcon\":\"star_border\",\"ratingAllowHalf\":true},{\"name\":\"progress\",\"label\":\"Progress\",\"controlType\":\"slider\",\"min\":0,\"max\":100,\"step\":5,\"defaultValue\":65,\"thumbLabel\":true,\"showTicks\":true},{\"name\":\"avatarDisplay\",\"label\":\"Avatar display\",\"controlType\":\"avatar\",\"imageSrc\":\"https://cdn.example.com/avatars/ana.png\",\"imageAlt\":\"User avatar\",\"initials\":\"AS\",\"avatarShape\":\"circle\",\"avatarSize\":\"medium\"},{\"name\":\"ctaButton\",\"label\":\"Request access\",\"controlType\":\"button\",\"icon\":\"send\",\"color\":\"primary\",\"variant\":\"raised\",\"size\":\"medium\",\"disabled\":false,\"loading\":false,\"action\":\"requestAccess\",\"actionPayload\":{\"role\":\"manager\"}}]}",
9256
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9257
+ "contentHash": "dfa5b461c5ff749da70483784599b7d90d8a43a7fcabbfbe88cab74379f1be9c",
9258
+ "sourceKind": "component_definition",
9259
+ "sourceId": "praxis-dynamic-form",
9260
+ "corpusVersion": "1.0.0"
9261
+ },
9262
+ {
9263
+ "chunkIndex": 61,
9264
+ "chunkKind": "recipe",
9265
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"fieldMetadata\",\"fieldMetadata\":[{\"name\":\"aiAssist\",\"label\":\"AI assist\",\"controlType\":\"button\",\"icon\":\"smart_toy\",\"color\":\"accent\",\"variant\":\"stroked\",\"size\":\"medium\",\"action\":\"aiAssist\",\"actionPayload\":{\"prompt\":\"Summarize the candidate profile\",\"history\":[{\"role\":\"user\",\"content\":\"Summarize this CV.\"},{\"role\":\"assistant\",\"content\":\"Summary goes here.\"}]},\"tooltip\":\"Ask AI to summarize the candidate profile\"},{\"name\":\"themeColor\",\"label\":\"Theme color\",\"controlType\":\"colorPicker\",\"format\":\"hex\",\"views\":[\"palette\",\"gradient\"],\"activeView\":\"palette\",\"preview\":true,\"clearButton\":true,\"actionsLayout\":\"end\",\"adaptiveMode\":true,\"adaptiveTitle\":\"Pick a color\",\"adaptiveSubtitle\":\"Brand palette\",\"popupSettings\":{\"width\":320},\"gradientSettings\":{\"opacity\":true},\"paletteSettings\":{\"columns\":8},\"fillMode\":\"solid\",\"rounded\":\"medium\",\"size\":\"medium\",\"icon\":\"palette\",\"iconClass\":\"color-icon\",\"svgIcon\":\"custom-palette\",\"tabindex\":0},{\"name\":\"cpf\",\"label\":\"CPF/CNPJ\",\"controlType\":\"cpfCnpjInput\",\"maskType\":\"cpf-cnpj\",\"unmaskOnSubmit\":true,\"validators\":{\"cpf\":true,\"cnpj\":true}},{\"name\":\"meetingTime\",\"label\":\"Meeting time\",\"controlType\":\"timePicker\",\"enableSeconds\":true,\"stepMinute\":15,\"stepSecond\":30}]}",
9266
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9267
+ "contentHash": "873523e0ecad4e05c457db020b771f6a496dbb52914158af9faebf19237401d9",
9268
+ "sourceKind": "component_definition",
9269
+ "sourceId": "praxis-dynamic-form",
9270
+ "corpusVersion": "1.0.0"
9271
+ },
9272
+ {
9273
+ "chunkIndex": 62,
9274
+ "chunkKind": "recipe",
9275
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"sections\",\"sections\":[{\"id\":\"basic\",\"title\":\"Basic data\",\"description\":\"Primary profile and status fields.\",\"icon\":\"person\",\"collapsible\":true,\"collapsed\":false,\"gapBottom\":16,\"titleGapBottom\":6,\"descriptionGapBottom\":8,\"titleStyle\":\"titleMedium\",\"descriptionStyle\":\"bodyMedium\",\"titleColor\":\"#1a1a1a\",\"descriptionColor\":\"#666666\",\"headerAlign\":\"start\",\"headerTooltip\":\"Main data\",\"rows\":[{\"id\":\"row-basic-1\",\"gap\":16,\"rowGap\":12,\"columns\":[{\"id\":\"col-basic-1\",\"fields\":[\"fullName\",\"email\"],\"span\":{\"xs\":12,\"sm\":12,\"md\":6,\"lg\":6,\"xl\":6},\"padding\":8,\"className\":\"col-basic-main\",\"testId\":\"col-basic-main\",\"title\":\"Identity\"},{\"id\":\"col-basic-2\",\"fields\":[\"status\",\"hireDate\"],\"span\":{\"md\":6,\"lg\":6},\"hidden\":{\"xs\":true,\"sm\":false,\"md\":false,\"lg\":false,\"xl\":false},\"order\":{\"xs\":2,\"sm\":1,\"md\":2,\"lg\":2,\"xl\":1}}],\"title\":\"Core fields\"},{\"id\":\"row-basic-2\",\"gap\":16,\"columns\":[{\"id\":\"col-basic-3\",\"fields\":[\"phone\",\"isActive\"],\"span\":{\"md\":6,\"lg\":6},\"offset\":{\"xs\":0,\"sm\":0,\"md\":1,\"lg\":0,\"xl\":0}},{\"id\":\"col-basic-4\",\"fields\":[\"departmentId\",\"teamId\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-basic-3\",\"columns\":[{\"id\":\"col-basic-5\",\"fields\":[\"managerId\"],\"span\":{\"md\":6,\"lg\":6}}]}]},{\"id\":\"employment\",\"title\":\"Employment\",\"description\":\"Contract and compensation.\",\"icon\":\"badge\",\"collapsible\":true,\"collapsed\":false,\"rows\":[{\"id\":\"row-employment-1\",\"gap\":16,\"columns\":[{\"id\":\"col-employment-1\",\"fields\":[\"salary\",\"bonusPercent\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-employment-2\",\"fields\":[\"workMode\",\"terminationDate\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-employment-2\",\"rowGap\":16,\"columns\":[{\"id\":\"col-employment-3\",\"fields\":[\"skills\",\"availability\"],\"span\":{\"md\":12,\"lg\":12}}]}]},{\"id\":\"extras\",\"title\":\"Extras\",\"description\":\"Additional notes and context.\",\"collapsible\":true,\"collapsed\":false,\"rows\":[{\"id\":\"row-extras-1\",\"columns\":[{\"id\":\"col-extras-1\",\"fields\":[\"notes\"],\"span\":{\"md\":12,\"lg\":12},\"align\":\"stretch\",\"padding\":8}]}]},{\"id\":\"attachments\",\"title\":\"Attachments\",\"description\":\"Files and confirmations.\",\"collapsible\":true,\"collapsed\":true,\"rows\":[{\"id\":\"row-attachments-1\",\"columns\":[{\"id\":\"col-attachments-1\",\"fields\":[\"avatar\",\"terms\"],\"span\":{\"md\":12,\"lg\":12},\"align\":\"center\"}]}]},{\"id\":\"advanced\",\"title\":\"Advanced\",\"description\":\"Extra controls and integrations.\",\"collapsible\":true,\"collapsed\":true,\"rows\":[{\"id\":\"row-advanced-1\",\"gap\":16,\"columns\":[{\"id\":\"col-advanced-1\",\"fields\":[\"username\",\"password\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-advanced-2\",\"fields\":[\"country\",\"orgTree\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-advanced-2\",\"gap\":16,\"columns\":[{\"id\":\"col-advanced-3\",\"fields\":[\"themeColor\",\"cpf\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-advanced-4\",\"fields\":[\"meetingTime\",\"ratingScore\"],\"span\":{\"md\":6,\"lg\":6}}]},{\"id\":\"row-advanced-3\",\"gap\":16,\"columns\":[{\"id\":\"col-advanced-5\",\"fields\":[\"progress\",\"avatarDisplay\"],\"span\":{\"md\":6,\"lg\":6}},{\"id\":\"col-advanced-6\",\"fields\":[\"ctaButton\",\"aiAssist\"],\"span\":{\"md\":6,\"lg\":6}}]}]}]}",
9276
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9277
+ "contentHash": "c26a8600f67af24dd8654ddd3766a2b75892474954da55c3f8541af3bb40a6fe",
9278
+ "sourceKind": "component_definition",
9279
+ "sourceId": "praxis-dynamic-form",
9280
+ "corpusVersion": "1.0.0"
9281
+ },
9282
+ {
9283
+ "chunkIndex": 63,
9284
+ "chunkKind": "recipe",
9285
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"actions\",\"actions\":{\"submit\":{\"visible\":true,\"label\":\"Save\",\"icon\":\"save\",\"color\":\"primary\",\"variant\":\"raised\",\"size\":\"medium\",\"type\":\"submit\",\"shortcut\":\"Ctrl+S\",\"tooltip\":\"Save changes\",\"className\":\"action-submit\",\"style\":{\"letterSpacing\":\"0.5px\"},\"disabled\":false,\"loading\":false},\"cancel\":{\"visible\":true,\"label\":\"Cancel\",\"icon\":\"close\",\"type\":\"button\",\"color\":\"basic\"},\"reset\":{\"visible\":true,\"label\":\"Reset\",\"type\":\"reset\",\"color\":\"basic\"},\"custom\":[{\"id\":\"archive\",\"visible\":true,\"label\":\"Archive\",\"icon\":\"archive\",\"color\":\"warn\",\"variant\":\"stroked\",\"action\":\"archive\",\"tooltip\":\"Archive record\"},{\"id\":\"preview\",\"visible\":true,\"label\":\"Preview\",\"icon\":\"visibility\",\"color\":\"accent\",\"variant\":\"flat\",\"action\":\"preview\"}],\"position\":\"right\",\"orientation\":\"horizontal\",\"spacing\":\"normal\",\"sticky\":true,\"divider\":true,\"placement\":\"afterSections\",\"containerClassName\":\"form-actions-container\",\"containerStyles\":{\"background\":\"var(--md-sys-color-surface-container)\",\"border\":\"1px solid var(--md-sys-color-outline-variant)\",\"borderRadius\":\"12px\",\"padding\":\"12px 16px\"},\"mobile\":{\"position\":\"center\",\"orientation\":\"vertical\",\"collapseToMenu\":true}}}",
9286
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9287
+ "contentHash": "a39d18133cb274c5c5449251a03aeac104d6099832f77c6e2f8c623ee54c4bb9",
9288
+ "sourceKind": "component_definition",
9289
+ "sourceId": "praxis-dynamic-form",
9290
+ "corpusVersion": "1.0.0"
9291
+ },
9292
+ {
9293
+ "chunkIndex": 64,
9294
+ "chunkKind": "recipe",
9295
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"formRules\",\"formRules\":[{\"id\":\"hide-comp-for-intern\",\"name\":\"Hide compensation for interns\",\"targetType\":\"field\",\"targets\":[\"salary\",\"bonusPercent\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"workMode\"},\"INTERN\"]},\"properties\":{\"visible\":false,\"required\":false},\"propertiesWhenFalse\":{\"visible\":true}},\"description\":\"Rule for coverage of description field.\",\"targetFields\":[\"salary\",\"bonusPercent\"],\"context\":\"visibility\"},{\"id\":\"require-termination-date\",\"name\":\"Require termination date when inactive\",\"targetType\":\"field\",\"targets\":[\"terminationDate\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"properties\":{\"visible\":true,\"required\":true}}},{\"id\":\"collapse-employment-section\",\"name\":\"Collapse employment when active\",\"targetType\":\"section\",\"targets\":[\"employment\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"status\"},\"ACTIVE\"]},\"properties\":{\"collapsed\":false},\"propertiesWhenFalse\":{\"collapsed\":true}}},{\"id\":\"disable-archive-when-inactive\",\"name\":\"Disable archive when not active\",\"targetType\":\"action\",\"targets\":[\"archive\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"isActive\"},true]},\"properties\":{\"disabled\":false},\"propertiesWhenFalse\":{\"disabled\":true}}},{\"id\":\"hide-extras-row\",\"name\":\"Hide extras when intern\",\"targetType\":\"row\",\"targets\":[\"row-extras-1\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"workMode\"},\"INTERN\"]},\"properties\":{\"visible\":false},\"propertiesWhenFalse\":{\"visible\":true,\"rowGap\":16}}},{\"id\":\"expand-notes-column\",\"name\":\"Expand notes column when inactive\",\"targetType\":\"column\",\"targets\":[\"col-extras-1\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"status\"},\"INACTIVE\"]},\"properties\":{\"span\":{\"md\":12,\"lg\":12}}}},{\"id\":\"rule-field-all\",\"name\":\"Field properties coverage\",\"targetType\":\"field\",\"targets\":[\"fullName\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"required\":true,\"readonly\":false,\"disabled\":false,\"className\":\"rule-field\",\"style\":{\"color\":\"#333333\"},\"label\":\"Rule label\",\"description\":\"Rule description\",\"placeholder\":\"Rule placeholder\",\"hint\":\"Rule hint\",\"tooltip\":\"Rule tooltip\",\"prefixIcon\":\"info\",\"suffixIcon\":\"check\",\"prefixText\":\"R$\",\"suffixText\":\"USD\",\"defaultValue\":{\"value\":\"default\"},\"options\":[{\"text\":\"A\",\"value\":\"A\"}],\"appearance\":\"outline\",\"color\":\"primary\",\"floatLabel\":\"always\",\"hintPosition\":\"end\",\"validators\":{\"required\":true}},\"propertiesWhenFalse\":{\"visible\":false,\"required\":false,\"readonly\":true,\"disabled\":true,\"className\":\"rule-field-off\",\"style\":{\"color\":\"#999999\"},\"label\":\"Rule label off\",\"description\":\"Rule description off\",\"placeholder\":\"Rule placeholder off\",\"hint\":\"Rule hint off\",\"tooltip\":\"Rule tooltip off\",\"prefixIcon\":\"block\",\"suffixIcon\":\"close\",\"prefixText\":\"OFF\",\"suffixText\":\"OFF\",\"defaultValue\":{\"value\":null},\"options\":[{\"text\":\"B\",\"value\":\"B\"}],\"appearance\":\"fill\",\"color\":\"accent\",\"floatLabel\":\"never\",\"hintPosition\":\"start\",\"validators\":{\"required\":false}}}},{\"id\":\"rule-section-all\",\"name\":\"Section properties coverage\",\"targetType\":\"section\",\"targets\":[\"basic\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"title\":\"Rule section title\",\"description\":\"Rule section description\",\"icon\":\"settings\",\"className\":\"rule-section\",\"style\":{\"borderRadius\":\"8px\"},\"borderColor\":\"#cccccc\",\"borderStyle\":\"solid\",\"borderWidth\":1,\"collapsible\":true,\"collapsed\":false,\"headerTooltip\":\"Section tooltip\",\"headerAlign\":\"start\",\"gapBottom\":12,\"titleGapBottom\":4,\"descriptionGapBottom\":6,\"titleColor\":\"#222222\",\"descriptionColor\":\"#555555\",\"titleStyle\":\"titleSmall\",\"descriptionStyle\":\"bodySmall\",\"appearance\":\"outlined\"},\"propertiesWhenFalse\":{\"visible\":false,\"title\":\"Rule section title off\",\"description\":\"Rule section description off\",\"icon\":\"block\",\"className\":\"rule-section-off\",\"style\":{\"borderRadius\":\"0px\"},\"borderColor\":\"#eeeeee\",\"borderStyle\":\"dashed\",\"borderWidth\":0,\"collapsible\":false,\"collapsed\":true,\"headerTooltip\":\"Section tooltip off\",\"headerAlign\":\"center\",\"gapBottom\":0,\"titleGapBottom\":0,\"descriptionGapBottom\":0,\"titleColor\":\"#999999\",\"descriptionColor\":\"#999999\",\"titleStyle\":\"titleMedium\",\"descriptionStyle\":\"bodyMedium\",\"appearance\":\"flat\"}}},{\"id\":\"rule-action-all\",\"name\":\"Action properties coverage\",\"targetType\":\"action\",\"targets\":[\"archive\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"disabled\":false,\"loading\":false,\"label\":\"Rule action\",\"icon\":\"archive\",\"tooltip\":\"Rule tooltip\",\"color\":\"warn\",\"variant\":\"stroked\",\"size\":\"medium\",\"className\":\"rule-action\",\"style\":{\"minWidth\":\"120px\"}},\"propertiesWhenFalse\":{\"visible\":false,\"disabled\":true,\"loading\":true,\"label\":\"Rule action off\",\"icon\":\"block\",\"tooltip\":\"Rule tooltip off\",\"color\":\"basic\",\"variant\":\"flat\",\"size\":\"small\",\"className\":\"rule-action-off\",\"style\":{\"minWidth\":\"80px\"}}}},{\"id\":\"rule-row-all\",\"name\":\"Row properties coverage\",\"targetType\":\"row\",\"targets\":[\"row-basic-1\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"gap\":12,\"rowGap\":8,\"className\":\"rule-row\",\"style\":{\"marginBottom\":\"12px\"}},\"propertiesWhenFalse\":{\"visible\":false,\"gap\":0,\"rowGap\":0,\"className\":\"rule-row-off\",\"style\":{\"marginBottom\":\"0px\"}}}},{\"id\":\"rule-column-all\",\"name\":\"Column properties coverage\",\"targetType\":\"column\",\"targets\":[\"col-basic-1\"],\"effect\":{\"condition\":true,\"properties\":{\"visible\":true,\"span\":{\"xs\":12,\"sm\":12,\"md\":6,\"lg\":6,\"xl\":6},\"offset\":{\"xs\":0,\"sm\":0,\"md\":0,\"lg\":0,\"xl\":0},\"order\":{\"xs\":1,\"sm\":1,\"md\":1,\"lg\":1,\"xl\":1},\"hidden\":{\"xs\":false,\"sm\":false,\"md\":false,\"lg\":false,\"xl\":false},\"align\":\"stretch\",\"padding\":8,\"className\":\"rule-column\",\"style\":{\"backgroundColor\":\"#f6f6f6\"}},\"propertiesWhenFalse\":{\"visible\":false,\"span\":{\"xs\":12,\"sm\":12,\"md\":12,\"lg\":12,\"xl\":12},\"offset\":{\"xs\":0,\"sm\":0,\"md\":0,\"lg\":0,\"xl\":0},\"order\":{\"xs\":2,\"sm\":2,\"md\":2,\"lg\":2,\"xl\":2},\"hidden\":{\"xs\":true,\"sm\":true,\"md\":true,\"lg\":true,\"xl\":true},\"align\":\"center\",\"padding\":0,\"className\":\"rule-column-off\",\"style\":{\"backgroundColor\":\"#ffffff\"}}}}]}",
9296
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9297
+ "contentHash": "b8aba246abce9a6cf67a22dfff4d0f62367aa999cfdd45be9a02c54e1bbd8adb",
9298
+ "sourceKind": "component_definition",
9299
+ "sourceId": "praxis-dynamic-form",
9300
+ "corpusVersion": "1.0.0"
9301
+ },
9302
+ {
9303
+ "chunkIndex": 65,
9304
+ "chunkKind": "recipe",
9305
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"formRulesState\",\"formRulesState\":{\"nodes\":{},\"rootNodes\":[],\"selectedNodeId\":null,\"currentDSL\":\"\",\"currentJSON\":[],\"validationErrors\":[],\"mode\":\"visual\",\"isDirty\":false,\"history\":[],\"historyPosition\":0}}",
9306
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9307
+ "contentHash": "88d880983f1247e63825cd821df83d4a1ae58d258d651ae0ec122cfd46e7a01a",
9308
+ "sourceKind": "component_definition",
9309
+ "sourceId": "praxis-dynamic-form",
9310
+ "corpusVersion": "1.0.0"
9311
+ },
9312
+ {
9313
+ "chunkIndex": 66,
9314
+ "chunkKind": "recipe",
9315
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"_variants\",\"_variants\":[{\"id\":\"actions-legacy-flags\",\"description\":\"Legacy actions flags.\",\"patch\":{\"actions\":{\"showSaveButton\":true,\"submitButtonLabel\":\"Save\",\"showCancelButton\":true,\"cancelButtonLabel\":\"Back\",\"showResetButton\":false}}},{\"id\":\"layout-minimal\",\"description\":\"Minimal layout with one section and two fields.\",\"patch\":{\"sections\":[{\"id\":\"simple\",\"title\":\"Simple\",\"rows\":[{\"id\":\"row-simple-1\",\"columns\":[{\"id\":\"col-simple-1\",\"fields\":[\"fullName\",\"email\"]}]}]}]}},{\"id\":\"rules-clear-override\",\"description\":\"Clear rule overrides with null.\",\"patch\":{\"formRules\":[{\"id\":\"hide-comp-for-intern\",\"name\":\"Hide compensation for interns\",\"targetType\":\"field\",\"targets\":[\"salary\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"workMode\"},\"INTERN\"]},\"properties\":{\"visible\":null}}}]}}]}",
9316
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9317
+ "contentHash": "de1172d66a4cc4754691d5721cb197978f3410021e8027cfc679b5e6ef648108",
9318
+ "sourceKind": "component_definition",
9319
+ "sourceId": "praxis-dynamic-form",
9320
+ "corpusVersion": "1.0.0"
9321
+ },
9322
+ {
9323
+ "chunkIndex": 67,
9324
+ "chunkKind": "recipe",
9325
+ "content": "{\"componentId\":\"praxis-dynamic-form\",\"chunkSection\":\"presentation\",\"presentation\":{\"labelFontSize\":12,\"valueFontSize\":14,\"labelPosition\":\"left\",\"compact\":false,\"density\":\"cozy\",\"labelWidth\":140,\"labelAlign\":\"start\",\"valueAlign\":\"end\"}}",
9326
+ "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.form-config.json",
9327
+ "contentHash": "05ca6f0baad6e24f54c6167d6a9ce60c63d12e64a88db56cc837c953e64f84fe",
9328
+ "sourceKind": "component_definition",
9329
+ "sourceId": "praxis-dynamic-form",
9330
+ "corpusVersion": "1.0.0"
9331
+ },
9332
+ {
9333
+ "chunkIndex": 68,
8734
9334
  "chunkKind": "recipe",
8735
- "content": "{\n \"_comment\": \"Component-level recipe for PraxisDynamicForm. Values are placeholders for AI examples.\",\n \"templateMeta\": {\n \"defaultVariantId\": \"form-config\",\n \"variants\": [\n {\n \"id\": \"form-config\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"variantId\": \"form-config\",\n \"aiDescription\": \"FormConfig completo com layout, validacoes e hooks.\",\n \"tags\": [\n \"full\",\n \"config\"\n ],\n \"useWhen\": \"usuario pede formulario completo ou gerado a partir do schema\",\n \"examplePrompts\": [\n \"gere um formulario completo para cadastro de funcionario\",\n \"crie um form completo com layout e validacoes\"\n ]\n },\n {\n \"id\": \"fields\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"variantId\": \"fields\",\n \"aiDescription\": \"Lista completa de FieldMetadata e sections.\",\n \"tags\": [\n \"fields\",\n \"metadata\"\n ],\n \"useWhen\": \"usuario pede apenas campos ou metadados\",\n \"examplePrompts\": [\n \"adicione campos para endereco e contato\",\n \"gere somente a lista de campos\"\n ]\n },\n {\n \"id\": \"layout\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"variantId\": \"layout\",\n \"aiDescription\": \"Layout de secoes/linhas/colunas com exemplos de acoes.\",\n \"tags\": [\n \"layout\",\n \"sections\"\n ],\n \"useWhen\": \"usuario pede reorganizacao visual do formulario\",\n \"examplePrompts\": [\n \"organize o layout em duas colunas\",\n \"crie secoes e linhas para o formulario\"\n ]\n },\n {\n \"id\": \"validation\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"variantId\": \"validation\",\n \"aiDescription\": \"Validacoes complexas e regras condicionais.\",\n \"tags\": [\n \"validation\",\n \"rules\"\n ],\n \"useWhen\": \"usuario pede validacoes avancadas ou regras condicionais\",\n \"examplePrompts\": [\n \"adicione validacao cruzada de email\",\n \"crie validacoes condicionais para empresa\"\n ]\n },\n {\n \"id\": \"local-transient\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"variantId\": \"local-transient\",\n \"aiDescription\": \"Campos locais/transient que participam da UI mas ficam fora do payload backend por padrao.\",\n \"tags\": [\n \"fields\",\n \"local\",\n \"transient\",\n \"submit\"\n ],\n \"useWhen\": \"usuario precisa de campos auxiliares no formulario que nao devem participar do payload persistido\",\n \"examplePrompts\": [\n \"adicione um campo local que nao seja enviado ao backend\",\n \"crie campos auxiliares transient para ajudar no preenchimento\"\n ]\n },\n {\n \"id\": \"entity-lookup-procurement\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"variantId\": \"entity-lookup-procurement\",\n \"aiDescription\": \"Formulario de pedido de compra com Entity Lookup corporativo, RESOURCE_ENTITY, cascata, reidratacao e politica de selecao.\",\n \"tags\": [\n \"entity-lookup\",\n \"resource-entity\",\n \"option-source\",\n \"cascading\",\n \"rehydration\",\n \"procurement\"\n ],\n \"useWhen\": \"usuario precisa selecionar entidades reais do dominio com status, permissao, navegacao, dependsOn e by-ids\",\n \"examplePrompts\": [\n \"crie um pedido de compra com lookup de fornecedor contrato e produto\",\n \"gere entityLookup com dependsOn e dependencyFilterMap\",\n \"mostre um formulario com RESOURCE_ENTITY e reidratacao por by-ids\"\n ]\n },\n {\n \"id\": \"visual-block-domain-rules\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"variantId\": \"visual-block-domain-rules\",\n \"aiDescription\": \"Regras de dominio que alteram visualBlock text/title/message/style sem criar campos nem payload.\",\n \"tags\": [\n \"visual-block\",\n \"form-rules\",\n \"domain-rules\",\n \"rich-content\",\n \"llm-authoring\"\n ],\n \"useWhen\": \"usuario precisa de avisos, orientacoes e copy operacional condicionais sem alterar submit payload\",\n \"examplePrompts\": [\n \"crie regras de dominio para alterar avisos visuais do formulario\",\n \"adicione visualBlock rules para LGPD compliance ou risco de fornecedor\",\n \"mostre regras de texto para blocos visuais sem criar campos\"\n ]\n },\n {\n \"id\": \"command-rules\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"variantId\": \"command-rules\",\n \"aiDescription\": \"Regras condicionais governadas que executam GlobalActionRef depois que valores calculados estabilizam.\",\n \"tags\": [\n \"formCommandRules\",\n \"global-action\",\n \"computed-values\",\n \"business-rules\"\n ],\n \"useWhen\": \"usuario precisa disparar alertas, confirmacoes ou comandos host-mediated por regra declarativa do formulario\",\n \"examplePrompts\": [\n \"crie uma regra que alerta quando idade calculada for menor que 18\",\n \"confirme quando o periodo de ferias iniciar em uma sexta-feira\",\n \"mostre formCommandRules com dialog.alert e dialog.confirm\"\n ]\n }\n ]\n },\n \"component\": \"praxis-dynamic-form\",\n \"inputs\": {\n \"resourcePath\": \"/api/employees\",\n \"resourceId\": \"123\",\n \"mode\": \"edit\",\n \"config\": {\n \"_comment\": \"Use praxis-dynamic-form.form-config.json for a full FormConfig example.\",\n \"sections\": [\n {\n \"id\": \"minimal\",\n \"rows\": []\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 \"schemaSource\": \"resource\",\n \"enableCustomization\": true,\n \"formId\": \"employee-form\",\n \"layout\": {\n \"formTitle\": \"Legacy layout example\",\n \"formDescription\": \"Fieldsets-based layout (legacy)\",\n \"fieldsets\": [\n {\n \"id\": \"legacy-basic\",\n \"title\": \"Legacy\",\n \"orientation\": \"vertical\",\n \"rows\": [\n {\n \"id\": \"legacy-row-1\",\n \"orientation\": \"horizontal\",\n \"fields\": [\n {\n \"name\": \"legacyField\",\n \"label\": \"Legacy field\",\n \"controlType\": \"input\"\n }\n ]\n }\n ]\n }\n ]\n },\n \"backConfig\": {\n \"strategy\": \"navigate\",\n \"returnTo\": \"/employees\",\n \"confirmOnDirty\": true\n },\n \"hooks\": {\n \"beforeInit\": [\n {\n \"id\": \"load-static-options\",\n \"priority\": 100,\n \"timeoutMs\": 2000,\n \"args\": {\n \"source\": \"cache\"\n }\n }\n ],\n \"afterInit\": [],\n \"beforeValidate\": [],\n \"afterValidate\": [],\n \"beforeSubmit\": [],\n \"afterSubmit\": [\n {\n \"id\": \"notify-success\",\n \"priority\": 10\n }\n ],\n \"onError\": []\n },\n \"removeEmptyContainersOnSave\": true,\n \"reactiveValidation\": true,\n \"reactiveValidationDebounceMs\": 250,\n \"notifyIfOutdated\": \"snackbar\",\n \"snoozeMs\": 86400000,\n \"autoOpenSettingsOnOutdated\": false,\n \"readonlyModeGlobal\": false,\n \"disabledModeGlobal\": false,\n \"presentationModeGlobal\": false,\n \"visibleGlobal\": true,\n \"customEndpoints\": {\n \"getAll\": \"/api/employees\",\n \"getById\": \"/api/employees/{id}\",\n \"create\": \"/api/employees\",\n \"update\": \"/api/employees/{id}\",\n \"delete\": \"/api/employees/{id}\",\n \"filter\": \"/api/employees/filter\",\n \"schema\": \"/api/employees/schemas\"\n }\n },\n \"outputs\": {\n \"formSubmit\": {\n \"payload\": {\n \"stage\": \"after\",\n \"formData\": {\n \"id\": 123,\n \"fullName\": \"Ana Souza\"\n },\n \"rawFormData\": {\n \"id\": 123,\n \"fullName\": \"Ana Souza\",\n \"approvalComment\": \"Conferido com o solicitante\"\n },\n \"isValid\": true,\n \"validationErrors\": [],\n \"entityId\": 123,\n \"operation\": \"update\",\n \"result\": {\n \"status\": \"ok\"\n }\n }\n },\n \"formCancel\": {\n \"payload\": null\n },\n \"formReset\": {\n \"payload\": null\n },\n \"configChange\": {\n \"payload\": {\n \"sections\": [\n {\n \"id\": \"minimal\",\n \"rows\": []\n }\n ]\n }\n },\n \"formReady\": {\n \"payload\": {\n \"formGroup\": \"[FormGroup]\",\n \"fieldsMetadata\": [\n {\n \"name\": \"fullName\",\n \"label\": \"Full name\",\n \"controlType\": \"input\"\n }\n ],\n \"layout\": {\n \"formTitle\": \"Employee\"\n },\n \"hasEntity\": true,\n \"entityId\": 123\n }\n },\n \"valueChange\": {\n \"payload\": {\n \"formData\": {\n \"email\": \"ana@example.com\"\n },\n \"changedField\": \"email\",\n \"previousValue\": \"old@example.com\",\n \"currentValue\": \"ana@example.com\",\n \"changedFields\": [\n \"email\"\n ],\n \"isValid\": true,\n \"entityId\": 123\n }\n },\n \"syncCompleted\": {\n \"payload\": {\n \"hasChanges\": true,\n \"addedFields\": [\n {\n \"name\": \"nickname\",\n \"label\": \"Nickname\",\n \"controlType\": \"input\"\n }\n ],\n \"removedFields\": [\n \"legacyField\"\n ],\n \"modifiedFields\": [\n {\n \"fieldName\": \"email\",\n \"property\": \"label\",\n \"localValue\": \"Email\",\n \"serverValue\": \"E-mail\"\n }\n ],\n \"conflicts\": [\n {\n \"fieldName\": \"salary\",\n \"reason\": \"user-customized\",\n \"resolution\": \"keep-local\"\n }\n ]\n }\n },\n \"initializationError\": {\n \"payload\": {\n \"stage\": \"schema-fetch\",\n \"error\": {\n \"message\": \"Schema failed to load\"\n },\n \"context\": {\n \"formId\": \"employee-form\",\n \"resourcePath\": \"/api/employees\",\n \"hasLocalConfig\": true\n },\n \"recoverable\": true,\n \"userMessage\": \"Unable to load form schema.\"\n }\n },\n \"enableCustomizationChange\": {\n \"payload\": true\n },\n \"customAction\": {\n \"payload\": {\n \"actionId\": \"archive\",\n \"formData\": {\n \"id\": 123\n },\n \"isValid\": true,\n \"source\": \"button\"\n }\n },\n \"actionConfirmation\": {\n \"payload\": {\n \"actionId\": \"archive\",\n \"message\": \"Confirm archive?\",\n \"confirmed\": true\n }\n },\n \"schemaStatusChange\": {\n \"payload\": {\n \"outdated\": false,\n \"serverHash\": \"hash-abc-123\",\n \"lastVerifiedAt\": \"2024-02-02T10:00:00Z\",\n \"formId\": \"employee-form\"\n }\n }\n }\n}\n",
9335
+ "content": "{\"_comment\":\"Component-level recipe for PraxisDynamicForm. Values are placeholders for AI examples.\",\"templateMeta\":{\"defaultVariantId\":\"form-config\",\"variants\":[{\"id\":\"form-config\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"form-config\",\"aiDescription\":\"FormConfig completo com layout, validacoes e hooks.\",\"tags\":[\"full\",\"config\"],\"useWhen\":\"usuario pede formulario completo ou gerado a partir do schema\",\"examplePrompts\":[\"gere um formulario completo para cadastro de funcionario\",\"crie um form completo com layout e validacoes\"]},{\"id\":\"fields\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"fields\",\"aiDescription\":\"Lista completa de FieldMetadata e sections.\",\"tags\":[\"fields\",\"metadata\"],\"useWhen\":\"usuario pede apenas campos ou metadados\",\"examplePrompts\":[\"adicione campos para endereco e contato\",\"gere somente a lista de campos\"]},{\"id\":\"layout\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"layout\",\"aiDescription\":\"Layout de secoes/linhas/colunas com exemplos de acoes.\",\"tags\":[\"layout\",\"sections\"],\"useWhen\":\"usuario pede reorganizacao visual do formulario\",\"examplePrompts\":[\"organize o layout em duas colunas\",\"crie secoes e linhas para o formulario\"]},{\"id\":\"validation\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"validation\",\"aiDescription\":\"Validacoes complexas e regras condicionais.\",\"tags\":[\"validation\",\"rules\"],\"useWhen\":\"usuario pede validacoes avancadas ou regras condicionais\",\"examplePrompts\":[\"adicione validacao cruzada de email\",\"crie validacoes condicionais para empresa\"]},{\"id\":\"local-transient\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"local-transient\",\"aiDescription\":\"Campos locais/transient que participam da UI mas ficam fora do payload backend por padrao.\",\"tags\":[\"fields\",\"local\",\"transient\",\"submit\"],\"useWhen\":\"usuario precisa de campos auxiliares no formulario que nao devem participar do payload persistido\",\"examplePrompts\":[\"adicione um campo local que nao seja enviado ao backend\",\"crie campos auxiliares transient para ajudar no preenchimento\"]},{\"id\":\"entity-lookup-procurement\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"entity-lookup-procurement\",\"aiDescription\":\"Formulario de pedido de compra com Entity Lookup corporativo, RESOURCE_ENTITY, cascata, reidratacao e politica de selecao.\",\"tags\":[\"entity-lookup\",\"resource-entity\",\"option-source\",\"cascading\",\"rehydration\",\"procurement\"],\"useWhen\":\"usuario precisa selecionar entidades reais do dominio com status, permissao, navegacao, dependsOn e by-ids\",\"examplePrompts\":[\"crie um pedido de compra com lookup de fornecedor contrato e produto\",\"gere entityLookup com dependsOn e dependencyFilterMap\",\"mostre um formulario com RESOURCE_ENTITY e reidratacao por by-ids\"]},{\"id\":\"visual-block-domain-rules\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"visual-block-domain-rules\",\"aiDescription\":\"Regras de dominio que alteram visualBlock text/title/message/style sem criar campos nem payload.\",\"tags\":[\"visual-block\",\"form-rules\",\"domain-rules\",\"rich-content\",\"llm-authoring\"],\"useWhen\":\"usuario precisa de avisos, orientacoes e copy operacional condicionais sem alterar submit payload\",\"examplePrompts\":[\"crie regras de dominio para alterar avisos visuais do formulario\",\"adicione visualBlock rules para LGPD compliance ou risco de fornecedor\",\"mostre regras de texto para blocos visuais sem criar campos\"]},{\"id\":\"command-rules\",\"registryKey\":\"praxis-dynamic-form\",\"variantId\":\"command-rules\",\"aiDescription\":\"Regras condicionais governadas que executam GlobalActionRef depois que valores calculados estabilizam.\",\"tags\":[\"formCommandRules\",\"global-action\",\"computed-values\",\"business-rules\"],\"useWhen\":\"usuario precisa disparar alertas, confirmacoes ou comandos host-mediated por regra declarativa do formulario\",\"examplePrompts\":[\"crie uma regra que alerta quando idade calculada for menor que 18\",\"confirme quando o periodo de ferias iniciar em uma sexta-feira\",\"mostre formCommandRules com dialog.alert e dialog.confirm\"]}]},\"component\":\"praxis-dynamic-form\",\"inputs\":{\"resourcePath\":\"/api/employees\",\"resourceId\":\"123\",\"mode\":\"edit\",\"config\":{\"_comment\":\"Use praxis-dynamic-form.form-config.json for a full FormConfig example.\",\"sections\":[{\"id\":\"minimal\",\"rows\":[]}],\"presentation\":{\"labelFontSize\":12,\"valueFontSize\":14,\"labelPosition\":\"left\",\"compact\":false,\"density\":\"cozy\",\"labelWidth\":140,\"labelAlign\":\"start\",\"valueAlign\":\"end\"}},\"schemaSource\":\"resource\",\"enableCustomization\":true,\"formId\":\"employee-form\",\"layout\":{\"formTitle\":\"Legacy layout example\",\"formDescription\":\"Fieldsets-based layout (legacy)\",\"fieldsets\":[{\"id\":\"legacy-basic\",\"title\":\"Legacy\",\"orientation\":\"vertical\",\"rows\":[{\"id\":\"legacy-row-1\",\"orientation\":\"horizontal\",\"fields\":[{\"name\":\"legacyField\",\"label\":\"Legacy field\",\"controlType\":\"input\"}]}]}]},\"backConfig\":{\"strategy\":\"navigate\",\"returnTo\":\"/employees\",\"confirmOnDirty\":true},\"hooks\":{\"beforeInit\":[{\"id\":\"load-static-options\",\"priority\":100,\"timeoutMs\":2000,\"args\":{\"source\":\"cache\"}}],\"afterInit\":[],\"beforeValidate\":[],\"afterValidate\":[],\"beforeSubmit\":[],\"afterSubmit\":[{\"id\":\"notify-success\",\"priority\":10}],\"onError\":[]},\"removeEmptyContainersOnSave\":true,\"reactiveValidation\":true,\"reactiveValidationDebounceMs\":250,\"notifyIfOutdated\":\"snackbar\",\"snoozeMs\":86400000,\"autoOpenSettingsOnOutdated\":false,\"readonlyModeGlobal\":false,\"disabledModeGlobal\":false,\"presentationModeGlobal\":false,\"visibleGlobal\":true,\"customEndpoints\":{\"getAll\":\"/api/employees\",\"getById\":\"/api/employees/{id}\",\"create\":\"/api/employees\",\"update\":\"/api/employees/{id}\",\"delete\":\"/api/employees/{id}\",\"filter\":\"/api/employees/filter\",\"schema\":\"/api/employees/schemas\"}},\"outputs\":{\"formSubmit\":{\"payload\":{\"stage\":\"after\",\"formData\":{\"id\":123,\"fullName\":\"Ana Souza\"},\"rawFormData\":{\"id\":123,\"fullName\":\"Ana Souza\",\"approvalComment\":\"Conferido com o solicitante\"},\"isValid\":true,\"validationErrors\":[],\"entityId\":123,\"operation\":\"update\",\"result\":{\"status\":\"ok\"}}},\"formCancel\":{\"payload\":null},\"formReset\":{\"payload\":null},\"configChange\":{\"payload\":{\"sections\":[{\"id\":\"minimal\",\"rows\":[]}]}},\"formReady\":{\"payload\":{\"formGroup\":\"[FormGroup]\",\"fieldsMetadata\":[{\"name\":\"fullName\",\"label\":\"Full name\",\"controlType\":\"input\"}],\"layout\":{\"formTitle\":\"Employee\"},\"hasEntity\":true,\"entityId\":123}},\"valueChange\":{\"payload\":{\"formData\":{\"email\":\"ana@example.com\"},\"changedField\":\"email\",\"previousValue\":\"old@example.com\",\"currentValue\":\"ana@example.com\",\"changedFields\":[\"email\"],\"isValid\":true,\"entityId\":123}},\"syncCompleted\":{\"payload\":{\"hasChanges\":true,\"addedFields\":[{\"name\":\"nickname\",\"label\":\"Nickname\",\"controlType\":\"input\"}],\"removedFields\":[\"legacyField\"],\"modifiedFields\":[{\"fieldName\":\"email\",\"property\":\"label\",\"localValue\":\"Email\",\"serverValue\":\"E-mail\"}],\"conflicts\":[{\"fieldName\":\"salary\",\"reason\":\"user-customized\",\"resolution\":\"keep-local\"}]}},\"initializationError\":{\"payload\":{\"stage\":\"schema-fetch\",\"error\":{\"message\":\"Schema failed to load\"},\"context\":{\"formId\":\"employee-form\",\"resourcePath\":\"/api/employees\",\"hasLocalConfig\":true},\"recoverable\":true,\"userMessage\":\"Unable to load form schema.\"}},\"enableCustomizationChange\":{\"payload\":true},\"customAction\":{\"payload\":{\"actionId\":\"archive\",\"formData\":{\"id\":123},\"isValid\":true,\"source\":\"button\"}},\"actionConfirmation\":{\"payload\":{\"actionId\":\"archive\",\"message\":\"Confirm archive?\",\"confirmed\":true}},\"schemaStatusChange\":{\"payload\":{\"outdated\":false,\"serverHash\":\"hash-abc-123\",\"lastVerifiedAt\":\"2024-02-02T10:00:00Z\",\"formId\":\"employee-form\"}}}}",
8736
9336
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.json",
8737
- "contentHash": "41d4a94c1baf1bb5150f8504c1a3e6e74134f1f6de30046982cb270c0233538e",
9337
+ "contentHash": "c6e3170148fed66e1d7d0b86e0f64f40ef76d17a4be9c70b37733386ff9b06ec",
8738
9338
  "sourceKind": "component_definition",
8739
9339
  "sourceId": "praxis-dynamic-form",
8740
9340
  "corpusVersion": "1.0.0"
8741
9341
  },
8742
9342
  {
8743
- "chunkIndex": 9,
9343
+ "chunkIndex": 69,
8744
9344
  "chunkKind": "recipe",
8745
- "content": "{\n \"_comment\": \"Receita de layout complexo com múltiplas seções, colunas assimétricas (2/3 + 1/3) e ações posicionadas explicitamente.\",\n \"templateMeta\": {\n \"variantId\": \"layout\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"tags\": [\n \"layout\",\n \"sections\"\n ],\n \"useWhen\": \"ajustar layout, secoes, linhas e colunas\",\n \"examplePrompts\": [\n \"organize o layout em colunas\",\n \"divida o formulario em secoes\"\n ]\n },\n \"metadata\": {\n \"name\": \"Complex Layout Example\",\n \"version\": \"v1\"\n },\n \"sections\": [\n {\n \"id\": \"summary\",\n \"title\": \"Resumo\",\n \"description\": \"Informações principais em colunas assimétricas.\",\n \"rows\": [\n {\n \"id\": \"summary-row-1\",\n \"columns\": [\n {\n \"id\": \"summary-main\",\n \"span\": {\n \"md\": 8,\n \"lg\": 8\n },\n \"fields\": [\n \"title\",\n \"description\"\n ],\n \"_comment\": \"Coluna principal ocupando 2/3 da largura.\"\n },\n {\n \"id\": \"summary-side\",\n \"span\": {\n \"md\": 4,\n \"lg\": 4\n },\n \"fields\": [\n \"status\",\n \"priority\",\n \"owner\"\n ],\n \"_comment\": \"Coluna lateral ocupando 1/3 da largura.\"\n }\n ]\n }\n ]\n },\n {\n \"id\": \"dates\",\n \"title\": \"Datas\",\n \"rows\": [\n {\n \"id\": \"dates-row-1\",\n \"columns\": [\n {\n \"id\": \"dates-start\",\n \"span\": {\n \"md\": 4,\n \"lg\": 4\n },\n \"fields\": [\n \"startDate\"\n ]\n },\n {\n \"id\": \"dates-due\",\n \"span\": {\n \"md\": 4,\n \"lg\": 4\n },\n \"fields\": [\n \"dueDate\"\n ]\n },\n {\n \"id\": \"dates-sla\",\n \"span\": {\n \"md\": 4,\n \"lg\": 4\n },\n \"fields\": [\n \"slaDays\"\n ]\n }\n ],\n \"_comment\": \"Linha com 3 colunas de largura igual (automatico).\"\n }\n ]\n },\n {\n \"id\": \"attachments\",\n \"title\": \"Anexos e Comentários\",\n \"rows\": [\n {\n \"id\": \"attachments-row-1\",\n \"columns\": [\n {\n \"id\": \"attachments-col\",\n \"fields\": [\n \"attachments\"\n ]\n }\n ]\n },\n {\n \"id\": \"attachments-row-2\",\n \"columns\": [\n {\n \"id\": \"notes-col\",\n \"fields\": [\n \"notes\"\n ]\n }\n ]\n }\n ]\n }\n ],\n \"fieldMetadata\": [\n {\n \"name\": \"title\",\n \"label\": \"Título\",\n \"controlType\": \"input\",\n \"validators\": {\n \"required\": true\n }\n },\n {\n \"name\": \"description\",\n \"label\": \"Descrição\",\n \"controlType\": \"textarea\",\n \"rows\": 3\n },\n {\n \"name\": \"status\",\n \"label\": \"Status\",\n \"controlType\": \"select\",\n \"options\": [\n {\n \"label\": \"Aberto\",\n \"value\": \"OPEN\"\n },\n {\n \"label\": \"Fechado\",\n \"value\": \"CLOSED\"\n }\n ]\n },\n {\n \"name\": \"priority\",\n \"label\": \"Prioridade\",\n \"controlType\": \"select\",\n \"options\": [\n {\n \"label\": \"Alta\",\n \"value\": \"HIGH\"\n },\n {\n \"label\": \"Média\",\n \"value\": \"MEDIUM\"\n },\n {\n \"label\": \"Baixa\",\n \"value\": \"LOW\"\n }\n ]\n },\n {\n \"name\": \"owner\",\n \"label\": \"Responsável\",\n \"controlType\": \"autoComplete\",\n \"searchable\": true\n },\n {\n \"name\": \"startDate\",\n \"label\": \"Início\",\n \"controlType\": \"date\"\n },\n {\n \"name\": \"dueDate\",\n \"label\": \"Entrega\",\n \"controlType\": \"date\"\n },\n {\n \"name\": \"slaDays\",\n \"label\": \"SLA (dias)\",\n \"controlType\": \"numericTextBox\"\n },\n {\n \"name\": \"attachments\",\n \"label\": \"Anexos\",\n \"controlType\": \"upload\"\n },\n {\n \"name\": \"notes\",\n \"label\": \"Notas\",\n \"controlType\": \"textarea\",\n \"rows\": 4\n }\n ],\n \"actions\": {\n \"submit\": {\n \"id\": \"save\",\n \"label\": \"Salvar\",\n \"color\": \"primary\",\n \"visible\": true,\n \"type\": \"submit\"\n },\n \"cancel\": {\n \"id\": \"cancel\",\n \"label\": \"Cancelar\",\n \"color\": \"basic\",\n \"visible\": true,\n \"type\": \"button\"\n },\n \"reset\": {\n \"id\": \"reset\",\n \"label\": \"Limpar\",\n \"color\": \"basic\",\n \"visible\": false,\n \"type\": \"reset\"\n },\n \"position\": \"right\",\n \"placement\": \"afterSections\"\n }\n}\n",
9345
+ "content": "{\"_comment\":\"Receita de layout complexo com múltiplas seções, colunas assimétricas (2/3 + 1/3) e ações posicionadas explicitamente.\",\"templateMeta\":{\"variantId\":\"layout\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"layout\",\"sections\"],\"useWhen\":\"ajustar layout, secoes, linhas e colunas\",\"examplePrompts\":[\"organize o layout em colunas\",\"divida o formulario em secoes\"]},\"metadata\":{\"name\":\"Complex Layout Example\",\"version\":\"v1\"},\"sections\":[{\"id\":\"summary\",\"title\":\"Resumo\",\"description\":\"Informações principais em colunas assimétricas.\",\"rows\":[{\"id\":\"summary-row-1\",\"columns\":[{\"id\":\"summary-main\",\"span\":{\"md\":8,\"lg\":8},\"fields\":[\"title\",\"description\"],\"_comment\":\"Coluna principal ocupando 2/3 da largura.\"},{\"id\":\"summary-side\",\"span\":{\"md\":4,\"lg\":4},\"fields\":[\"status\",\"priority\",\"owner\"],\"_comment\":\"Coluna lateral ocupando 1/3 da largura.\"}]}]},{\"id\":\"dates\",\"title\":\"Datas\",\"rows\":[{\"id\":\"dates-row-1\",\"columns\":[{\"id\":\"dates-start\",\"span\":{\"md\":4,\"lg\":4},\"fields\":[\"startDate\"]},{\"id\":\"dates-due\",\"span\":{\"md\":4,\"lg\":4},\"fields\":[\"dueDate\"]},{\"id\":\"dates-sla\",\"span\":{\"md\":4,\"lg\":4},\"fields\":[\"slaDays\"]}],\"_comment\":\"Linha com 3 colunas de largura igual (automatico).\"}]},{\"id\":\"attachments\",\"title\":\"Anexos e Comentários\",\"rows\":[{\"id\":\"attachments-row-1\",\"columns\":[{\"id\":\"attachments-col\",\"fields\":[\"attachments\"]}]},{\"id\":\"attachments-row-2\",\"columns\":[{\"id\":\"notes-col\",\"fields\":[\"notes\"]}]}]}],\"fieldMetadata\":[{\"name\":\"title\",\"label\":\"Título\",\"controlType\":\"input\",\"validators\":{\"required\":true}},{\"name\":\"description\",\"label\":\"Descrição\",\"controlType\":\"textarea\",\"rows\":3},{\"name\":\"status\",\"label\":\"Status\",\"controlType\":\"select\",\"options\":[{\"label\":\"Aberto\",\"value\":\"OPEN\"},{\"label\":\"Fechado\",\"value\":\"CLOSED\"}]},{\"name\":\"priority\",\"label\":\"Prioridade\",\"controlType\":\"select\",\"options\":[{\"label\":\"Alta\",\"value\":\"HIGH\"},{\"label\":\"Média\",\"value\":\"MEDIUM\"},{\"label\":\"Baixa\",\"value\":\"LOW\"}]},{\"name\":\"owner\",\"label\":\"Responsável\",\"controlType\":\"autoComplete\",\"searchable\":true},{\"name\":\"startDate\",\"label\":\"Início\",\"controlType\":\"date\"},{\"name\":\"dueDate\",\"label\":\"Entrega\",\"controlType\":\"date\"},{\"name\":\"slaDays\",\"label\":\"SLA (dias)\",\"controlType\":\"numericTextBox\"},{\"name\":\"attachments\",\"label\":\"Anexos\",\"controlType\":\"upload\"},{\"name\":\"notes\",\"label\":\"Notas\",\"controlType\":\"textarea\",\"rows\":4}],\"actions\":{\"submit\":{\"id\":\"save\",\"label\":\"Salvar\",\"color\":\"primary\",\"visible\":true,\"type\":\"submit\"},\"cancel\":{\"id\":\"cancel\",\"label\":\"Cancelar\",\"color\":\"basic\",\"visible\":true,\"type\":\"button\"},\"reset\":{\"id\":\"reset\",\"label\":\"Limpar\",\"color\":\"basic\",\"visible\":false,\"type\":\"reset\"},\"position\":\"right\",\"placement\":\"afterSections\"}}",
8746
9346
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.layout.json",
8747
- "contentHash": "0a684ab4e0f45325f1540b3fc0569c41d61ce8af8bd91764ad449b5769134156",
9347
+ "contentHash": "e2bb1412530481b4dc8f37b71b1e0596eef76650b73ae85839ceda7efa5e9a6e",
8748
9348
  "sourceKind": "component_definition",
8749
9349
  "sourceId": "praxis-dynamic-form",
8750
9350
  "corpusVersion": "1.0.0"
8751
9351
  },
8752
9352
  {
8753
- "chunkIndex": 10,
9353
+ "chunkIndex": 70,
8754
9354
  "chunkKind": "recipe",
8755
- "content": "{\n \"_comment\": \"Recipe for host local/transient fields in PraxisDynamicForm. These fields participate in UI state but are omitted from backend payloads by default.\",\n \"templateMeta\": {\n \"variantId\": \"local-transient\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"tags\": [\n \"fields\",\n \"local\",\n \"transient\",\n \"submit\"\n ],\n \"useWhen\": \"campos auxiliares do host devem ajudar no preenchimento sem entrar no payload enviado ao backend\",\n \"examplePrompts\": [\n \"adicione campos locais que nao sejam enviados ao backend\",\n \"crie campos transient para calculo ou confirmacao visual\",\n \"mostre formData filtrado e rawFormData completo no submit\"\n ]\n },\n \"metadata\": {\n \"version\": \"2.0.0\",\n \"source\": \"local\",\n \"schemaId\": \"path:/api/employees#request\"\n },\n \"fieldMetadata\": [\n {\n \"name\": \"fullName\",\n \"label\": \"Nome completo\",\n \"controlType\": \"input\",\n \"validators\": {\n \"required\": true,\n \"minLength\": 3\n }\n },\n {\n \"name\": \"email\",\n \"label\": \"Email\",\n \"controlType\": \"email\",\n \"validators\": {\n \"required\": true,\n \"email\": true\n }\n },\n {\n \"name\": \"approvalComment\",\n \"label\": \"Comentario interno de aprovacao\",\n \"controlType\": \"textarea\",\n \"source\": \"local\",\n \"submitPolicy\": \"omit\",\n \"description\": \"Campo auxiliar do host. Participa da UI e de regras locais, mas nao entra em formSubmit.formData.\"\n },\n {\n \"name\": \"calculatedRiskScore\",\n \"label\": \"Score calculado\",\n \"controlType\": \"numericTextBox\",\n \"transient\": true,\n \"readOnly\": true,\n \"description\": \"Valor calculado no cliente para orientar o preenchimento. Omitido do payload por padrao.\"\n },\n {\n \"name\": \"manualOverrideReason\",\n \"label\": \"Justificativa de ajuste manual\",\n \"controlType\": \"textarea\",\n \"source\": \"local\",\n \"submitPolicy\": \"includeWhenDirty\",\n \"description\": \"Exemplo de excecao: campo local enviado somente se o usuario alterar o controle.\"\n }\n ],\n \"sections\": [\n {\n \"id\": \"employee-data\",\n \"title\": \"Dados do funcionario\",\n \"rows\": [\n {\n \"id\": \"identity-row\",\n \"columns\": [\n {\n \"id\": \"identity-column\",\n \"fields\": [\n \"fullName\",\n \"email\"\n ]\n }\n ]\n }\n ]\n },\n {\n \"id\": \"host-assistance\",\n \"title\": \"Apoio ao preenchimento\",\n \"rows\": [\n {\n \"id\": \"local-row\",\n \"columns\": [\n {\n \"id\": \"local-column\",\n \"fields\": [\n \"approvalComment\",\n \"calculatedRiskScore\",\n \"manualOverrideReason\"\n ]\n }\n ]\n }\n ]\n }\n ],\n \"submitExample\": {\n \"rawFormData\": {\n \"fullName\": \"Ana Souza\",\n \"email\": \"ana@example.com\",\n \"approvalComment\": \"Validado com RH\",\n \"calculatedRiskScore\": 82,\n \"manualOverrideReason\": \"Ajuste autorizado\"\n },\n \"formData\": {\n \"fullName\": \"Ana Souza\",\n \"email\": \"ana@example.com\",\n \"manualOverrideReason\": \"Ajuste autorizado\"\n },\n \"notes\": [\n \"approvalComment usa submitPolicy omit e fica somente em rawFormData.\",\n \"calculatedRiskScore usa transient true e fica somente em rawFormData.\",\n \"manualOverrideReason usa includeWhenDirty e entra em formData apenas quando o controle estiver dirty.\"\n ]\n }\n}\n",
9355
+ "content": "{\"_comment\":\"Recipe for host local/transient fields in PraxisDynamicForm. These fields participate in UI state but are omitted from backend payloads by default.\",\"templateMeta\":{\"variantId\":\"local-transient\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"fields\",\"local\",\"transient\",\"submit\"],\"useWhen\":\"campos auxiliares do host devem ajudar no preenchimento sem entrar no payload enviado ao backend\",\"examplePrompts\":[\"adicione campos locais que nao sejam enviados ao backend\",\"crie campos transient para calculo ou confirmacao visual\",\"mostre formData filtrado e rawFormData completo no submit\"]},\"metadata\":{\"version\":\"2.0.0\",\"source\":\"local\",\"schemaId\":\"path:/api/employees#request\"},\"fieldMetadata\":[{\"name\":\"fullName\",\"label\":\"Nome completo\",\"controlType\":\"input\",\"validators\":{\"required\":true,\"minLength\":3}},{\"name\":\"email\",\"label\":\"Email\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"email\":true}},{\"name\":\"approvalComment\",\"label\":\"Comentario interno de aprovacao\",\"controlType\":\"textarea\",\"source\":\"local\",\"submitPolicy\":\"omit\",\"description\":\"Campo auxiliar do host. Participa da UI e de regras locais, mas nao entra em formSubmit.formData.\"},{\"name\":\"calculatedRiskScore\",\"label\":\"Score calculado\",\"controlType\":\"numericTextBox\",\"transient\":true,\"readOnly\":true,\"description\":\"Valor calculado no cliente para orientar o preenchimento. Omitido do payload por padrao.\"},{\"name\":\"manualOverrideReason\",\"label\":\"Justificativa de ajuste manual\",\"controlType\":\"textarea\",\"source\":\"local\",\"submitPolicy\":\"includeWhenDirty\",\"description\":\"Exemplo de excecao: campo local enviado somente se o usuario alterar o controle.\"}],\"sections\":[{\"id\":\"employee-data\",\"title\":\"Dados do funcionario\",\"rows\":[{\"id\":\"identity-row\",\"columns\":[{\"id\":\"identity-column\",\"fields\":[\"fullName\",\"email\"]}]}]},{\"id\":\"host-assistance\",\"title\":\"Apoio ao preenchimento\",\"rows\":[{\"id\":\"local-row\",\"columns\":[{\"id\":\"local-column\",\"fields\":[\"approvalComment\",\"calculatedRiskScore\",\"manualOverrideReason\"]}]}]}],\"submitExample\":{\"rawFormData\":{\"fullName\":\"Ana Souza\",\"email\":\"ana@example.com\",\"approvalComment\":\"Validado com RH\",\"calculatedRiskScore\":82,\"manualOverrideReason\":\"Ajuste autorizado\"},\"formData\":{\"fullName\":\"Ana Souza\",\"email\":\"ana@example.com\",\"manualOverrideReason\":\"Ajuste autorizado\"},\"notes\":[\"approvalComment usa submitPolicy omit e fica somente em rawFormData.\",\"calculatedRiskScore usa transient true e fica somente em rawFormData.\",\"manualOverrideReason usa includeWhenDirty e entra em formData apenas quando o controle estiver dirty.\"]}}",
8756
9356
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.local-transient.json",
8757
- "contentHash": "2f762aded58a3182833e4675253ca7d0a3878ca447dfcd8a57623f6c6d61c75e",
9357
+ "contentHash": "7867436ca634dcde9ada6814da2ae3ae8155f3716ffe365859ef01a75f2f445a",
8758
9358
  "sourceKind": "component_definition",
8759
9359
  "sourceId": "praxis-dynamic-form",
8760
9360
  "corpusVersion": "1.0.0"
8761
9361
  },
8762
9362
  {
8763
- "chunkIndex": 11,
9363
+ "chunkIndex": 71,
8764
9364
  "chunkKind": "recipe",
8765
- "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",
9365
+ "content": "{\"_comment\":\"Receita focada em validações complexas: campos dependentes, validação cruzada (matchField), assíncrona (unique) e regras condicionais.\",\"templateMeta\":{\"variantId\":\"validation\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"tags\":[\"validation\",\"rules\"],\"useWhen\":\"criar validacoes avancadas e regras condicionais\",\"examplePrompts\":[\"adicione validacao cruzada de email\",\"crie regras condicionais por tipo de conta\"]},\"metadata\":{\"name\":\"Advanced Validation Form\",\"version\":\"v1\"},\"fieldMetadata\":[{\"name\":\"username\",\"label\":\"Usuário\",\"controlType\":\"input\",\"unique\":true,\"validators\":{\"required\":true,\"minLength\":4,\"pattern\":\"^[a-z0-9_]+$\",\"patternMessage\":\"Apenas letras minúsculas, números e underline.\",\"uniqueValidator\":\"checkUsernameUnique\",\"uniqueMessage\":\"Este usuário já está em uso.\"},\"_comment\":\"Validação de pattern regex e unicidade simulada.\"},{\"name\":\"email\",\"label\":\"E-mail\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"email\":true}},{\"name\":\"confirmEmail\",\"label\":\"Confirmar E-mail\",\"controlType\":\"email\",\"validators\":{\"required\":true,\"matchField\":\"email\",\"matchFieldMessage\":\"Os e-mails não conferem.\"},\"_comment\":\"Validação cruzada: deve ser igual ao campo 'email'.\"},{\"name\":\"password\",\"label\":\"Senha\",\"controlType\":\"password\",\"validators\":{\"required\":true,\"minLength\":8,\"customValidator\":\"passwordStrength\"}},{\"name\":\"age\",\"label\":\"Idade\",\"controlType\":\"numericTextBox\",\"validators\":{\"required\":true,\"min\":18,\"max\":120,\"minMessage\":\"É necessário ser maior de 18 anos.\"}},{\"name\":\"accountType\",\"label\":\"Tipo de Conta\",\"controlType\":\"select\",\"options\":[{\"label\":\"Pessoal\",\"value\":\"PERSONAL\"},{\"label\":\"Empresarial\",\"value\":\"BUSINESS\"}],\"defaultValue\":\"PERSONAL\"},{\"name\":\"cnpj\",\"label\":\"CNPJ\",\"controlType\":\"cpfCnpjInput\",\"maskType\":\"cnpj\",\"conditionalRequired\":{\"==\":[{\"var\":\"accountType\"},\"BUSINESS\"]},\"conditionalDisplay\":{\"==\":[{\"var\":\"accountType\"},\"BUSINESS\"]},\"_comment\":\"Campo condicional: só aparece e é obrigatório se accountType for 'BUSINESS'.\"},{\"name\":\"bio\",\"label\":\"Biografia\",\"controlType\":\"textarea\",\"validators\":{\"minWords\":10,\"maxLength\":500},\"hint\":\"Conte-nos um pouco sobre você (mínimo 10 palavras).\"},{\"name\":\"terms\",\"label\":\"Aceito os termos de uso\",\"controlType\":\"checkbox\",\"validators\":{\"requiredChecked\":true}}],\"sections\":[{\"id\":\"credentials\",\"title\":\"Credenciais\",\"rows\":[{\"id\":\"credentials-row-1\",\"columns\":[{\"id\":\"username-col\",\"fields\":[\"username\"]}]},{\"id\":\"credentials-row-2\",\"columns\":[{\"id\":\"email-col\",\"fields\":[\"email\",\"confirmEmail\"]}]},{\"id\":\"credentials-row-3\",\"columns\":[{\"id\":\"password-col\",\"fields\":[\"password\"]}]}]},{\"id\":\"profile\",\"title\":\"Perfil\",\"rows\":[{\"id\":\"profile-row-1\",\"columns\":[{\"id\":\"age-col\",\"fields\":[\"age\",\"accountType\"]}]},{\"id\":\"profile-row-2\",\"columns\":[{\"id\":\"cnpj-col\",\"fields\":[\"cnpj\"]}]},{\"id\":\"profile-row-3\",\"columns\":[{\"id\":\"bio-col\",\"fields\":[\"bio\"]}]}]},{\"id\":\"terms\",\"rows\":[{\"id\":\"terms-row-1\",\"columns\":[{\"id\":\"terms-col\",\"fields\":[\"terms\"]}]}]}],\"actions\":{\"submit\":{\"id\":\"submit\",\"label\":\"Cadastrar\",\"color\":\"primary\",\"visible\":true,\"type\":\"submit\"},\"cancel\":{\"id\":\"cancel\",\"label\":\"Cancelar\",\"color\":\"basic\",\"visible\":false,\"type\":\"button\"},\"reset\":{\"id\":\"reset\",\"label\":\"Limpar\",\"color\":\"basic\",\"visible\":false,\"type\":\"reset\"}}}",
8766
9366
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.validation.json",
8767
- "contentHash": "4ee17414b7a5f61bfc18e56edd24462c227db8bea7508d33de1aefd2fc09d78e",
9367
+ "contentHash": "6f5a9cf2a308048c422966315427cb716640913e7132b45ba64ac8b9bae1ae71",
8768
9368
  "sourceKind": "component_definition",
8769
9369
  "sourceId": "praxis-dynamic-form",
8770
9370
  "corpusVersion": "1.0.0"
8771
9371
  },
8772
9372
  {
8773
- "chunkIndex": 12,
9373
+ "chunkIndex": 72,
8774
9374
  "chunkKind": "recipe",
8775
- "content": "{\n \"_comment\": \"Official Praxis Dynamic Form recipe for derived visualBlock materializations.\",\n \"_comment2\": \"Use this when governed semantic decisions already need conditional UI guidance, compliance copy or operational warnings without creating fields or changing submit payload.\",\n \"templateMeta\": {\n \"variantId\": \"visual-block-domain-rules\",\n \"variantOf\": \"praxis-dynamic-form\",\n \"registryKey\": \"praxis-dynamic-form\",\n \"status\": \"public-example\",\n \"tags\": [\n \"visual-block\",\n \"form-rules\",\n \"domain-rules\",\n \"rich-content\",\n \"llm-authoring\"\n ],\n \"useWhen\": \"Materialize governed semantic decisions as Dynamic Form visual guidance while keeping visual blocks outside fieldMetadata, FormControl and payload.\",\n \"examplePrompts\": [\n \"materialize governed employee status supplier risk and support priority decisions as visual block guidance\",\n \"project conditional compliance guidance without changing submit payload\",\n \"show how LLMs should materialize visualBlock text title message projections with node ids\"\n ]\n },\n \"platformValue\": {\n \"canonicalOwner\": \"praxis-config-starter owns governed semantic decisions; @praxisui/dynamic-form owns derived formRules and FormColumn.items.\",\n \"visualBlockRuntime\": \"@praxisui/rich-content owns RichContentDocument rendering.\",\n \"safeRuleContract\": \"visualBlock rules may update visible, hidden, text, title, message, className, rootClassName, layout and style through RULE_PROPERTY_SCHEMA.\",\n \"payloadBoundary\": \"visualBlock is visual-only: never put visual blocks in fieldMetadata and never read them from formData.\",\n \"llmContract\": \"LLMs should author business rules through governed domain-rules/shared_rule_authoring. Use operationId rule.visualBlockGuidance.add or equivalent formRules only as a derived UI materialization; formRulesState is generated by Praxis internals after review.\"\n },\n \"authoringGuidance\": [\n \"Do not use visualBlockGuidance as the canonical business-rule authoring path.\",\n \"Prefer domain-rules/shared_rule_authoring for business-rule, policy, eligibility, validation, compliance or shared decisions.\",\n \"Use operationId rule.visualBlockGuidance.add only when a governed decision needs a derived Dynamic Form visual projection.\",\n \"Use targetType visualBlock and target the richContent item id from sections[].rows[].columns[].items[].id.\",\n \"Set type visualBlockGuidance, context notification and metadata.origin llm with metadata.reviewStatus pending.\",\n \"Use textNodeId, titleNodeId or messageNodeId when the target document has more than one editable textual node.\",\n \"Keep condition in canonical Json Logic.\",\n \"Do not write document, HTML, event handlers, arbitrary URLs or field-like metadata from a rule.\",\n \"Use the editor diagnostics and Corrigir action when a property is rejected or partially sanitized.\",\n \"Ask an LLM for semantic correction only when the desired replacement needs business meaning.\"\n ],\n \"teaches\": [\n \"formRules.visualBlock\",\n \"visualBlock.text\",\n \"visualBlock.title\",\n \"visualBlock.message\",\n \"visualBlock.textNodeId\",\n \"visualBlock.titleNodeId\",\n \"visualBlock.messageNodeId\",\n \"visualBlock.visual-only\",\n \"llm-generated-pending-review\"\n ],\n \"config\": {\n \"fieldMetadata\": [\n {\n \"name\": \"ativo\",\n \"label\": \"Ativo\",\n \"controlType\": \"checkbox\",\n \"source\": \"schema\"\n },\n {\n \"name\": \"cargoId\",\n \"label\": \"Cargo\",\n \"controlType\": \"select\",\n \"source\": \"schema\",\n \"options\": [\n {\n \"label\": \"Analista\",\n \"value\": \"analista\"\n },\n {\n \"label\": \"Gestor\",\n \"value\": \"gestor\"\n }\n ]\n },\n {\n \"name\": \"riscoFornecedor\",\n \"label\": \"Risco do fornecedor\",\n \"controlType\": \"select\",\n \"source\": \"schema\",\n \"options\": [\n {\n \"label\": \"Baixo\",\n \"value\": \"baixo\"\n },\n {\n \"label\": \"Alto\",\n \"value\": \"alto\"\n },\n {\n \"label\": \"Critico\",\n \"value\": \"critico\"\n }\n ]\n },\n {\n \"name\": \"prioridade\",\n \"label\": \"Prioridade\",\n \"controlType\": \"select\",\n \"source\": \"schema\",\n \"options\": [\n {\n \"label\": \"Normal\",\n \"value\": \"normal\"\n },\n {\n \"label\": \"Alta\",\n \"value\": \"alta\"\n }\n ]\n }\n ],\n \"sections\": [\n {\n \"id\": \"domain-guidance\",\n \"title\": \"Domain guidance examples\",\n \"rows\": [\n {\n \"id\": \"domain-guidance-row\",\n \"columns\": [\n {\n \"id\": \"domain-guidance-column\",\n \"items\": [\n {\n \"kind\": \"richContent\",\n \"id\": \"profile-status-card\",\n \"layout\": \"block\",\n \"document\": {\n \"kind\": \"praxis.rich-content\",\n \"version\": \"1.0.0\",\n \"nodes\": [\n {\n \"type\": \"card\",\n \"id\": \"profile-status-title\",\n \"title\": \"Employee active\",\n \"content\": [\n {\n \"type\": \"text\",\n \"id\": \"profile-status-message\",\n \"text\": \"Keep assignment, department and contact details current.\"\n }\n ]\n }\n ]\n }\n },\n {\n \"kind\": \"field\",\n \"id\": \"field-ativo\",\n \"fieldName\": \"ativo\"\n },\n {\n \"kind\": \"field\",\n \"id\": \"field-cargoId\",\n \"fieldName\": \"cargoId\"\n },\n {\n \"kind\": \"richContent\",\n \"id\": \"supplier-risk-notice\",\n \"layout\": \"block\",\n \"document\": {\n \"kind\": \"praxis.rich-content\",\n \"version\": \"1.0.0\",\n \"nodes\": [\n {\n \"type\": \"text\",\n \"id\": \"message\",\n \"text\": \"Supplier has no critical blocks for this order.\"\n }\n ]\n }\n },\n {\n \"kind\": \"field\",\n \"id\": \"field-riscoFornecedor\",\n \"fieldName\": \"riscoFornecedor\"\n },\n {\n \"kind\": \"richContent\",\n \"id\": \"ticket-sla-guidance\",\n \"layout\": \"block\",\n \"document\": {\n \"kind\": \"praxis.rich-content\",\n \"version\": \"1.0.0\",\n \"nodes\": [\n {\n \"type\": \"text\",\n \"id\": \"text\",\n \"text\": \"Register enough context for triage and follow-up.\"\n }\n ]\n }\n },\n {\n \"kind\": \"field\",\n \"id\": \"field-prioridade\",\n \"fieldName\": \"prioridade\"\n }\n ],\n \"fields\": [\n \"ativo\",\n \"cargoId\",\n \"riscoFornecedor\",\n \"prioridade\"\n ]\n }\n ]\n }\n ]\n }\n ],\n \"formRules\": [\n {\n \"id\": \"employee-inactive-guidance\",\n \"name\": \"Employee inactive guidance\",\n \"type\": \"visualBlockGuidance\",\n \"targetType\": \"visualBlock\",\n \"context\": \"notification\",\n \"targets\": [\n \"profile-status-card\"\n ],\n \"metadata\": {\n \"origin\": \"llm\",\n \"reviewStatus\": \"pending\"\n },\n \"effect\": {\n \"condition\": {\n \"===\": [\n {\n \"var\": \"ativo\"\n },\n false\n ]\n },\n \"properties\": {\n \"title\": \"Employee inactive\",\n \"titleNodeId\": \"profile-status-title\",\n \"message\": \"Review offboarding, access revocation and justification before saving.\",\n \"messageNodeId\": \"profile-status-message\",\n \"className\": \"employee-status-card employee-status-card--warning\"\n },\n \"propertiesWhenFalse\": {\n \"title\": \"Employee active\",\n \"titleNodeId\": \"profile-status-title\",\n \"message\": \"Keep assignment, department and contact details current.\",\n \"messageNodeId\": \"profile-status-message\",\n \"className\": \"employee-status-card employee-status-card--ok\"\n }\n }\n },\n {\n \"id\": \"supplier-risk-guidance\",\n \"name\": \"Supplier risk guidance\",\n \"type\": \"visualBlockGuidance\",\n \"targetType\": \"visualBlock\",\n \"context\": \"notification\",\n \"targets\": [\n \"supplier-risk-notice\"\n ],\n \"metadata\": {\n \"origin\": \"llm\",\n \"reviewStatus\": \"pending\"\n },\n \"effect\": {\n \"condition\": {\n \"in\": [\n {\n \"var\": \"riscoFornecedor\"\n },\n [\n \"alto\",\n \"critico\"\n ]\n ]\n },\n \"properties\": {\n \"message\": \"Supplier requires compliance approval before issuing the order.\",\n \"messageNodeId\": \"message\",\n \"className\": \"supplier-risk-notice supplier-risk-notice--critical\"\n },\n \"propertiesWhenFalse\": {\n \"message\": \"Supplier has no critical blocks for this order.\",\n \"messageNodeId\": \"message\",\n \"className\": \"supplier-risk-notice supplier-risk-notice--neutral\"\n }\n }\n },\n {\n \"id\": \"ticket-priority-copy\",\n \"name\": \"Ticket priority copy\",\n \"type\": \"visualBlockGuidance\",\n \"targetType\": \"visualBlock\",\n \"context\": \"notification\",\n \"targets\": [\n \"ticket-sla-guidance\"\n ],\n \"metadata\": {\n \"origin\": \"llm\",\n \"reviewStatus\": \"pending\"\n },\n \"effect\": {\n \"condition\": {\n \"===\": [\n {\n \"var\": \"prioridade\"\n },\n \"alta\"\n ]\n },\n \"properties\": {\n \"text\": \"High priority: confirm impact, SLA deadline and escalation owner.\",\n \"textNodeId\": \"text\",\n \"rootClassName\": \"ticket-sla-guidance ticket-sla-guidance--high\"\n },\n \"propertiesWhenFalse\": {\n \"text\": \"Register enough context for triage and follow-up.\",\n \"textNodeId\": \"text\",\n \"rootClassName\": \"ticket-sla-guidance ticket-sla-guidance--standard\"\n }\n }\n }\n ]\n },\n \"diagnosticExpectations\": {\n \"validTargets\": [\n \"profile-status-card\",\n \"supplier-risk-notice\",\n \"ticket-sla-guidance\"\n ],\n \"visualOnly\": true,\n \"formRulesStateAuthoredByRecipe\": false,\n \"reviewRequired\": [\n \"employee-inactive-guidance\",\n \"supplier-risk-guidance\",\n \"ticket-priority-copy\"\n ]\n }\n}\n",
9375
+ "content": "{\"_comment\":\"Official Praxis Dynamic Form recipe for derived visualBlock materializations.\",\"_comment2\":\"Use this when governed semantic decisions already need conditional UI guidance, compliance copy or operational warnings without creating fields or changing submit payload.\",\"templateMeta\":{\"variantId\":\"visual-block-domain-rules\",\"variantOf\":\"praxis-dynamic-form\",\"registryKey\":\"praxis-dynamic-form\",\"status\":\"public-example\",\"tags\":[\"visual-block\",\"form-rules\",\"domain-rules\",\"rich-content\",\"llm-authoring\"],\"useWhen\":\"Materialize governed semantic decisions as Dynamic Form visual guidance while keeping visual blocks outside fieldMetadata, FormControl and payload.\",\"examplePrompts\":[\"materialize governed employee status supplier risk and support priority decisions as visual block guidance\",\"project conditional compliance guidance without changing submit payload\",\"show how LLMs should materialize visualBlock text title message projections with node ids\"]},\"platformValue\":{\"canonicalOwner\":\"praxis-config-starter owns governed semantic decisions; @praxisui/dynamic-form owns derived formRules and FormColumn.items.\",\"visualBlockRuntime\":\"@praxisui/rich-content owns RichContentDocument rendering.\",\"safeRuleContract\":\"visualBlock rules may update visible, hidden, text, title, message, className, rootClassName, layout and style through RULE_PROPERTY_SCHEMA.\",\"payloadBoundary\":\"visualBlock is visual-only: never put visual blocks in fieldMetadata and never read them from formData.\",\"llmContract\":\"LLMs should author business rules through governed domain-rules/shared_rule_authoring. Use operationId rule.visualBlockGuidance.add or equivalent formRules only as a derived UI materialization; formRulesState is generated by Praxis internals after review.\"},\"authoringGuidance\":[\"Do not use visualBlockGuidance as the canonical business-rule authoring path.\",\"Prefer domain-rules/shared_rule_authoring for business-rule, policy, eligibility, validation, compliance or shared decisions.\",\"Use operationId rule.visualBlockGuidance.add only when a governed decision needs a derived Dynamic Form visual projection.\",\"Use targetType visualBlock and target the richContent item id from sections[].rows[].columns[].items[].id.\",\"Set type visualBlockGuidance, context notification and metadata.origin llm with metadata.reviewStatus pending.\",\"Use textNodeId, titleNodeId or messageNodeId when the target document has more than one editable textual node.\",\"Keep condition in canonical Json Logic.\",\"Do not write document, HTML, event handlers, arbitrary URLs or field-like metadata from a rule.\",\"Use the editor diagnostics and Corrigir action when a property is rejected or partially sanitized.\",\"Ask an LLM for semantic correction only when the desired replacement needs business meaning.\"],\"teaches\":[\"formRules.visualBlock\",\"visualBlock.text\",\"visualBlock.title\",\"visualBlock.message\",\"visualBlock.textNodeId\",\"visualBlock.titleNodeId\",\"visualBlock.messageNodeId\",\"visualBlock.visual-only\",\"llm-generated-pending-review\"],\"config\":{\"fieldMetadata\":[{\"name\":\"ativo\",\"label\":\"Ativo\",\"controlType\":\"checkbox\",\"source\":\"schema\"},{\"name\":\"cargoId\",\"label\":\"Cargo\",\"controlType\":\"select\",\"source\":\"schema\",\"options\":[{\"label\":\"Analista\",\"value\":\"analista\"},{\"label\":\"Gestor\",\"value\":\"gestor\"}]},{\"name\":\"riscoFornecedor\",\"label\":\"Risco do fornecedor\",\"controlType\":\"select\",\"source\":\"schema\",\"options\":[{\"label\":\"Baixo\",\"value\":\"baixo\"},{\"label\":\"Alto\",\"value\":\"alto\"},{\"label\":\"Critico\",\"value\":\"critico\"}]},{\"name\":\"prioridade\",\"label\":\"Prioridade\",\"controlType\":\"select\",\"source\":\"schema\",\"options\":[{\"label\":\"Normal\",\"value\":\"normal\"},{\"label\":\"Alta\",\"value\":\"alta\"}]}],\"sections\":[{\"id\":\"domain-guidance\",\"title\":\"Domain guidance examples\",\"rows\":[{\"id\":\"domain-guidance-row\",\"columns\":[{\"id\":\"domain-guidance-column\",\"items\":[{\"kind\":\"richContent\",\"id\":\"profile-status-card\",\"layout\":\"block\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"card\",\"id\":\"profile-status-title\",\"title\":\"Employee active\",\"content\":[{\"type\":\"text\",\"id\":\"profile-status-message\",\"text\":\"Keep assignment, department and contact details current.\"}]}]}},{\"kind\":\"field\",\"id\":\"field-ativo\",\"fieldName\":\"ativo\"},{\"kind\":\"field\",\"id\":\"field-cargoId\",\"fieldName\":\"cargoId\"},{\"kind\":\"richContent\",\"id\":\"supplier-risk-notice\",\"layout\":\"block\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"id\":\"message\",\"text\":\"Supplier has no critical blocks for this order.\"}]}},{\"kind\":\"field\",\"id\":\"field-riscoFornecedor\",\"fieldName\":\"riscoFornecedor\"},{\"kind\":\"richContent\",\"id\":\"ticket-sla-guidance\",\"layout\":\"block\",\"document\":{\"kind\":\"praxis.rich-content\",\"version\":\"1.0.0\",\"nodes\":[{\"type\":\"text\",\"id\":\"text\",\"text\":\"Register enough context for triage and follow-up.\"}]}},{\"kind\":\"field\",\"id\":\"field-prioridade\",\"fieldName\":\"prioridade\"}],\"fields\":[\"ativo\",\"cargoId\",\"riscoFornecedor\",\"prioridade\"]}]}]}],\"formRules\":[{\"id\":\"employee-inactive-guidance\",\"name\":\"Employee inactive guidance\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"context\":\"notification\",\"targets\":[\"profile-status-card\"],\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"},\"effect\":{\"condition\":{\"===\":[{\"var\":\"ativo\"},false]},\"properties\":{\"title\":\"Employee inactive\",\"titleNodeId\":\"profile-status-title\",\"message\":\"Review offboarding, access revocation and justification before saving.\",\"messageNodeId\":\"profile-status-message\",\"className\":\"employee-status-card employee-status-card--warning\"},\"propertiesWhenFalse\":{\"title\":\"Employee active\",\"titleNodeId\":\"profile-status-title\",\"message\":\"Keep assignment, department and contact details current.\",\"messageNodeId\":\"profile-status-message\",\"className\":\"employee-status-card employee-status-card--ok\"}}},{\"id\":\"supplier-risk-guidance\",\"name\":\"Supplier risk guidance\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"context\":\"notification\",\"targets\":[\"supplier-risk-notice\"],\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"},\"effect\":{\"condition\":{\"in\":[{\"var\":\"riscoFornecedor\"},[\"alto\",\"critico\"]]},\"properties\":{\"message\":\"Supplier requires compliance approval before issuing the order.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--critical\"},\"propertiesWhenFalse\":{\"message\":\"Supplier has no critical blocks for this order.\",\"messageNodeId\":\"message\",\"className\":\"supplier-risk-notice supplier-risk-notice--neutral\"}}},{\"id\":\"ticket-priority-copy\",\"name\":\"Ticket priority copy\",\"type\":\"visualBlockGuidance\",\"targetType\":\"visualBlock\",\"context\":\"notification\",\"targets\":[\"ticket-sla-guidance\"],\"metadata\":{\"origin\":\"llm\",\"reviewStatus\":\"pending\"},\"effect\":{\"condition\":{\"===\":[{\"var\":\"prioridade\"},\"alta\"]},\"properties\":{\"text\":\"High priority: confirm impact, SLA deadline and escalation owner.\",\"textNodeId\":\"text\",\"rootClassName\":\"ticket-sla-guidance ticket-sla-guidance--high\"},\"propertiesWhenFalse\":{\"text\":\"Register enough context for triage and follow-up.\",\"textNodeId\":\"text\",\"rootClassName\":\"ticket-sla-guidance ticket-sla-guidance--standard\"}}}]},\"diagnosticExpectations\":{\"validTargets\":[\"profile-status-card\",\"supplier-risk-notice\",\"ticket-sla-guidance\"],\"visualOnly\":true,\"formRulesStateAuthoredByRecipe\":false,\"reviewRequired\":[\"employee-inactive-guidance\",\"supplier-risk-guidance\",\"ticket-priority-copy\"]}}",
8776
9376
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-form.visual-block-domain-rules.json",
8777
- "contentHash": "64b51171e4fd0aec292a955514d59c4f3dd60fba899f814edea0bf43b5d61aed",
9377
+ "contentHash": "236378ef8651eeae6511a3cf6d7e4cc8cd50ad0e6322bc581778b16c630e8a26",
8778
9378
  "sourceKind": "component_definition",
8779
9379
  "sourceId": "praxis-dynamic-form",
8780
9380
  "corpusVersion": "1.0.0"
@@ -14572,19 +15172,159 @@
14572
15172
  {
14573
15173
  "chunkIndex": 1,
14574
15174
  "chunkKind": "capabilities",
14575
- "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: metadata\n Kind: object\n Description: Estado interno do builder visual de regras, gerado apenas para round-trip do editor.\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.prefix\n Category: appearance\n Kind: string\n Description: Prefixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n - Path: fieldMetadata[].presentation.suffix\n Category: appearance\n Kind: string\n Description: Sufixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\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.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n - Path: inputs.layoutPolicy.detailSummary.widthPrecedence\n Category: inputs\n Kind: enum\n Description: Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.\n - 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",
15175
+ "content": "Schema Capability:\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\nSchema Capability:\n - Path: metadata.source\n Category: metadata\n Kind: enum\n Description: Origem da configuração do formulário.\n\nSchema Capability:\n - Path: metadata.lastUpdated\n Category: metadata\n Kind: string\n Description: Timestamp da última atualização da configuração (ISO-8601).\n\nSchema Capability:\n - Path: metadata.schemaId\n Category: metadata\n Kind: string\n Description: ID do schema de origem para reconciliação no servidor.\n\nSchema Capability:\n - Path: metadata.schemaContext\n Category: metadata\n Kind: object\n Description: Contexto do schema usado para compor o formulário.\n\nSchema Capability:\n - Path: metadata.schemaContext.path\n Category: metadata\n Kind: string\n Description: Path do schema de origem.\n\nSchema Capability:\n - Path: metadata.schemaContext.operation\n Category: metadata\n Kind: string\n Description: Operação do schema (ex.: \"get\", \"post\").\n\nSchema Capability:\n - Path: metadata.schemaContext.schemaType\n Category: metadata\n Kind: enum\n Description: Tipo do schema (response/request).\n\nSchema Capability:\n - Path: metadata.schemaContext.internal\n Category: metadata\n Kind: boolean\n Description: Indica se o schema é interno.\n\nSchema Capability:\n - Path: metadata.schemaContext.tenant\n Category: metadata\n Kind: string\n Description: Tenant do schema (se aplicável).\n\nSchema Capability:\n - Path: metadata.schemaContext.locale\n Category: metadata\n Kind: string\n Description: Locale do schema (se aplicável).\n\nSchema Capability:\n - Path: metadata.serverHash\n Category: metadata\n Kind: string\n Description: Hash dos dados do servidor para detecção de mudanças.\n\nSchema Capability:\n - Path: metadata.customizations\n Category: metadata\n Kind: array\n Description: Log de customizações manuais aplicadas ao formulário.\n\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[]\n Category: fields\n Kind: object\n Description: Item de metadados do campo (FieldMetadata).\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: helpPresentation.inlineMaxLength\n Category: appearance\n Kind: number\n Description: Tamanho maximo para manter ajuda inline quando display=\"auto\".\n\nSchema Capability:\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\nSchema Capability:\n - Path: editorialContext\n Category: editorial\n Kind: object\n Description: Contexto editorial compartilhado entre os blocos hospedados antes/depois do formulario.\n\nSchema Capability:\n - Path: editorialContext.[token]\n Category: editorial\n Kind: string\n Description: Valor simples exposto no contexto editorial.\n\nSchema Capability:\n - Path: formBlocksBefore\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado antes do formulario.\n\nSchema Capability:\n - Path: formBlocksBefore.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content.\n\nSchema Capability:\n - Path: formBlocksBefore.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content editorial.\n\nSchema Capability:\n - Path: formBlocksBefore.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes do formulario.\n\nSchema Capability:\n - Path: formBlocksBefore.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes do formulario.\n\nSchema Capability:\n - Path: formBlocksBefore.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content hospedado antes do formulario.\n\nSchema Capability:\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\nSchema Capability:\n - Path: formBlocksBeforeActions.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content antes das ações.\n\nSchema Capability:\n - Path: formBlocksBeforeActions.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content antes das ações.\n\nSchema Capability:\n - Path: formBlocksBeforeActions.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes da área principal de ações.\n\nSchema Capability:\n - Path: formBlocksBeforeActions.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes da área principal de ações.\n\nSchema Capability:\n - Path: formBlocksBeforeActions.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content antes das ações.\n\nSchema Capability:\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\nSchema Capability:\n - Path: formBlocksAfter.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content de fechamento.\n\nSchema Capability:\n - Path: formBlocksAfter.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content de fechamento.\n\nSchema Capability:\n - Path: formBlocksAfter.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados depois do formulario.\n\nSchema Capability:\n - Path: formBlocksAfter.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado depois do formulario.\n\nSchema Capability:\n - Path: formBlocksAfter.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content de fechamento.\n\nSchema Capability:\n - Path: sections[].id\n Category: layout\n Kind: string\n Description: ID único da seção.\n\nSchema Capability:\n - Path: sections[].title\n Category: layout\n Kind: string\n Description: Título exibido para cada seção do formulário.\n\nSchema Capability:\n - Path: sections[].description\n Category: layout\n Kind: string\n Description: Descrição auxiliar exibida abaixo do título da seção.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].sectionHeader.mode\n Category: layout\n Kind: enum\n Description: Estratégia visual do header da seção.",
14576
15176
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
14577
- "contentHash": "c05a6371db5ac065bf75223cf06663456383933d63d8fe60f7d4588cffb5ac69",
15177
+ "contentHash": "057e50c9848029496159e1fb7db4433e6d9f441e64f6f711fdd3e10eacef19fa",
14578
15178
  "sourceKind": "component_definition",
14579
15179
  "sourceId": "praxis-filter-form",
14580
15180
  "corpusVersion": "1.0.0"
14581
15181
  },
14582
15182
  {
14583
15183
  "chunkIndex": 2,
15184
+ "chunkKind": "capabilities",
15185
+ "content": "Schema Capability:\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\nSchema Capability:\n - Path: sections[].sectionHeader.initialsSourceField\n Category: layout\n Kind: string\n Description: Campo textual usado para derivar iniciais do avatar.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].sectionHeader.initialsMaxLength\n Category: layout\n Kind: number\n Description: Máximo de letras exibidas no avatar textual.\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].collapsed\n Category: layout\n Kind: boolean\n Description: Estado inicial da seção (colapsada/expandida) quando `collapsible` é true.\n\nSchema Capability:\n - Path: sections[].gapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após a seção.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].appearance\n Category: appearance\n Kind: enum\n Description: Preset visual do container/cabeçalho da seção.\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].titleStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para o título da seção.\n\nSchema Capability:\n - Path: sections[].descriptionStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para a descrição da seção.\n\nSchema Capability:\n - Path: sections[].titleColor\n Category: appearance\n Kind: string\n Description: Cor do título da seção (CSS color ou token).\n\nSchema Capability:\n - Path: sections[].descriptionColor\n Category: appearance\n Kind: string\n Description: Cor da descrição da seção (CSS color ou token).\n\nSchema Capability:\n - Path: sections[].headerAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento horizontal do conteúdo do cabeçalho da seção.\n\nSchema Capability:\n - Path: sections[].headerTooltip\n Category: layout\n Kind: string\n Description: Texto de tooltip para o cabeçalho da seção.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da seção.\n\nSchema Capability:\n - Path: sections[].styles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da seção.\n\nSchema Capability:\n - Path: sections[].rows[].id\n Category: layout\n Kind: string\n Description: ID único da linha dentro de uma seção.\n\nSchema Capability:\n - Path: sections[].rows[].title\n Category: layout\n Kind: string\n Description: Título interno da linha (usado em editores e labels).\n\nSchema Capability:\n - Path: sections[].rows[].gap\n Category: layout\n Kind: number\n Description: Espaçamento horizontal (em px) entre colunas nesta linha.\n\nSchema Capability:\n - Path: sections[].rows[].rowGap\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após esta linha.\n\nSchema Capability:\n - Path: sections[].rows[].columns[].id\n Category: layout\n Kind: string\n Description: ID único da coluna dentro de uma linha.\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].testId\n Category: layout\n Kind: string\n Description: Atributo data-testid aplicado ao container da coluna.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].items[].kind\n Category: layout\n Kind: enum\n Description: Tipo do item de layout da coluna.\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].items[].fieldName\n Category: layout\n Kind: string\n Description: Nome do campo quando kind é \"field\".",
15186
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15187
+ "contentHash": "7bd1ce34bf36df588bb3fae515d854a24b59a8fd48a9d58b2f8ecaae51ea105b",
15188
+ "sourceKind": "component_definition",
15189
+ "sourceId": "praxis-filter-form",
15190
+ "corpusVersion": "1.0.0"
15191
+ },
15192
+ {
15193
+ "chunkIndex": 3,
15194
+ "chunkKind": "capabilities",
15195
+ "content": "Schema Capability:\n - Path: sections[].rows[].columns[].items[].document\n Category: editorial\n Kind: object\n Description: RichContentDocument do bloco visual quando kind é \"richContent\".\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].items[].rootClassName\n Category: appearance\n Kind: string\n Description: Classe CSS opcional aplicada ao bloco visual richContent.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].order.sm\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas pequenas (sm).\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].order.lg\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas grandes (lg).\n\nSchema Capability:\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\nSchema Capability:\n - Path: sections[].rows[].columns[].hidden.xs\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra pequenas (xs).\n\nSchema Capability:\n - Path: sections[].rows[].columns[].hidden.sm\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas pequenas (sm).\n\nSchema Capability:\n - Path: sections[].rows[].columns[].hidden.md\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas médias (md).\n\nSchema Capability:\n - Path: sections[].rows[].columns[].hidden.lg\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas grandes (lg).\n\nSchema Capability:\n - Path: sections[].rows[].columns[].hidden.xl\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra grandes (xl).\n\nSchema Capability:\n - Path: sections[].rows[].columns[].align\n Category: layout\n Kind: enum\n Description: Alinhamento vertical do conteúdo da coluna.\n\nSchema Capability:\n - Path: sections[].rows[].columns[].padding\n Category: layout\n Kind: number\n Description: Padding (em px) interno da coluna.\n\nSchema Capability:\n - Path: sections[].rows[].columns[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada à coluna.\n\nSchema Capability:\n - Path: actions.submit.id\n Category: actions\n Kind: string\n Description: ID do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.icon\n Category: actions\n Kind: string\n Description: Ícone (Material Icons) para o botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.color\n Category: actions\n Kind: enum\n Description: Cor do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n\nSchema Capability:\n - Path: actions.submit.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de submissão.\n\nSchema Capability:\n - Path: actions.submit.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de submissão.\n\nSchema Capability:\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\nSchema Capability:\n - Path: actions.cancel.id\n Category: actions\n Kind: string\n Description: ID do botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.icon\n Category: actions\n Kind: string\n Description: Ícone (Material Icons) para o botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.color\n Category: actions\n Kind: enum\n Description: Cor do botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de cancelar.",
15196
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15197
+ "contentHash": "f34d296ee57e962539a19f213748c29fb83ce6cfa25db7beb9506f80822ca00e",
15198
+ "sourceKind": "component_definition",
15199
+ "sourceId": "praxis-filter-form",
15200
+ "corpusVersion": "1.0.0"
15201
+ },
15202
+ {
15203
+ "chunkIndex": 4,
15204
+ "chunkKind": "capabilities",
15205
+ "content": "Schema Capability:\n - Path: actions.cancel.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n\nSchema Capability:\n - Path: actions.cancel.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de cancelar.\n\nSchema Capability:\n - Path: actions.cancel.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de cancelar.\n\nSchema Capability:\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\nSchema Capability:\n - Path: actions.reset.id\n Category: actions\n Kind: string\n Description: ID do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.icon\n Category: actions\n Kind: string\n Description: Ícone (Material Icons) para o botão de reset.\n\nSchema Capability:\n - Path: actions.reset.color\n Category: actions\n Kind: enum\n Description: Cor do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de reset.\n\nSchema Capability:\n - Path: actions.reset.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de reset.\n\nSchema Capability:\n - Path: actions.reset.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de reset.\n\nSchema Capability:\n - Path: actions.reset.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de reset.\n\nSchema Capability:\n - Path: actions.reset.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n\nSchema Capability:\n - Path: actions.reset.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de reset.\n\nSchema Capability:\n - Path: actions.reset.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de reset.\n\nSchema Capability:\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\nSchema Capability:\n - Path: actions.custom\n Category: actions\n Kind: array\n Description: Lista de botões de ação customizados.\n\nSchema Capability:\n - Path: actions.custom[]\n Category: actions\n Kind: object\n Description: Configuração de um botão de ação customizado.\n\nSchema Capability:\n - Path: actions.custom[].id\n Category: actions\n Kind: string\n Description: ID da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].visible\n Category: actions\n Kind: boolean\n Description: Visibilidade da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].label\n Category: actions\n Kind: string\n Description: Rótulo da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].icon\n Category: actions\n Kind: string\n Description: Ícone (Material Icons) para a ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].color\n Category: actions\n Kind: enum\n Description: Cor da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].variant\n Category: actions\n Kind: enum\n Description: Variante visual da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].size\n Category: actions\n Kind: enum\n Description: Tamanho da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada à ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados à ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].disabled\n Category: actions\n Kind: boolean\n Description: Desabilita a ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].type\n Category: actions\n Kind: enum\n Description: Tipo do botão da ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n\nSchema Capability:\n - Path: actions.custom[].tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido na ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento na ação customizada.\n\nSchema Capability:\n - Path: actions.custom[].shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado para a ação customizada.\n\nSchema Capability:\n - Path: actions.position\n Category: layout\n Kind: enum\n Description: Posicionamento horizontal da barra de ações.\n\nSchema Capability:\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\nSchema Capability:\n - Path: actions.spacing\n Category: layout\n Kind: enum\n Description: Espaçamento entre os botões na barra de ações.\n\nSchema Capability:\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\nSchema Capability:\n - Path: actions.divider\n Category: layout\n Kind: boolean\n Description: Exibe um divisor superior acima da barra de ações.\n\nSchema Capability:\n - Path: actions.placement\n Category: layout\n Kind: enum\n Description: Localização estrutural da barra de ações no layout.\n\nSchema Capability:\n - Path: actions.mobile.position\n Category: layout\n Kind: enum\n Description: Posicionamento da barra de ações em dispositivos móveis.\n\nSchema Capability:\n - Path: actions.mobile.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões em dispositivos móveis.\n\nSchema Capability:\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\nSchema Capability:\n - Path: actions.containerClassName\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da barra de ações.\n\nSchema Capability:\n - Path: actions.containerStyles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da barra de ações.",
15206
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15207
+ "contentHash": "9cfad48adaa90e88eb8231e6c56ea92199382bde6a062c94b11cc802f209516a",
15208
+ "sourceKind": "component_definition",
15209
+ "sourceId": "praxis-filter-form",
15210
+ "corpusVersion": "1.0.0"
15211
+ },
15212
+ {
15213
+ "chunkIndex": 5,
15214
+ "chunkKind": "capabilities",
15215
+ "content": "Schema Capability:\n - Path: actions.showSaveButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de submit.\n\nSchema Capability:\n - Path: actions.submitButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de submit.\n\nSchema Capability:\n - Path: actions.showCancelButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de cancel.\n\nSchema Capability:\n - Path: actions.cancelButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de cancel.\n\nSchema Capability:\n - Path: actions.showResetButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de reset.\n\nSchema Capability:\n - Path: actions.resetButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de reset.\n\nSchema Capability:\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\nSchema Capability:\n - Path: behavior.trackHistory\n Category: behavior\n Kind: boolean\n Description: Habilita rastreamento de histórico para desfazer/refazer (se suportado).\n\nSchema Capability:\n - Path: behavior.focusFirstError\n Category: behavior\n Kind: boolean\n Description: Ao submeter, foca automaticamente no primeiro campo com erro.\n\nSchema Capability:\n - Path: behavior.scrollToErrors\n Category: behavior\n Kind: boolean\n Description: Ao submeter, rola a página para exibir o primeiro erro.\n\nSchema Capability:\n - Path: behavior.clearAfterSave\n Category: behavior\n Kind: boolean\n Description: Limpa o formulário após uma submissão bem-sucedida.\n\nSchema Capability:\n - Path: behavior.redirectAfterSave\n Category: behavior\n Kind: string\n Description: URL para redirecionar após uma submissão bem-sucedida.\n\nSchema Capability:\n - Path: behavior.reactiveValidation\n Category: validation\n Kind: boolean\n Description: Ativa validação reativa (em tempo real) em `valueChanges`.\n\nSchema Capability:\n - Path: behavior.reactiveValidationDebounceMs\n Category: validation\n Kind: number\n Description: Debounce (em ms) para a validação reativa.\n\nSchema Capability:\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\nSchema Capability:\n - Path: api.loadEndpoint\n Category: api\n Kind: string\n Description: URL para buscar dados para popular o formulário (GET).\n\nSchema Capability:\n - Path: api.saveMethod\n Category: api\n Kind: enum\n Description: Método HTTP para a requisição de salvar.\n\nSchema Capability:\n - Path: api.timeout\n Category: api\n Kind: number\n Description: Tempo limite (em ms) para as requisições API.\n\nSchema Capability:\n - Path: api.headers\n Category: api\n Kind: object\n Description: Cabeçalhos HTTP personalizados para as requisições API.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: messages.updateRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após atualização de registro.\n\nSchema Capability:\n - Path: messages.createRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após criação de registro.\n\nSchema Capability:\n - Path: messages.updateRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após atualização de registro.\n\nSchema Capability:\n - Path: messages.createRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após criação de registro.\n\nSchema Capability:\n - Path: messages.confirmations.submit\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de submeter o formulário.\n\nSchema Capability:\n - Path: messages.confirmations.cancel\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de cancelar.\n\nSchema Capability:\n - Path: messages.confirmations.reset\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de resetar o formulário.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: messages.customActions.[actionId].success\n Category: messages\n Kind: string\n Description: Mensagem de sucesso para a ação customizada.\n\nSchema Capability:\n - Path: messages.customActions.[actionId].error\n Category: messages\n Kind: string\n Description: Mensagem de erro para a ação customizada.\n\nSchema Capability:\n - Path: messages.customActions.[actionId].confirmation\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para a ação customizada.\n\nSchema Capability:\n - Path: messages.loading.submit\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o envio do formulário.\n\nSchema Capability:\n - Path: messages.loading.cancel\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o cancelamento.\n\nSchema Capability:\n - Path: messages.loading.reset\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o reset do formulário.\n\nSchema Capability:\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\nSchema Capability:\n - Path: formRules[].id\n Category: rules\n Kind: string\n Description: ID único da regra de layout.\n\nSchema Capability:\n - Path: formRules[].name\n Category: rules\n Kind: string\n Description: Nome amigável da regra de layout.\n\nSchema Capability:\n - Path: formRules[].description\n Category: rules\n Kind: string\n Description: Descrição da regra de layout para documentação.\n\nSchema Capability:\n - Path: formRules[].metadata.origin\n Category: rules\n Kind: enum\n Description: Origem da regra sugerida pela IA.\n\nSchema Capability:\n - Path: formRules[].metadata.reviewStatus\n Category: rules\n Kind: enum\n Description: Status de revisão humana da regra sugerida pela IA.\n\nSchema Capability:\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\nSchema Capability:\n - Path: formRules[].context\n Category: rules\n Kind: enum\n Description: Contexto legado da regra (quando properties não forem informadas).\n\nSchema Capability:\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`.",
15216
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15217
+ "contentHash": "b9d96b46a7eec674ad9cd481a6765bab68a58d01ecaf6114efa20d70502d0104",
15218
+ "sourceKind": "component_definition",
15219
+ "sourceId": "praxis-filter-form",
15220
+ "corpusVersion": "1.0.0"
15221
+ },
15222
+ {
15223
+ "chunkIndex": 6,
15224
+ "chunkKind": "capabilities",
15225
+ "content": "Schema Capability:\n - Path: formRules[].targets[]\n Category: rules\n Kind: string\n Description: ID do alvo da regra.\n\nSchema Capability:\n - Path: formRules[].targetFields\n Category: rules\n Kind: array\n Description: Alias legado para alvos de campo.\n\nSchema Capability:\n - Path: formRules[].targetFields[]\n Category: rules\n Kind: string\n Description: ID do campo alvo (alias legado).\n\nSchema Capability:\n - Path: formRules[].effect.condition\n Category: rules\n Kind: expression\n Description: Condicao canonica da regra, expressa em Json Logic.\n\nSchema Capability:\n - Path: formCommandRules\n Category: rules\n Kind: array\n Description: Regras condicionais de comando avaliadas depois que formRules estabilizam valores calculados.\n\nSchema Capability:\n - Path: formCommandRules[].condition\n Category: rules\n Kind: expression\n Description: Condicao Json Logic avaliada sobre formData estabilizado, incluindo field values calculados.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: formCommandRules[].policy\n Category: rules\n Kind: object\n Description: Politica operacional do comando: trigger, distinct, distinctBy, debounceMs, errorPolicy e runOnInitialEvaluation.\n\nSchema Capability:\n - Path: formRulesState\n Category: metadata\n Kind: object\n Description: Estado interno do builder visual de regras, gerado apenas para round-trip do editor.\n\nSchema Capability:\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\nSchema Capability:\n - Path: hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeInit.\n\nSchema Capability:\n - Path: hooks.beforeInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.beforeInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.beforeInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.beforeInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterInit.\n\nSchema Capability:\n - Path: hooks.afterInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.afterInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.afterInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.afterInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeValidate.\n\nSchema Capability:\n - Path: hooks.beforeValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.beforeValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.beforeValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.beforeValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterValidate.\n\nSchema Capability:\n - Path: hooks.afterValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.afterValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.afterValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.afterValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeSubmit.\n\nSchema Capability:\n - Path: hooks.beforeSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.beforeSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.beforeSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.beforeSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterSubmit.\n\nSchema Capability:\n - Path: hooks.afterSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.afterSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.afterSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.afterSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hooks.onError[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para onError.\n\nSchema Capability:\n - Path: hooks.onError[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n\nSchema Capability:\n - Path: hooks.onError[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n\nSchema Capability:\n - Path: hooks.onError[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n\nSchema Capability:\n - Path: hooks.onError[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n\nSchema Capability:\n - Path: hints.dataModes.create\n Category: form_config\n Kind: string\n Description: Dica para o modo de criação de dados.\n\nSchema Capability:\n - Path: hints.dataModes.edit\n Category: form_config\n Kind: string\n Description: Dica para o modo de edição de dados.\n\nSchema Capability:\n - Path: hints.dataModes.view\n Category: form_config\n Kind: string\n Description: Dica para o modo de visualização de dados.\n\nSchema Capability:\n - Path: hints.uiModes.presentation\n Category: form_config\n Kind: string\n Description: Dica para o modo de apresentação da UI.",
15226
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15227
+ "contentHash": "0d30c9ed381b5a69050e4922828ae287af246f0a927e7925cf1b0aa68e33fbb5",
15228
+ "sourceKind": "component_definition",
15229
+ "sourceId": "praxis-filter-form",
15230
+ "corpusVersion": "1.0.0"
15231
+ },
15232
+ {
15233
+ "chunkIndex": 7,
15234
+ "chunkKind": "capabilities",
15235
+ "content": "Schema Capability:\n - Path: hints.uiModes.readonly\n Category: form_config\n Kind: string\n Description: Dica para o modo de somente leitura da UI.\n\nSchema Capability:\n - Path: hints.uiModes.disabled\n Category: form_config\n Kind: string\n Description: Dica para o modo desabilitado da UI.\n\nSchema Capability:\n - Path: hints.uiModes.visible\n Category: form_config\n Kind: string\n Description: Dica para o modo de visibilidade da UI.\n\nSchema Capability:\n - Path: fieldMetadata[].id\n Category: identity\n Kind: string\n Description: Identificador unico da instancia do componente.\n\nSchema Capability:\n - Path: fieldMetadata[].version\n Category: identity\n Kind: string\n Description: Versao do schema de metadata (migracao).\n\nSchema Capability:\n - Path: fieldMetadata[].context\n Category: identity\n Kind: enum\n Description: Contexto de uso do componente (form/filter/table/dialog/standalone).\n\nSchema Capability:\n - Path: fieldMetadata[].createdAt\n Category: misc\n Kind: string\n Description: Timestamp de criacao (ISO).\n\nSchema Capability:\n - Path: fieldMetadata[].updatedAt\n Category: misc\n Kind: string\n Description: Timestamp de atualizacao (ISO).\n\nSchema Capability:\n - Path: fieldMetadata[].tags\n Category: identity\n Kind: array\n Description: Tags para categorizacao e busca.\n\nSchema Capability:\n - Path: fieldMetadata[].cssClass\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao host do componente.\n\nSchema Capability:\n - Path: fieldMetadata[].style\n Category: appearance\n Kind: object\n Description: Estilos inline (objeto CSS).\n\nSchema Capability:\n - Path: fieldMetadata[].dataAttributes\n Category: data\n Kind: object\n Description: Data attributes para teste/analytics.\n\nSchema Capability:\n - Path: fieldMetadata[].name\n Category: identity\n Kind: string\n Description: Identificador único do campo. Essencial para binding.\n\nSchema Capability:\n - Path: fieldMetadata[].label\n Category: identity\n Kind: string\n Description: Rótulo principal exibido para o usuário.\n\nSchema Capability:\n - Path: fieldMetadata[].placeholder\n Category: identity\n Kind: string\n Description: Texto temporário exibido quando vazio.\n\nSchema Capability:\n - Path: fieldMetadata[].hint\n Category: identity\n Kind: string\n Description: Texto de ajuda exibido abaixo do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].helpText\n Category: identity\n Kind: string\n Description: Texto semântico de ajuda publicado pelo schema/DTO.\n\nSchema Capability:\n - Path: fieldMetadata[].tooltip\n Category: identity\n Kind: string\n Description: Texto exibido ao passar o mouse.\n\nSchema Capability:\n - Path: fieldMetadata[].tooltipOnHover\n Category: identity\n Kind: boolean\n Description: Habilita apresentação do tooltip no hover quando suportado pelo renderer.\n\nSchema Capability:\n - Path: fieldMetadata[].description\n Category: identity\n Kind: string\n Description: Descrição detalhada (usada em documentação ou helps extensos).\n\nSchema Capability:\n - Path: fieldMetadata[].selectionMode\n Category: behavior\n Kind: enum\n Description: Semântica de seleção explícita para controles de escolha.\n\nSchema Capability:\n - Path: fieldMetadata[].variant\n Category: appearance\n Kind: string\n Description: Variante visual/semântica do controle.\n\nSchema Capability:\n - Path: fieldMetadata[].density\n Category: appearance\n Kind: enum\n Description: Densidade visual do shell do controle.\n\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].group\n Category: identity\n Kind: string\n Description: Agrupador lógico do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].order\n Category: layout\n Kind: number\n Description: Ordem de exibição do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].width\n Category: layout\n Kind: string\n Description: Largura do campo (ex: 50%, 100px).\n\nSchema Capability:\n - Path: fieldMetadata[].isFlex\n Category: layout\n Kind: boolean\n Description: Se true, usa flex-grow para preencher espaço.\n\nSchema Capability:\n - Path: fieldMetadata[].controlType\n Category: behavior\n Kind: enum\n Description: Tipo do componente de UI (input, select, datepicker, etc).\n\nSchema Capability:\n - Path: fieldMetadata[].dataType\n Category: data\n Kind: enum\n Description: Tipo de dado do campo (text, number, date, etc).\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.appearance\n Category: appearance\n Kind: enum\n Description: Aparência do campo Material (fill/outline).\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.color\n Category: appearance\n Kind: enum\n Description: Tema de cor Material (primary/accent/warn).\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.floatLabel\n Category: appearance\n Kind: enum\n Description: Comportamento do rótulo flutuante.\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.subscriptSizing\n Category: appearance\n Kind: enum\n Description: Estratégia de sizing do subscript (erros/hints).\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.hideRequiredMarker\n Category: appearance\n Kind: boolean\n Description: Oculta o asterisco de campo obrigatório.\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.density\n Category: appearance\n Kind: enum\n Description: Densidade do campo Material.\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.disableRipple\n Category: appearance\n Kind: boolean\n Description: Desativa ripple/ondulação em componentes Material.\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.customPalette\n Category: appearance\n Kind: object\n Description: Override de paleta (primary/accent/warn).\n\nSchema Capability:\n - Path: fieldMetadata[].materialDesign.animations\n Category: appearance\n Kind: object\n Description: Configuração de animações (disable, duration, easing).\n\nSchema Capability:\n - Path: fieldMetadata[].prefixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido antes do valor.\n\nSchema Capability:\n - Path: fieldMetadata[].suffixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido depois do valor.\n\nSchema Capability:\n - Path: fieldMetadata[].iconPosition\n Category: appearance\n Kind: enum\n Description: Posição preferencial do ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].iconSize\n Category: appearance\n Kind: enum\n Description: Tamanho do ícone.\n\nSchema Capability:\n - Path: fieldMetadata[].iconColor\n Category: appearance\n Kind: string\n Description: Cor semântica ou token de cor aplicado ao ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].iconClass\n Category: appearance\n Kind: string\n Description: Classe CSS controlada pelo host para o ícone principal.\n\nSchema Capability:\n - Path: fieldMetadata[].iconStyle\n Category: appearance\n Kind: string\n Description: Estilo visual semântico do ícone quando o renderer suportar variações.",
15236
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15237
+ "contentHash": "fd4b705c0e4b7d01233e4fe51a75532848dd9e3fd9ca5812f8faada5ee9f1fe0",
15238
+ "sourceKind": "component_definition",
15239
+ "sourceId": "praxis-filter-form",
15240
+ "corpusVersion": "1.0.0"
15241
+ },
15242
+ {
15243
+ "chunkIndex": 8,
15244
+ "chunkKind": "capabilities",
15245
+ "content": "Schema Capability:\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].presentation.prefix\n Category: appearance\n Kind: string\n Description: Prefixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.suffix\n Category: appearance\n Kind: string\n Description: Sufixo visual readonly aplicado ao valor apresentado, sem alterar payload, filtros, ordenacao ou exportacao.\n\nSchema Capability:\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n\nSchema Capability:\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n\nSchema Capability:\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n\nSchema Capability:\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.",
15246
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15247
+ "contentHash": "680baee6a38106f22c4710309b6d65ef7e59d1ee08bb65cca97f004070a99d0c",
15248
+ "sourceKind": "component_definition",
15249
+ "sourceId": "praxis-filter-form",
15250
+ "corpusVersion": "1.0.0"
15251
+ },
15252
+ {
15253
+ "chunkIndex": 9,
15254
+ "chunkKind": "capabilities",
15255
+ "content": "Schema Capability:\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n\nSchema Capability:\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n\nSchema Capability:\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n\nSchema Capability:\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n\nSchema Capability:\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n\nSchema Capability:\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n\nSchema Capability:\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n\nSchema Capability:\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n\nSchema Capability:\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n\nSchema Capability:\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n\nSchema Capability:\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n\nSchema Capability:\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\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\nSchema Capability:\n - Path: fieldMetadata[].fieldAccess.reason\n Category: misc\n Kind: string\n Description: Justificativa explicativa/auditavel da politica de acesso do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n\nSchema Capability:\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n\nSchema Capability:\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n\nSchema Capability:\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.",
15256
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15257
+ "contentHash": "02f3921c10fb0dd88775888b7143c2cad0a14ccd228d35ea95cdb587a28b3c3f",
15258
+ "sourceKind": "component_definition",
15259
+ "sourceId": "praxis-filter-form",
15260
+ "corpusVersion": "1.0.0"
15261
+ },
15262
+ {
15263
+ "chunkIndex": 10,
15264
+ "chunkKind": "capabilities",
15265
+ "content": "Schema Capability:\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n\nSchema Capability:\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n\nSchema Capability:\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n\nSchema Capability:\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n\nSchema Capability:\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n\nSchema Capability:\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n\nSchema Capability:\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n\nSchema Capability:\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n\nSchema Capability:\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n\nSchema Capability:\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n\nSchema Capability:\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n\nComponent Capability:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n\nComponent Capability:\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n\nComponent Capability:\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n\nComponent Capability:\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n\nComponent Capability:\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n\nComponent Capability:\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\n\nComponent Capability:\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n\nComponent Capability:\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n\nComponent Capability:\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n\nComponent Capability:\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n\nComponent Capability:\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n\nComponent Capability:\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n\nComponent Capability:\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n\nComponent Capability:\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n\nComponent Capability:\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n\nComponent Capability:\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n\nComponent Capability:\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n\nComponent Capability:\n - Path: inputs.generatedLayoutPreset\n Category: inputs\n Kind: enum\n Description: Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.\n\nComponent Capability:\n - Path: inputs.layoutPolicy\n Category: inputs\n Kind: object\n Description: Politica opt-in para materializar layout diretamente do schema atual sem depender de FormConfig.sections authoradas.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.source\n Category: inputs\n Kind: enum\n Description: Define se o layout vem de configuracao authorada ou do schema.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.preset\n Category: inputs\n Kind: enum\n Description: Preset de layout schema-driven. compactPresentation cobre detalhe read-only; groupedCommand cobre create/edit.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.intent\n Category: inputs\n Kind: enum\n Description: Intencao da surface: detalhe/apresentacao ou comando/editavel.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.lifecycle\n Category: inputs\n Kind: enum\n Description: Ciclo de materializacao do layout schema-driven.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.persistence\n Category: inputs\n Kind: enum\n Description: Define se sections geradas sao transient ou podem virar layout authorado apos detach explicito.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary\n Category: inputs\n Kind: object\n Description: Politica declarativa para resumo read-only compacto em compactPresentation, sem FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeFields\n Category: inputs\n Kind: array\n Description: Lista de campos canônicos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeGroups\n Category: inputs\n Kind: array\n Description: Lista de grupos do schema que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.includeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem entrar no resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.excludeRoles\n Category: inputs\n Kind: array\n Description: Lista de papeis semanticos de campo que devem ficar fora do resumo read-only compacto.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.maxFields\n Category: inputs\n Kind: number\n Description: Limite maximo de campos materializados no primeiro painel compacto.",
15266
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15267
+ "contentHash": "418dd77e4d37bcf80ba1fe9c405b691cfc53416dc9364ce400449da2b4749731",
15268
+ "sourceKind": "component_definition",
15269
+ "sourceId": "praxis-filter-form",
15270
+ "corpusVersion": "1.0.0"
15271
+ },
15272
+ {
15273
+ "chunkIndex": 11,
15274
+ "chunkKind": "capabilities",
15275
+ "content": "Component Capability:\n - Path: inputs.layoutPolicy.detailSummary.fieldPriority\n Category: inputs\n Kind: object\n Description: Mapa campo -> prioridade para ordenar campos do resumo quando o schema publica candidatos suficientes.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.groupPriority\n Category: inputs\n Kind: object\n Description: Mapa grupo -> prioridade para ordenar grupos do resumo quando o schema publica agrupamento semantico.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.columns\n Category: inputs\n Kind: number\n Description: Quantidade base de colunas para distribuir campos de resumo schema-driven sem criar FormConfig.sections locais.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.responsiveColumns\n Category: inputs\n Kind: object\n Description: Mapa de colunas por breakpoint xs/sm/md/lg/xl para detalhes read-only compactos em drawers, side sheets e desktop largo.\n\nComponent Capability:\n - Path: inputs.layoutPolicy.detailSummary.widthPrecedence\n Category: inputs\n Kind: enum\n Description: Define se larguras explicitas do schema ou a densidade do resumo controlam os spans no compactPresentation read-only.\n\nComponent Capability:\n - Path: inputs.fieldIconPolicy\n Category: inputs\n Kind: enum\n Description: Controla se icones prefix/suffix dos metadados aparecem em todos os modos, apenas apresentacao, ou nunca.\n\nComponent Capability:\n - Path: inputs.backConfig\n Category: inputs\n Kind: object\n Description: Configuracao de navegacao/retorno (BackConfig).\n\nComponent Capability:\n - Path: inputs.backConfig.strategy\n Category: inputs\n Kind: enum\n Description: Estrategia de retorno (auto/close/navigate).\n\nComponent Capability:\n - Path: inputs.backConfig.returnTo\n Category: inputs\n Kind: string\n Description: Rota para retornar quando strategy=navigate.\n\nComponent Capability:\n - Path: inputs.backConfig.confirmOnDirty\n Category: inputs\n Kind: boolean\n Description: Solicita confirmacao ao sair com mudancas nao salvas.\n\nComponent Capability:\n - Path: inputs.hooks\n Category: inputs\n Kind: object\n Description: Declaracoes de hooks fornecidas diretamente ao componente.\n\nComponent Capability:\n - Path: inputs.hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a inicializacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes da validacao.\n\nComponent Capability:\n - Path: inputs.hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos a validacao.\n\nComponent Capability:\n - Path: inputs.hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados antes do submit.\n\nComponent Capability:\n - Path: inputs.hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks executados apos o submit.\n\nComponent Capability:\n - Path: inputs.hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks executados em erros de submit/validacao.\n\nComponent Capability:\n - Path: inputs.removeEmptyContainersOnSave\n Category: inputs\n Kind: boolean\n Description: Remove containers vazios ao salvar configuracao.\n\nComponent Capability:\n - Path: inputs.reactiveValidation\n Category: inputs\n Kind: boolean\n Description: Ativa validacao reativa (afterValidate em valueChanges).\n\nComponent Capability:\n - Path: inputs.reactiveValidationDebounceMs\n Category: inputs\n Kind: number\n Description: Debounce em ms para validacao reativa.\n\nComponent Capability:\n - Path: inputs.notifyIfOutdated\n Category: inputs\n Kind: enum\n Description: Canal de notificacao para schema desatualizado.\n\nComponent Capability:\n - Path: inputs.snoozeMs\n Category: inputs\n Kind: number\n Description: Duracao do snooze para alertas de schema.\n\nComponent Capability:\n - Path: inputs.autoOpenSettingsOnOutdated\n Category: inputs\n Kind: boolean\n Description: Abre automaticamente o editor ao detectar schema desatualizado.\n\nComponent Capability:\n - Path: inputs.readonlyModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo somente leitura global.\n\nComponent Capability:\n - Path: inputs.disabledModeGlobal\n Category: inputs\n Kind: boolean\n Description: Forca modo desabilitado global.\n\nComponent Capability:\n - Path: inputs.presentationModeGlobal\n Category: inputs\n Kind: boolean\n Description: Ativa modo de apresentacao global (somente view).\n\nComponent Capability:\n - Path: inputs.visibleGlobal\n Category: inputs\n Kind: boolean\n Description: Forca visibilidade global dos campos.\n\nComponent Capability:\n - Path: inputs.customEndpoints\n Category: inputs\n Kind: object\n Description: Override de endpoints CRUD (EndpointConfig).\n\nComponent Capability:\n - Path: inputs.customEndpoints.getAll\n Category: inputs\n Kind: string\n Description: Endpoint customizado para listar registros.\n\nComponent Capability:\n - Path: inputs.customEndpoints.getById\n Category: inputs\n Kind: string\n Description: Endpoint customizado para obter registro por ID.\n\nComponent Capability:\n - Path: inputs.customEndpoints.create\n Category: inputs\n Kind: string\n Description: Endpoint customizado para criar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.update\n Category: inputs\n Kind: string\n Description: Endpoint customizado para atualizar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.delete\n Category: inputs\n Kind: string\n Description: Endpoint customizado para deletar registro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.filter\n Category: inputs\n Kind: string\n Description: Endpoint customizado para filtro.\n\nComponent Capability:\n - Path: inputs.customEndpoints.schema\n Category: inputs\n Kind: string\n Description: Endpoint customizado para schemas.\n\nComponent Capability:\n - Path: inputs.config.presentation\n Category: appearance\n Kind: object\n Description: Preferencias visuais persistidas no config.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.valueFontSize\n Category: appearance\n Kind: number\n Description: Tamanho da fonte do valor (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelPosition\n Category: appearance\n Kind: enum\n Description: Posicionamento do label (above/left).\n\nComponent Capability:\n - Path: inputs.config.presentation.compact\n Category: appearance\n Kind: boolean\n Description: Modo compacto de apresentacao.\n\nComponent Capability:\n - Path: inputs.config.presentation.density\n Category: appearance\n Kind: enum\n Description: Densidade visual global.\n\nComponent Capability:\n - Path: inputs.config.presentation.labelWidth\n Category: appearance\n Kind: number\n Description: Largura do label (px).\n\nComponent Capability:\n - Path: inputs.config.presentation.labelAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do label.\n\nComponent Capability:\n - Path: inputs.config.presentation.valueAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento do valor.\n\nComponent Capability:\n - Path: outputs.formSubmit\n Category: outputs\n Kind: object\n Description: Evento emitido no submit do formulario.\n\nComponent Capability:\n - Path: outputs.formCancel\n Category: outputs\n Kind: object\n Description: Evento emitido ao cancelar.",
15276
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15277
+ "contentHash": "a8b570c3523646026b9ed80c42c25ab891a056b77ece8f13aff58dd5469bae1e",
15278
+ "sourceKind": "component_definition",
15279
+ "sourceId": "praxis-filter-form",
15280
+ "corpusVersion": "1.0.0"
15281
+ },
15282
+ {
15283
+ "chunkIndex": 12,
15284
+ "chunkKind": "capabilities",
15285
+ "content": "Component Capability:\n - Path: outputs.formReset\n Category: outputs\n Kind: object\n Description: Evento emitido ao resetar o formulario.\n\nComponent Capability:\n - Path: outputs.configChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando a configuracao muda.\n\nComponent Capability:\n - Path: outputs.formReady\n Category: outputs\n Kind: object\n Description: Evento emitido quando o formulario esta pronto.\n\nComponent Capability:\n - Path: outputs.valueChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o valor do formulario muda.\n\nComponent Capability:\n - Path: outputs.syncCompleted\n Category: outputs\n Kind: object\n Description: Evento emitido ao completar sincronizacao com schema.\n\nComponent Capability:\n - Path: outputs.initializationError\n Category: outputs\n Kind: object\n Description: Evento emitido quando ocorre erro na inicializacao.\n\nComponent Capability:\n - Path: outputs.enableCustomizationChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o modo de customizacao muda.\n\nComponent Capability:\n - Path: outputs.customAction\n Category: outputs\n Kind: object\n Description: Evento emitido ao disparar acao customizada.\n\nComponent Capability:\n - Path: outputs.actionConfirmation\n Category: outputs\n Kind: object\n Description: Evento emitido quando acao requer confirmacao.\n\nComponent Capability:\n - Path: outputs.schemaStatusChange\n Category: outputs\n Kind: object\n Description: Evento emitido quando o status do schema muda.\n\nCapability Note:\n - Este catalogo descreve inputs e outputs do componente.\n\nCapability Note:\n - O objeto inputs.config segue o schema de FormConfig (veja form-ai-capabilities).\n\nCapability Note:\n - inputs.config.presentation e uma extensao de runtime aplicada pelo componente.\n\nCapability Note:\n - Preferir FormConfig (sections/fieldMetadata) em vez do layout legado (fieldsets).\n\nCapability Note:\n - Use inputs.editorialContext apenas para override de contexto editorial do host; a precedencia final e runtime < config.editorialContext < host.\n\nCapability Note:\n - rich content editorial hospedado pelo form pode ser renderizado em tres slots semanticos: before, beforeActions e after.",
15286
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
15287
+ "contentHash": "f170eb134e370e2fe148ce677d5ff969edeb7db977c11b298cbefd6c393b4a27",
15288
+ "sourceKind": "component_definition",
15289
+ "sourceId": "praxis-filter-form",
15290
+ "corpusVersion": "1.0.0"
15291
+ },
15292
+ {
15293
+ "chunkIndex": 13,
15294
+ "chunkKind": "context_pack",
15295
+ "content": "{\"componentId\":\"praxis-filter-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"version\":\"v1\",\"optionsByPath\":{\"fieldMetadata[].controlType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"input\",\"label\":\"Input\"},{\"value\":\"textarea\",\"label\":\"Textarea\"},{\"value\":\"email\",\"label\":\"Email\"},{\"value\":\"password\",\"label\":\"Password\"},{\"value\":\"search\",\"label\":\"Search\"},{\"value\":\"url\",\"label\":\"URL\"},{\"value\":\"phone\",\"label\":\"Phone\"},{\"value\":\"cpfCnpjInput\",\"label\":\"CPF/CNPJ\"},{\"value\":\"numericTextBox\",\"label\":\"Number\"},{\"value\":\"currency\",\"label\":\"Currency\"},{\"value\":\"priceRange\",\"label\":\"Price range\"},{\"value\":\"date\",\"label\":\"Date picker\"},{\"value\":\"dateRange\",\"label\":\"Date range\"},{\"value\":\"dateInput\",\"label\":\"Date input\"},{\"value\":\"dateTime\",\"label\":\"Datetime\"},{\"value\":\"dateTimeRange\",\"label\":\"Datetime range\"},{\"value\":\"dateTimeLocal\",\"label\":\"Datetime local\"},{\"value\":\"time\",\"label\":\"Time input\"},{\"value\":\"timePicker\",\"label\":\"Time picker\"},{\"value\":\"timeRange\",\"label\":\"Time range\"},{\"value\":\"week\",\"label\":\"Week input\"},{\"value\":\"month\",\"label\":\"Month input\"},{\"value\":\"year\",\"label\":\"Year input\"},{\"value\":\"select\",\"label\":\"Select\"},{\"value\":\"multiSelect\",\"label\":\"Multi select\"},{\"value\":\"multiSelectTree\",\"label\":\"Multi select tree\"},{\"value\":\"treeSelect\",\"label\":\"Tree select\"},{\"value\":\"transferList\",\"label\":\"Transfer list\"},{\"value\":\"autoComplete\",\"label\":\"Autocomplete\"},{\"value\":\"searchable-select\",\"label\":\"Searchable select\"},{\"value\":\"async-select\",\"label\":\"Async select\"},{\"value\":\"radio\",\"label\":\"Radio group\"},{\"value\":\"checkbox\",\"label\":\"Checkbox group\"},{\"value\":\"selectionList\",\"label\":\"Selection list\"},{\"value\":\"toggle\",\"label\":\"Toggle\"},{\"value\":\"buttonToggle\",\"label\":\"Button toggle\"},{\"value\":\"slider\",\"label\":\"Slider\"},{\"value\":\"rangeSlider\",\"label\":\"Range slider\"},{\"value\":\"rating\",\"label\":\"Rating\"},{\"value\":\"chipInput\",\"label\":\"Chips\"},{\"value\":\"chipList\",\"label\":\"Chip list\"},{\"value\":\"upload\",\"label\":\"File upload\"},{\"value\":\"color\",\"label\":\"Color input\"},{\"value\":\"colorPicker\",\"label\":\"Color picker\"},{\"value\":\"cronBuilder\",\"label\":\"Cron builder\"}]},\"fieldMetadata[].source\":{\"mode\":\"enum\",\"options\":[{\"value\":\"schema\",\"label\":\"Schema field\"},{\"value\":\"local\",\"label\":\"Local field\"}]},\"fieldMetadata[].submitPolicy\":{\"mode\":\"enum\",\"options\":[{\"value\":\"omit\",\"label\":\"Omit from submit payload\"},{\"value\":\"include\",\"label\":\"Include in submit payload\"},{\"value\":\"includeWhenDirty\",\"label\":\"Include only when dirty\"}]},\"fieldMetadata[].materialDesign.appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"fill\",\"label\":\"Fill\"},{\"value\":\"outline\",\"label\":\"Outline\"}]},\"fieldMetadata[].materialDesign.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"}]},\"fieldMetadata[].materialDesign.floatLabel\":{\"mode\":\"enum\",\"options\":[{\"value\":\"auto\",\"label\":\"Auto\"},{\"value\":\"always\",\"label\":\"Always\"}]},\"fieldMetadata[].materialDesign.density\":{\"mode\":\"enum\",\"options\":[{\"value\":\"comfortable\",\"label\":\"Comfortable\"},{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"dense\",\"label\":\"Dense\"}]},\"actions.position\":{\"mode\":\"enum\",\"options\":[{\"value\":\"left\",\"label\":\"Left\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"right\",\"label\":\"Right\"},{\"value\":\"justified\",\"label\":\"Justified\"},{\"value\":\"split\",\"label\":\"Split\"}]},\"actions.orientation\":{\"mode\":\"enum\",\"options\":[{\"value\":\"horizontal\",\"label\":\"Horizontal\"},{\"value\":\"vertical\",\"label\":\"Vertical\"}]},\"actions.spacing\":{\"mode\":\"enum\",\"options\":[{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"normal\",\"label\":\"Normal\"},{\"value\":\"spacious\",\"label\":\"Spacious\"}]},\"actions.placement\":{\"mode\":\"enum\",\"options\":[{\"value\":\"insideLastSection\",\"label\":\"Inside last section\"},{\"value\":\"afterSections\",\"label\":\"After sections\"},{\"value\":\"top\",\"label\":\"Top\"}]},\"actions.submit.type\":{\"mode\":\"enum\",\"options\":[{\"value\":\"button\",\"label\":\"Button\"},{\"value\":\"submit\",\"label\":\"Submit\"},{\"value\":\"reset\",\"label\":\"Reset\"}]},\"actions.submit.variant\":{\"mode\":\"enum\",\"options\":[{\"value\":\"raised\",\"label\":\"Raised\"},{\"value\":\"stroked\",\"label\":\"Stroked\"},{\"value\":\"flat\",\"label\":\"Flat\"},{\"value\":\"fab\",\"label\":\"Fab\"}]},\"actions.submit.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"small\",\"label\":\"Small\"},{\"value\":\"medium\",\"label\":\"Medium\"},{\"value\":\"large\",\"label\":\"Large\"}]},\"actions.submit.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"},{\"value\":\"basic\",\"label\":\"Basic\"}]},\"sections[].headerAlign\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"}]},\"sections[].appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"card\",\"label\":\"Card\"},{\"value\":\"plain\",\"label\":\"Plain\"},{\"value\":\"step\",\"label\":\"Step\"}]},\"sections[].sectionHeader.mode\":{\"mode\":\"enum\",\"options\":[{\"value\":\"icon\",\"label\":\"Icon\"},{\"value\":\"avatar-image\",\"label\":\"Avatar image\"},{\"value\":\"avatar-initials\",\"label\":\"Avatar initials\"},{\"value\":\"auto\",\"label\":\"Auto\"}]},\"sections[].sectionHeader.emptyState\":{\"mode\":\"enum\",\"options\":[{\"value\":\"placeholder-avatar\",\"label\":\"Neutral placeholder\"},{\"value\":\"fallback-icon\",\"label\":\"Fallback icon\"},{\"value\":\"none\",\"label\":\"None\"}]},\"sections[].sectionHeader.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"sm\",\"label\":\"Small\"},{\"value\":\"md\",\"label\":\"Medium\"},{\"value\":\"lg\",\"label\":\"Large\"}]},\"sections[].stepLabel\":{\"mode\":\"suggested\",\"options\":[{\"value\":\"Dados básicos\",\"label\":\"Dados básicos\"},{\"value\":\"Detalhes\",\"label\":\"Detalhes\"},{\"value\":\"Confirmação\",\"label\":\"Confirmação\"}]},\"sections[].titleStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"titleLarge\",\"label\":\"Title large\"},{\"value\":\"titleMedium\",\"label\":\"Title medium\"},{\"value\":\"titleSmall\",\"label\":\"Title small\"},{\"value\":\"headlineSmall\",\"label\":\"Headline small\"}]},\"sections[].descriptionStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"bodyLarge\",\"label\":\"Body large\"},{\"value\":\"bodyMedium\",\"label\":\"Body medium\"},{\"value\":\"bodySmall\",\"label\":\"Body small\"}]},\"sections[].rows[].columns[].align\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"end\",\"label\":\"End\"},{\"value\":\"stretch\",\"label\":\"Stretch\"}]},\"sections[].rows[].columns[].items[].kind\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"richContent\",\"label\":\"Rich content\"}]},\"sections[].rows[].columns[].items[].layout\":{\"mode\":\"enum\",\"options\":[{\"value\":\"block\",\"label\":\"Block\"},{\"value\":\"inline\",\"label\":\"Inline\"}]},\"formRules[].targetType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"section\",\"label\":\"Section\"},{\"value\":\"row\",\"label\":\"Row\"},{\"value\":\"column\",\"label\":\"Column\"},{\"value\":\"action\",\"label\":\"Action\"},{\"value\":\"visualBlock\",\"label\":\"Visual block\"}]},\"formRules[].context\":{\"mode\":\"enum\",\"options\":[{\"value\":\"visibility\",\"label\":\"Visibility\"},{\"value\":\"readOnly\",\"label\":\"Read only\"},{\"value\":\"style\",\"label\":\"Style\"},{\"value\":\"validation\",\"label\":\"Validation\"},{\"value\":\"notification\",\"label\":\"Notification\"}]}}}}",
15296
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/filter-form-context-pack.ts",
15297
+ "contentHash": "0109d97840e880347bf955ed45438f10ff37b2321d929ab8ced6515d842211c9",
15298
+ "sourceKind": "component_definition",
15299
+ "sourceId": "praxis-filter-form",
15300
+ "corpusVersion": "1.0.0"
15301
+ },
15302
+ {
15303
+ "chunkIndex": 14,
15304
+ "chunkKind": "context_pack",
15305
+ "content": "{\"componentId\":\"praxis-filter-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"field.visibility.hide\",\"intentExamples\":[\"hide field\",\"ocultar campo\",\"esconder campo\",\"invisible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":true}]}},{\"id\":\"field.visibility.show\",\"intentExamples\":[\"show field\",\"mostrar campo\",\"exibir campo\",\"visible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":false}]}},{\"id\":\"field.label.set\",\"intentExamples\":[\"label\",\"rename field\",\"renomear campo\",\"titulo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"label\":\"{{value}}\"}]}},{\"id\":\"field.placeholder.set\",\"intentExamples\":[\"placeholder\",\"hint text\",\"texto de ajuda\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"placeholder\":\"{{value}}\"}]}},{\"id\":\"field.required.enable\",\"intentExamples\":[\"required\",\"obrigatorio\",\"mandatory\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":true}]}},{\"id\":\"field.required.disable\",\"intentExamples\":[\"optional\",\"nao obrigatorio\",\"opcional\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":false}]}},{\"id\":\"field.readonly.enable\",\"intentExamples\":[\"readonly\",\"somente leitura\",\"read only\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":true}]}},{\"id\":\"field.readonly.disable\",\"intentExamples\":[\"editable\",\"editavel\",\"read write\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":false}]}},{\"id\":\"field.disabled.enable\",\"intentExamples\":[\"disable field\",\"desabilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":true}]}},{\"id\":\"field.disabled.disable\",\"intentExamples\":[\"enable field\",\"habilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":false}]}},{\"id\":\"field.controlType.set\",\"intentExamples\":[\"control type\",\"tipo de campo\",\"controlType\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"controlType\":\"{{value}}\"}]}},{\"id\":\"field.icon.prefix.set\",\"intentExamples\":[\"prefix icon\",\"icone prefixo\",\"icon before\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"prefixIcon\":\"{{value}}\"}]}},{\"id\":\"field.icon.suffix.set\",\"intentExamples\":[\"suffix icon\",\"icone sufixo\",\"icon after\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"suffixIcon\":\"{{value}}\"}]}},{\"id\":\"section.title.set\",\"intentExamples\":[\"section title\",\"titulo da secao\",\"section name\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"title\":\"{{value}}\"}]}},{\"id\":\"section.description.set\",\"intentExamples\":[\"section description\",\"descricao da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"description\":\"{{value}}\"}]}},{\"id\":\"section.add\",\"intentExamples\":[\"add section\",\"adicionar secao\",\"nova secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{value}}\",\"title\":\"{{value}}\",\"rows\":[]}]},\"safetyNotes\":\"Certifique-se de que o ID da seção é único e relevante.\"},{\"id\":\"section.remove\",\"intentExamples\":[\"remove section\",\"remover secao\",\"excluir secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"section.order.set\",\"intentExamples\":[\"order section\",\"reordenar secao\",\"mover secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_order\":\"{{value}}\"}]},\"safetyNotes\":\"A reordenação de seções é uma operação que deve ser revisada.\"},{\"id\":\"row.add\",\"intentExamples\":[\"add row\",\"adicionar linha\",\"nova linha na secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"columns\":[]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da linha é único e relevante na seção.\"},{\"id\":\"row.remove\",\"intentExamples\":[\"remove row\",\"remover linha\",\"excluir linha da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]},\"safetyNotes\":\"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.add\",\"intentExamples\":[\"add column\",\"adicionar coluna\",\"nova coluna na linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"items\":[]}]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da coluna é único e relevante na linha.\"},{\"id\":\"column.remove\",\"intentExamples\":[\"remove column\",\"remover coluna\",\"excluir coluna da linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]}]},\"safetyNotes\":\"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.field.add\",\"intentExamples\":[\"add field to column\",\"adicionar campo a coluna\",\"colocar campo na coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"id\":\"field-{{value}}\",\"fieldName\":\"{{value}}\"}]}]}]}]},\"safetyNotes\":\"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"},{\"id\":\"column.field.remove\",\"intentExamples\":[\"remove field from column\",\"remover campo da coluna\",\"tirar campo da coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"fieldName\":\"{{value}}\",\"_remove\":true}]}]}]}]},\"safetyNotes\":\"Remover um campo de uma coluna pode alterar o layout do formulário.\"},{\"id\":\"actions.submit.label.set\",\"intentExamples\":[\"submit label\",\"rotulo salvar\",\"texto botao enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.submit.visible.set\",\"intentExamples\":[\"show submit\",\"esconder salvar\",\"visibilidade enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.label.set\",\"intentExamples\":[\"cancel label\",\"rotulo cancelar\",\"texto botao cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.visible.set\",\"intentExamples\":[\"show cancel\",\"esconder cancelar\",\"visibilidade cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.reset.label.set\",\"intentExamples\":[\"reset label\",\"rotulo resetar\",\"texto botao limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.reset.visible.set\",\"intentExamples\":[\"show reset\",\"esconder reset\",\"visibilidade limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"rule.add.visibility\",\"intentExamples\":[\"add visibility rule\",\"regra de visibilidade\",\"campo condicional\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{value.id}}\",\"name\":\"{{value.name}}\",\"targetType\":\"field\",\"targets\":[\"{{target}}\"],\"effect\":{\"condition\":\"{{value.condition}}\",\"properties\":{\"hidden\":false},\"propertiesWhenFalse\":{\"hidden\":true}}}]},\"safetyNotes\":\"Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao.\"},{\"id\":\"rule.remove\",\"intentExamples\":[\"remove rule\",\"excluir regra\",\"apagar regra\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"}]}}",
15306
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/filter-form-context-pack.ts",
15307
+ "contentHash": "18a73780a846aaa37252e9b7b138e69898b7b5c48631f2d2410d1d63c7684ee6",
15308
+ "sourceKind": "component_definition",
15309
+ "sourceId": "praxis-filter-form",
15310
+ "corpusVersion": "1.0.0"
15311
+ },
15312
+ {
15313
+ "chunkIndex": 15,
15314
+ "chunkKind": "context_pack",
15315
+ "content": "{\"componentId\":\"praxis-filter-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"rule.add.dependency\",\"intentExamples\":[\"adicionar dependencia\",\"campo depende de\",\"mostrar se\",\"obrigatorio se\",\"desabilitar se\",\"campo condicional\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"triggerField\",\"type\":\"STRING\",\"description\":\"Campo que controla a regra (ex: tipoPessoa)\"},{\"name\":\"conditionValue\",\"type\":\"STRING\",\"description\":\"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado pela regra (ex: cnpj)\"},{\"name\":\"effectType\",\"type\":\"ENUM\",\"options\":[\"visibility\",\"required\",\"disabled\"],\"description\":\"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"rule_{{params.triggerField}}_{{params.targetField}}\",\"name\":\"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"{{params.triggerField}}\"},\"{{params.conditionValue}}\"]},\"properties\":{\"hidden\":\"{{params.effectType === 'visibility' ? false : undefined}}\",\"required\":\"{{params.effectType === 'required' ? true : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? true : undefined}}\"},\"propertiesWhenFalse\":{\"hidden\":\"{{params.effectType === 'visibility' ? true : undefined}}\",\"required\":\"{{params.effectType === 'required' ? false : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? false : undefined}}\"}}}]},\"safetyNotes\":\"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"},{\"id\":\"rule.add.custom\",\"intentExamples\":[\"adicionar regra customizada\",\"regra complexa\",\"logica de formulario\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"id\",\"type\":\"STRING\",\"description\":\"ID único da regra\"},{\"name\":\"condition\",\"type\":\"STRING\",\"description\":\"Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \\\"and\\\": [{ \\\">\\\": [{ \\\"var\\\": \\\"idade\\\" }, 18] }, { \\\"==\\\": [{ \\\"var\\\": \\\"possuiHabilitacao\\\" }, true] }] })\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado\"},{\"name\":\"propertyName\",\"type\":\"STRING\",\"description\":\"Propriedade afetada (hidden, required, disabled, readOnly)\"},{\"name\":\"valueIfTrue\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for verdadeira\"},{\"name\":\"valueIfFalse\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for falsa\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{params.id}}\",\"name\":\"Regra Customizada: {{params.id}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":\"{{params.condition}}\",\"properties\":{\"{{params.propertyName}}\":\"{{params.valueIfTrue}}\"},\"propertiesWhenFalse\":{\"{{params.propertyName}}\":\"{{params.valueIfFalse}}\"}}}]}}]}}",
15316
+ "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/filter-form-context-pack.ts",
15317
+ "contentHash": "b66c5f1a3cc313899adda056779ae929f176bf5708dd6e27c750afc72685b5e2",
15318
+ "sourceKind": "component_definition",
15319
+ "sourceId": "praxis-filter-form",
15320
+ "corpusVersion": "1.0.0"
15321
+ },
15322
+ {
15323
+ "chunkIndex": 16,
14584
15324
  "chunkKind": "context_pack",
14585
- "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}",
15325
+ "content": "{\"componentId\":\"praxis-filter-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"fieldResolvers\":{\"fieldMetadata[]\":[\"name\",\"label\"],\"sections[]\":[\"id\",\"title\"],\"sections[].rows[].columns[].items[]\":[\"id\",\"fieldName\"],\"sections[].rows[].columns[].fields[]\":[]},\"hints\":[\"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\"Local fields are real form controls. Create them in fieldMetadata[] with source:\\\"local\\\", usually transient:true and submitPolicy:\\\"omit\\\", then place them as kind:\\\"field\\\" layout items.\",\"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\"Use sections[].rows[].columns[].items[] as the canonical mixed layout order. kind:\\\"field\\\" items reference fieldMetadata; kind:\\\"richContent\\\" items are visual blocks outside submit payload.\",\"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\"For field formRules that must calculate a FormControl value, use effect.properties.value with the closed envelope { expression: <JSON Logic> }, such as { expression: { yearsSince: [{ var: \\\"birthDate\\\" }] } }. Use the closed envelope { literal: <value> } for structured literal objects; do not add extra keys and do not generate TypeScript functions.\",\"For conditional side effects, use formCommandRules with effects[].kind:\\\"global-action\\\" and a structured globalAction ref. The visual editor authors the primary effect and preserves secondary effects from advanced JSON. Do not put alert/modal/navigation commands inside formRules[].effect.properties.\",\"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"]}}",
14586
15326
  "sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/filter-form-context-pack.ts",
14587
- "contentHash": "fce0638895fb6284d9f1f6c896a2eeb5945f4877b418f942a1872f60b1541c15",
15327
+ "contentHash": "b033b110e700f07b18bd7a890bc3927b60e9e1fbb1a22fc8cb23bbaef83d5076",
14588
15328
  "sourceKind": "component_definition",
14589
15329
  "sourceId": "praxis-filter-form",
14590
15330
  "corpusVersion": "1.0.0"