@praxisui/table 9.0.0-beta.16 → 9.0.0-beta.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/ai/component-registry.json +55 -50
- package/fesm2022/{praxisui-table-praxisui-table-PgzZWx25.mjs → praxisui-table-praxisui-table--Mn44a7Y.mjs} +62 -12
- package/fesm2022/{praxisui-table-table-ai.adapter-DoQzkktM.mjs → praxisui-table-table-ai.adapter-CpxtKoLM.mjs} +1 -1
- package/fesm2022/praxisui-table.mjs +1 -1
- package/package.json +10 -10
- package/src/lib/praxis-table.json-api.md +9 -2
- package/types/praxisui-table.d.ts +4 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-06-
|
|
3
|
+
"generatedAt": "2026-06-24T18:20:22.967Z",
|
|
4
4
|
"packageName": "@praxisui/table",
|
|
5
|
-
"packageVersion": "9.0.0-beta.
|
|
5
|
+
"packageVersion": "9.0.0-beta.18",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 3,
|
|
@@ -496,26 +496,26 @@
|
|
|
496
496
|
"schema",
|
|
497
497
|
"local"
|
|
498
498
|
],
|
|
499
|
-
"description": "Origem
|
|
499
|
+
"description": "Origem semântica do campo. Use local para campos do host que não vêm do schema backend.",
|
|
500
500
|
"intentExamples": [
|
|
501
501
|
"campo local",
|
|
502
502
|
"campo auxiliar do host",
|
|
503
|
-
"campo que
|
|
503
|
+
"campo que não vem do schema"
|
|
504
504
|
],
|
|
505
|
-
"safetyNotes": "
|
|
505
|
+
"safetyNotes": "Não marque como local um campo que exista no schema backend; remova a semântica local quando houver colisão com campo server-backed."
|
|
506
506
|
},
|
|
507
507
|
{
|
|
508
508
|
"path": "transient",
|
|
509
509
|
"category": "data",
|
|
510
510
|
"valueKind": "boolean",
|
|
511
|
-
"description": "Marca o campo como
|
|
511
|
+
"description": "Marca o campo como temporário/local para preenchimento. O dynamic-form omite do submit por padrão.",
|
|
512
512
|
"intentExamples": [
|
|
513
|
-
"campo
|
|
513
|
+
"campo temporário",
|
|
514
514
|
"campo transient",
|
|
515
|
-
"
|
|
515
|
+
"não enviar no payload",
|
|
516
516
|
"usar apenas na UI"
|
|
517
517
|
],
|
|
518
|
-
"safetyNotes": "Campos transient continuam participando de UI,
|
|
518
|
+
"safetyNotes": "Campos transient continuam participando de UI, validação, regras, visibilidade e valueChange; eles apenas saem do payload persistido por padrão."
|
|
519
519
|
},
|
|
520
520
|
{
|
|
521
521
|
"path": "submitPolicy",
|
|
@@ -526,7 +526,7 @@
|
|
|
526
526
|
"omit",
|
|
527
527
|
"includeWhenDirty"
|
|
528
528
|
],
|
|
529
|
-
"description": "
|
|
529
|
+
"description": "Política de submit para sobrescrever o padrão de campos locais/transient.",
|
|
530
530
|
"intentExamples": [
|
|
531
531
|
"omitir do submit",
|
|
532
532
|
"enviar mesmo sendo local",
|
|
@@ -768,9 +768,9 @@
|
|
|
768
768
|
"path": "required",
|
|
769
769
|
"category": "validation",
|
|
770
770
|
"valueKind": "boolean",
|
|
771
|
-
"description": "Campo
|
|
771
|
+
"description": "Campo obrigatório (alias rápido do validators.required).",
|
|
772
772
|
"intentExamples": [
|
|
773
|
-
"campo
|
|
773
|
+
"campo obrigatório",
|
|
774
774
|
"exigir preenchimento"
|
|
775
775
|
]
|
|
776
776
|
},
|
|
@@ -795,7 +795,7 @@
|
|
|
795
795
|
"path": "validators.emailMessage",
|
|
796
796
|
"category": "validation",
|
|
797
797
|
"valueKind": "string",
|
|
798
|
-
"description": "Mensagem customizada para
|
|
798
|
+
"description": "Mensagem customizada para validação de email."
|
|
799
799
|
},
|
|
800
800
|
{
|
|
801
801
|
"path": "validators.minLength",
|
|
@@ -961,15 +961,15 @@
|
|
|
961
961
|
"path": "validators.customValidator",
|
|
962
962
|
"category": "validation",
|
|
963
963
|
"valueKind": "expression",
|
|
964
|
-
"description": "Validador customizado (
|
|
965
|
-
"safetyNotes": "
|
|
964
|
+
"description": "Validador customizado (função).",
|
|
965
|
+
"safetyNotes": "Funções não são serializáveis; exige wiring manual."
|
|
966
966
|
},
|
|
967
967
|
{
|
|
968
968
|
"path": "validators.asyncValidator",
|
|
969
969
|
"category": "validation",
|
|
970
970
|
"valueKind": "expression",
|
|
971
|
-
"description": "Validador async customizado (
|
|
972
|
-
"safetyNotes": "
|
|
971
|
+
"description": "Validador async customizado (função).",
|
|
972
|
+
"safetyNotes": "Funções não são serializáveis; exige wiring manual."
|
|
973
973
|
},
|
|
974
974
|
{
|
|
975
975
|
"path": "validators.matchField",
|
|
@@ -987,8 +987,8 @@
|
|
|
987
987
|
"path": "validators.uniqueValidator",
|
|
988
988
|
"category": "validation",
|
|
989
989
|
"valueKind": "expression",
|
|
990
|
-
"description": "Validador de unicidade via API (
|
|
991
|
-
"safetyNotes": "
|
|
990
|
+
"description": "Validador de unicidade via API (função).",
|
|
991
|
+
"safetyNotes": "Funções não são serializáveis; exige wiring manual."
|
|
992
992
|
},
|
|
993
993
|
{
|
|
994
994
|
"path": "validators.uniqueMessage",
|
|
@@ -1000,8 +1000,8 @@
|
|
|
1000
1000
|
"path": "validators.conditionalValidation",
|
|
1001
1001
|
"category": "validation",
|
|
1002
1002
|
"valueKind": "array",
|
|
1003
|
-
"description": "Regras de
|
|
1004
|
-
"safetyNotes": "Use regras declarativas com Json Logic
|
|
1003
|
+
"description": "Regras de validação condicional.",
|
|
1004
|
+
"safetyNotes": "Use regras declarativas com Json Logic serializável; não gere funções aqui."
|
|
1005
1005
|
},
|
|
1006
1006
|
{
|
|
1007
1007
|
"path": "validators.conditionalValidation[].condition",
|
|
@@ -1026,13 +1026,13 @@
|
|
|
1026
1026
|
"submit",
|
|
1027
1027
|
"immediate"
|
|
1028
1028
|
],
|
|
1029
|
-
"description": "Gatilho de
|
|
1029
|
+
"description": "Gatilho de validação no validator."
|
|
1030
1030
|
},
|
|
1031
1031
|
{
|
|
1032
1032
|
"path": "validators.validationDebounce",
|
|
1033
1033
|
"category": "validation",
|
|
1034
1034
|
"valueKind": "number",
|
|
1035
|
-
"description": "Debounce de
|
|
1035
|
+
"description": "Debounce de validação no validator (ms)."
|
|
1036
1036
|
},
|
|
1037
1037
|
{
|
|
1038
1038
|
"path": "validators.showInlineErrors",
|
|
@@ -1479,9 +1479,9 @@
|
|
|
1479
1479
|
{
|
|
1480
1480
|
"chunkIndex": 1,
|
|
1481
1481
|
"chunkKind": "capabilities",
|
|
1482
|
-
"content": "Schema Capabilities:\n - Path: id\n Category: identity\n Kind: string\n Description: Identificador unico da instancia do componente.\n - Path: version\n Category: identity\n Kind: string\n Description: Versao do schema de metadata (migracao).\n - Path: context\n Category: identity\n Kind: enum\n Description: Contexto de uso do componente (form/filter/table/dialog/standalone).\n - Path: createdAt\n Category: misc\n Kind: string\n Description: Timestamp de criacao (ISO).\n - Path: updatedAt\n Category: misc\n Kind: string\n Description: Timestamp de atualizacao (ISO).\n - Path: tags\n Category: identity\n Kind: array\n Description: Tags para categorizacao e busca.\n - Path: cssClass\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao host do componente.\n - Path: style\n Category: appearance\n Kind: object\n Description: Estilos inline (objeto CSS).\n - Path: dataAttributes\n Category: data\n Kind: object\n Description: Data attributes para teste/analytics.\n - Path: name\n Category: identity\n Kind: string\n Description: Identificador único do campo. Essencial para binding.\n - Path: label\n Category: identity\n Kind: string\n Description: Rótulo principal exibido para o usuário.\n - Path: placeholder\n Category: identity\n Kind: string\n Description: Texto temporário exibido quando vazio.\n - Path: hint\n Category: identity\n Kind: string\n Description: Texto de ajuda exibido abaixo do campo.\n - Path: helpText\n Category: identity\n Kind: string\n Description: Texto semântico de ajuda publicado pelo schema/DTO.\n - Path: tooltip\n Category: identity\n Kind: string\n Description: Texto exibido ao passar o mouse.\n - Path: tooltipOnHover\n Category: identity\n Kind: boolean\n Description: Habilita apresentação do tooltip no hover quando suportado pelo renderer.\n - Path: description\n Category: identity\n Kind: string\n Description: Descrição detalhada (usada em documentação ou helps extensos).\n - Path: selectionMode\n Category: behavior\n Kind: enum\n Description: Semântica de seleção explícita para controles de escolha.\n - Path: variant\n Category: appearance\n Kind: string\n Description: Variante visual/semântica do controle.\n - Path: density\n Category: appearance\n Kind: enum\n Description: Densidade visual do shell do controle.\n - Path: links\n Category: identity\n Kind: array\n Description: Links ricos associados ao campo, úteis em consentimentos e conteúdo legal.\n - Path: group\n Category: identity\n Kind: string\n Description: Agrupador lógico do campo.\n - Path: order\n Category: layout\n Kind: number\n Description: Ordem de exibição do campo.\n - Path: width\n Category: layout\n Kind: string\n Description: Largura do campo (ex: 50%, 100px).\n - Path: isFlex\n Category: layout\n Kind: boolean\n Description: Se true, usa flex-grow para preencher espaço.\n - Path: controlType\n Category: behavior\n Kind: enum\n Description: Tipo do componente de UI (input, select, datepicker, etc).\n - Path: dataType\n Category: data\n Kind: enum\n Description: Tipo de dado do campo (text, number, date, etc).\n - Path: source\n Category: data\n Kind: enum\n Description: Origem semantica do campo. Use local para campos do host que nao vem do schema backend.\n - Path: transient\n Category: data\n Kind: boolean\n Description: Marca o campo como temporario/local para preenchimento. O dynamic-form omite do submit por padrao.\n - Path: submitPolicy\n Category: behavior\n Kind: enum\n Description: Politica de submit para sobrescrever o padrao de campos locais/transient.\n - Path: materialDesign.appearance\n Category: appearance\n Kind: enum\n Description: Aparência do campo Material (fill/outline).\n - Path: materialDesign.color\n Category: appearance\n Kind: enum\n Description: Tema de cor Material (primary/accent/warn).\n - Path: materialDesign.floatLabel\n Category: appearance\n Kind: enum\n Description: Comportamento do rótulo flutuante.\n - Path: materialDesign.subscriptSizing\n Category: appearance\n Kind: enum\n Description: Estratégia de sizing do subscript (erros/hints).\n - Path: materialDesign.hideRequiredMarker\n Category: appearance\n Kind: boolean\n Description: Oculta o asterisco de campo obrigatório.\n - Path: materialDesign.density\n Category: appearance\n Kind: enum\n Description: Densidade do campo Material.\n - Path: materialDesign.disableRipple\n Category: appearance\n Kind: boolean\n Description: Desativa ripple/ondulação em componentes Material.\n - Path: materialDesign.customPalette\n Category: appearance\n Kind: object\n Description: Override de paleta (primary/accent/warn).\n - Path: materialDesign.animations\n Category: appearance\n Kind: object\n Description: Configuração de animações (disable, duration, easing).\n - Path: prefixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido antes do valor.\n - Path: suffixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido depois do valor.\n - Path: iconPosition\n Category: appearance\n Kind: enum\n Description: Posição preferencial do ícone principal.\n - Path: iconSize\n Category: appearance\n Kind: enum\n Description: Tamanho do ícone.\n - Path: iconColor\n Category: appearance\n Kind: string\n Description: Cor semântica ou token de cor aplicado ao ícone principal.\n - Path: iconClass\n Category: appearance\n Kind: string\n Description: Classe CSS controlada pelo host para o ícone principal.\n - Path: iconStyle\n Category: appearance\n Kind: string\n Description: Estilo visual semântico do ícone quando o renderer suportar variações.\n - Path: iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n - Path: mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n - Path: format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n - Path: validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n - Path: validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n - Path: required\n Category: validation\n Kind: boolean\n Description: Campo obrigatorio (alias rapido do validators.required).\n - Path: validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n - Path: validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n - Path: validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validacao de email.\n - Path: validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n - Path: validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n - Path: validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n - Path: validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n - Path: validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n - Path: validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n - Path: validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n - Path: validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n - Path: validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n - Path: validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n - Path: validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n - Path: validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n - Path: validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n - Path: validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n - Path: validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n - Path: validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.\n - Path: validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n - Path: validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n - Path: validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n - Path: validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n - Path: validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n - Path: validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (funcao).\n - Path: validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (funcao).\n - Path: validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n - Path: validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n - Path: validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (funcao).\n - Path: validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n - Path: validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validacao condicional.\n - Path: validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n - Path: validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n - Path: validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validacao no validator.\n - Path: validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validacao no validator (ms).\n - Path: validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n - Path: validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n - Path: validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n - Path: debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n - Path: options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n - Path: endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n - Path: valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n - Path: displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n - Path: filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n - Path: queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n - Path: cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n - Path: hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n - Path: visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n - Path: formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n - Path: tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n - Path: filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n - Path: dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n - Path: conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n - Path: conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n - Path: dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n - Path: dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n - Path: dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n - Path: dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n - Path: resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n - Path: enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n - Path: dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n - Path: suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.\n - Path: transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n - Path: transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n - Path: textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n - Path: inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n - Path: unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n - Path: readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n - Path: disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n - Path: defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n - Path: ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n - Path: ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n - Path: tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n - Path: accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n",
|
|
1482
|
+
"content": "Schema Capabilities:\n - Path: id\n Category: identity\n Kind: string\n Description: Identificador unico da instancia do componente.\n - Path: version\n Category: identity\n Kind: string\n Description: Versao do schema de metadata (migracao).\n - Path: context\n Category: identity\n Kind: enum\n Description: Contexto de uso do componente (form/filter/table/dialog/standalone).\n - Path: createdAt\n Category: misc\n Kind: string\n Description: Timestamp de criacao (ISO).\n - Path: updatedAt\n Category: misc\n Kind: string\n Description: Timestamp de atualizacao (ISO).\n - Path: tags\n Category: identity\n Kind: array\n Description: Tags para categorizacao e busca.\n - Path: cssClass\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao host do componente.\n - Path: style\n Category: appearance\n Kind: object\n Description: Estilos inline (objeto CSS).\n - Path: dataAttributes\n Category: data\n Kind: object\n Description: Data attributes para teste/analytics.\n - Path: name\n Category: identity\n Kind: string\n Description: Identificador único do campo. Essencial para binding.\n - Path: label\n Category: identity\n Kind: string\n Description: Rótulo principal exibido para o usuário.\n - Path: placeholder\n Category: identity\n Kind: string\n Description: Texto temporário exibido quando vazio.\n - Path: hint\n Category: identity\n Kind: string\n Description: Texto de ajuda exibido abaixo do campo.\n - Path: helpText\n Category: identity\n Kind: string\n Description: Texto semântico de ajuda publicado pelo schema/DTO.\n - Path: tooltip\n Category: identity\n Kind: string\n Description: Texto exibido ao passar o mouse.\n - Path: tooltipOnHover\n Category: identity\n Kind: boolean\n Description: Habilita apresentação do tooltip no hover quando suportado pelo renderer.\n - Path: description\n Category: identity\n Kind: string\n Description: Descrição detalhada (usada em documentação ou helps extensos).\n - Path: selectionMode\n Category: behavior\n Kind: enum\n Description: Semântica de seleção explícita para controles de escolha.\n - Path: variant\n Category: appearance\n Kind: string\n Description: Variante visual/semântica do controle.\n - Path: density\n Category: appearance\n Kind: enum\n Description: Densidade visual do shell do controle.\n - Path: links\n Category: identity\n Kind: array\n Description: Links ricos associados ao campo, úteis em consentimentos e conteúdo legal.\n - Path: group\n Category: identity\n Kind: string\n Description: Agrupador lógico do campo.\n - Path: order\n Category: layout\n Kind: number\n Description: Ordem de exibição do campo.\n - Path: width\n Category: layout\n Kind: string\n Description: Largura do campo (ex: 50%, 100px).\n - Path: isFlex\n Category: layout\n Kind: boolean\n Description: Se true, usa flex-grow para preencher espaço.\n - Path: controlType\n Category: behavior\n Kind: enum\n Description: Tipo do componente de UI (input, select, datepicker, etc).\n - Path: dataType\n Category: data\n Kind: enum\n Description: Tipo de dado do campo (text, number, date, etc).\n - Path: 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: 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: submitPolicy\n Category: behavior\n Kind: enum\n Description: Política de submit para sobrescrever o padrão de campos locais/transient.\n - Path: materialDesign.appearance\n Category: appearance\n Kind: enum\n Description: Aparência do campo Material (fill/outline).\n - Path: materialDesign.color\n Category: appearance\n Kind: enum\n Description: Tema de cor Material (primary/accent/warn).\n - Path: materialDesign.floatLabel\n Category: appearance\n Kind: enum\n Description: Comportamento do rótulo flutuante.\n - Path: materialDesign.subscriptSizing\n Category: appearance\n Kind: enum\n Description: Estratégia de sizing do subscript (erros/hints).\n - Path: materialDesign.hideRequiredMarker\n Category: appearance\n Kind: boolean\n Description: Oculta o asterisco de campo obrigatório.\n - Path: materialDesign.density\n Category: appearance\n Kind: enum\n Description: Densidade do campo Material.\n - Path: materialDesign.disableRipple\n Category: appearance\n Kind: boolean\n Description: Desativa ripple/ondulação em componentes Material.\n - Path: materialDesign.customPalette\n Category: appearance\n Kind: object\n Description: Override de paleta (primary/accent/warn).\n - Path: materialDesign.animations\n Category: appearance\n Kind: object\n Description: Configuração de animações (disable, duration, easing).\n - Path: prefixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido antes do valor.\n - Path: suffixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido depois do valor.\n - Path: iconPosition\n Category: appearance\n Kind: enum\n Description: Posição preferencial do ícone principal.\n - Path: iconSize\n Category: appearance\n Kind: enum\n Description: Tamanho do ícone.\n - Path: iconColor\n Category: appearance\n Kind: string\n Description: Cor semântica ou token de cor aplicado ao ícone principal.\n - Path: iconClass\n Category: appearance\n Kind: string\n Description: Classe CSS controlada pelo host para o ícone principal.\n - Path: iconStyle\n Category: appearance\n Kind: string\n Description: Estilo visual semântico do ícone quando o renderer suportar variações.\n - Path: iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n - Path: mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n - Path: format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n - Path: validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n - Path: validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n - Path: required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n - Path: validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n - Path: validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n - Path: validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n - Path: validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n - Path: validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n - Path: validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n - Path: validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n - Path: validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n - Path: validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n - Path: validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n - Path: validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n - Path: validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n - Path: validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n - Path: validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n - Path: validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n - Path: validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n - Path: validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n - Path: validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n - Path: validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.\n - Path: validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n - Path: validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n - Path: validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n - Path: validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n - Path: validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n - Path: validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n - Path: validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n - Path: validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n - Path: validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n - Path: validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n - Path: validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n - Path: validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n - Path: validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n - Path: validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n - Path: validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n - Path: validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).\n - Path: validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n - Path: validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n - Path: validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n - Path: debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n - Path: options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n - Path: endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n - Path: valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n - Path: displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n - Path: filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n - Path: queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n - Path: cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n - Path: hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n - Path: visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n - Path: formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n - Path: tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n - Path: filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n - Path: dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n - Path: conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n - Path: conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n - Path: dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n - Path: dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n - Path: dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n - Path: dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n - Path: resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n - Path: enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n - Path: dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n - Path: suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.\n - Path: transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n - Path: transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n - Path: textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n - Path: inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n - Path: unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n - Path: readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n - Path: disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n - Path: defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n - Path: ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n - Path: ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n - Path: tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n - Path: accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\n",
|
|
1483
1483
|
"sourcePointer": "praxis-ui-angular/projects/praxis-core/src/lib/ai/field-metadata-ai-capabilities.ts",
|
|
1484
|
-
"contentHash": "
|
|
1484
|
+
"contentHash": "9cd4caf524bb9e3af72f1723f4e9ebbada222e64bf175b7dd97fdf8c1a2ce49e",
|
|
1485
1485
|
"sourceKind": "component_definition",
|
|
1486
1486
|
"sourceId": "praxis-filter",
|
|
1487
1487
|
"corpusVersion": "1.0.0"
|
|
@@ -3827,26 +3827,26 @@
|
|
|
3827
3827
|
"schema",
|
|
3828
3828
|
"local"
|
|
3829
3829
|
],
|
|
3830
|
-
"description": "Origem
|
|
3830
|
+
"description": "Origem semântica do campo. Use local para campos do host que não vêm do schema backend.",
|
|
3831
3831
|
"intentExamples": [
|
|
3832
3832
|
"campo local",
|
|
3833
3833
|
"campo auxiliar do host",
|
|
3834
|
-
"campo que
|
|
3834
|
+
"campo que não vem do schema"
|
|
3835
3835
|
],
|
|
3836
|
-
"safetyNotes": "
|
|
3836
|
+
"safetyNotes": "Não marque como local um campo que exista no schema backend; remova a semântica local quando houver colisão com campo server-backed."
|
|
3837
3837
|
},
|
|
3838
3838
|
{
|
|
3839
3839
|
"path": "fieldMetadata[].transient",
|
|
3840
3840
|
"category": "data",
|
|
3841
3841
|
"valueKind": "boolean",
|
|
3842
|
-
"description": "Marca o campo como
|
|
3842
|
+
"description": "Marca o campo como temporário/local para preenchimento. O dynamic-form omite do submit por padrão.",
|
|
3843
3843
|
"intentExamples": [
|
|
3844
|
-
"campo
|
|
3844
|
+
"campo temporário",
|
|
3845
3845
|
"campo transient",
|
|
3846
|
-
"
|
|
3846
|
+
"não enviar no payload",
|
|
3847
3847
|
"usar apenas na UI"
|
|
3848
3848
|
],
|
|
3849
|
-
"safetyNotes": "Campos transient continuam participando de UI,
|
|
3849
|
+
"safetyNotes": "Campos transient continuam participando de UI, validação, regras, visibilidade e valueChange; eles apenas saem do payload persistido por padrão."
|
|
3850
3850
|
},
|
|
3851
3851
|
{
|
|
3852
3852
|
"path": "fieldMetadata[].submitPolicy",
|
|
@@ -3857,7 +3857,7 @@
|
|
|
3857
3857
|
"omit",
|
|
3858
3858
|
"includeWhenDirty"
|
|
3859
3859
|
],
|
|
3860
|
-
"description": "
|
|
3860
|
+
"description": "Política de submit para sobrescrever o padrão de campos locais/transient.",
|
|
3861
3861
|
"intentExamples": [
|
|
3862
3862
|
"omitir do submit",
|
|
3863
3863
|
"enviar mesmo sendo local",
|
|
@@ -4099,9 +4099,9 @@
|
|
|
4099
4099
|
"path": "fieldMetadata[].required",
|
|
4100
4100
|
"category": "validation",
|
|
4101
4101
|
"valueKind": "boolean",
|
|
4102
|
-
"description": "Campo
|
|
4102
|
+
"description": "Campo obrigatório (alias rápido do validators.required).",
|
|
4103
4103
|
"intentExamples": [
|
|
4104
|
-
"campo
|
|
4104
|
+
"campo obrigatório",
|
|
4105
4105
|
"exigir preenchimento"
|
|
4106
4106
|
]
|
|
4107
4107
|
},
|
|
@@ -4126,7 +4126,7 @@
|
|
|
4126
4126
|
"path": "fieldMetadata[].validators.emailMessage",
|
|
4127
4127
|
"category": "validation",
|
|
4128
4128
|
"valueKind": "string",
|
|
4129
|
-
"description": "Mensagem customizada para
|
|
4129
|
+
"description": "Mensagem customizada para validação de email."
|
|
4130
4130
|
},
|
|
4131
4131
|
{
|
|
4132
4132
|
"path": "fieldMetadata[].validators.minLength",
|
|
@@ -4292,15 +4292,15 @@
|
|
|
4292
4292
|
"path": "fieldMetadata[].validators.customValidator",
|
|
4293
4293
|
"category": "validation",
|
|
4294
4294
|
"valueKind": "expression",
|
|
4295
|
-
"description": "Validador customizado (
|
|
4296
|
-
"safetyNotes": "
|
|
4295
|
+
"description": "Validador customizado (função).",
|
|
4296
|
+
"safetyNotes": "Funções não são serializáveis; exige wiring manual."
|
|
4297
4297
|
},
|
|
4298
4298
|
{
|
|
4299
4299
|
"path": "fieldMetadata[].validators.asyncValidator",
|
|
4300
4300
|
"category": "validation",
|
|
4301
4301
|
"valueKind": "expression",
|
|
4302
|
-
"description": "Validador async customizado (
|
|
4303
|
-
"safetyNotes": "
|
|
4302
|
+
"description": "Validador async customizado (função).",
|
|
4303
|
+
"safetyNotes": "Funções não são serializáveis; exige wiring manual."
|
|
4304
4304
|
},
|
|
4305
4305
|
{
|
|
4306
4306
|
"path": "fieldMetadata[].validators.matchField",
|
|
@@ -4318,8 +4318,8 @@
|
|
|
4318
4318
|
"path": "fieldMetadata[].validators.uniqueValidator",
|
|
4319
4319
|
"category": "validation",
|
|
4320
4320
|
"valueKind": "expression",
|
|
4321
|
-
"description": "Validador de unicidade via API (
|
|
4322
|
-
"safetyNotes": "
|
|
4321
|
+
"description": "Validador de unicidade via API (função).",
|
|
4322
|
+
"safetyNotes": "Funções não são serializáveis; exige wiring manual."
|
|
4323
4323
|
},
|
|
4324
4324
|
{
|
|
4325
4325
|
"path": "fieldMetadata[].validators.uniqueMessage",
|
|
@@ -4331,8 +4331,8 @@
|
|
|
4331
4331
|
"path": "fieldMetadata[].validators.conditionalValidation",
|
|
4332
4332
|
"category": "validation",
|
|
4333
4333
|
"valueKind": "array",
|
|
4334
|
-
"description": "Regras de
|
|
4335
|
-
"safetyNotes": "Use regras declarativas com Json Logic
|
|
4334
|
+
"description": "Regras de validação condicional.",
|
|
4335
|
+
"safetyNotes": "Use regras declarativas com Json Logic serializável; não gere funções aqui."
|
|
4336
4336
|
},
|
|
4337
4337
|
{
|
|
4338
4338
|
"path": "fieldMetadata[].validators.conditionalValidation[].condition",
|
|
@@ -4357,13 +4357,13 @@
|
|
|
4357
4357
|
"submit",
|
|
4358
4358
|
"immediate"
|
|
4359
4359
|
],
|
|
4360
|
-
"description": "Gatilho de
|
|
4360
|
+
"description": "Gatilho de validação no validator."
|
|
4361
4361
|
},
|
|
4362
4362
|
{
|
|
4363
4363
|
"path": "fieldMetadata[].validators.validationDebounce",
|
|
4364
4364
|
"category": "validation",
|
|
4365
4365
|
"valueKind": "number",
|
|
4366
|
-
"description": "Debounce de
|
|
4366
|
+
"description": "Debounce de validação no validator (ms)."
|
|
4367
4367
|
},
|
|
4368
4368
|
{
|
|
4369
4369
|
"path": "fieldMetadata[].validators.showInlineErrors",
|
|
@@ -5359,9 +5359,9 @@
|
|
|
5359
5359
|
{
|
|
5360
5360
|
"chunkIndex": 1,
|
|
5361
5361
|
"chunkKind": "capabilities",
|
|
5362
|
-
"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: editorialContext\n Category: editorial\n Kind: object\n Description: Contexto editorial compartilhado entre os blocos hospedados antes/depois do formulario.\n - Path: editorialContext.[token]\n Category: editorial\n Kind: string\n Description: Valor simples exposto no contexto editorial.\n - Path: formBlocksBefore\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado antes do formulario.\n - Path: formBlocksBefore.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content.\n - Path: formBlocksBefore.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content editorial.\n - Path: formBlocksBefore.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes do formulario.\n - Path: formBlocksBefore.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes do formulario.\n - Path: formBlocksBefore.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content hospedado antes do formulario.\n - Path: formBlocksBeforeActions\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado depois das seções e antes da área principal de ações.\n - Path: formBlocksBeforeActions.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content antes das ações.\n - Path: formBlocksBeforeActions.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content antes das ações.\n - Path: formBlocksBeforeActions.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes da área principal de ações.\n - Path: formBlocksBeforeActions.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes da área principal de ações.\n - Path: formBlocksBeforeActions.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content antes das ações.\n - Path: formBlocksAfter\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado depois do formulario inteiro, incluindo a área principal de ações.\n - Path: formBlocksAfter.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content de fechamento.\n - Path: formBlocksAfter.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content de fechamento.\n - Path: formBlocksAfter.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados depois do formulario.\n - Path: formBlocksAfter.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado depois do formulario.\n - Path: formBlocksAfter.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content de fechamento.\n - Path: sections[].id\n Category: layout\n Kind: string\n Description: ID único da seção.\n - Path: sections[].title\n Category: layout\n Kind: string\n Description: TÃtulo exibido para cada seção do formulário.\n - Path: sections[].description\n Category: layout\n Kind: string\n Description: Descrição auxiliar exibida abaixo do tÃtulo da seção.\n - Path: sections[].icon\n Category: layout\n Kind: string\n Description: Nome do Ãcone (Material Icons) para o cabeçalho da seção.\n - Path: sections[].sectionHeader\n Category: layout\n Kind: object\n Description: Configuração rica do header visual da seção, com suporte a avatar por imagem, iniciais ou modo automático.\n - Path: sections[].sectionHeader.mode\n Category: layout\n Kind: enum\n Description: Estratégia visual do header da seção.\n - Path: sections[].sectionHeader.sourceField\n Category: layout\n Kind: string\n Description: Campo do formulário usado como origem da imagem do avatar.\n - Path: sections[].sectionHeader.initialsSourceField\n Category: layout\n Kind: string\n Description: Campo textual usado para derivar iniciais do avatar.\n - Path: sections[].sectionHeader.altField\n Category: layout\n Kind: string\n Description: Campo textual usado como texto acessivel do avatar e como fallback textual para iniciais quando initialsSourceField nao estiver definido.\n - Path: sections[].sectionHeader.fallbackIcon\n Category: layout\n Kind: string\n Description: Ãcone opcional usado quando o avatar dinâmico estiver vazio ou inválido.\n - Path: sections[].sectionHeader.emptyState\n Category: layout\n Kind: enum\n Description: Comportamento do header quando os campos de origem ainda não possuem valor.\n - Path: sections[].sectionHeader.size\n Category: layout\n Kind: enum\n Description: Tamanho semântico do avatar da seção, materializado pelo runtime via tokens.\n - Path: sections[].sectionHeader.initialsMaxLength\n Category: layout\n Kind: number\n Description: Máximo de letras exibidas no avatar textual.\n - Path: sections[].collapsible\n Category: layout\n Kind: boolean\n Description: Define se a seção pode ser colapsada/expandida pelo usuário.\n - Path: sections[].collapsed\n Category: layout\n Kind: boolean\n Description: Estado inicial da seção (colapsada/expandida) quando `collapsible` é true.\n - Path: sections[].gapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após a seção.\n - Path: sections[].titleGapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) abaixo do tÃtulo da seção.\n - Path: sections[].descriptionGapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) abaixo da descrição da seção.\n - Path: sections[].appearance\n Category: appearance\n Kind: enum\n Description: Preset visual do container/cabeçalho da seção.\n - Path: sections[].stepLabel\n Category: content\n Kind: string\n Description: Rótulo curto do passo exibido antes do tÃtulo da seção.\n - Path: sections[].titleStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para o tÃtulo da seção.\n - Path: sections[].descriptionStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para a descrição da seção.\n - Path: sections[].titleColor\n Category: appearance\n Kind: string\n Description: Cor do tÃtulo da seção (CSS color ou token).\n - Path: sections[].descriptionColor\n Category: appearance\n Kind: string\n Description: Cor da descrição da seção (CSS color ou token).\n - Path: sections[].headerAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento horizontal do conteúdo do cabeçalho da seção.\n - Path: sections[].headerTooltip\n Category: layout\n Kind: string\n Description: Texto de tooltip para o cabeçalho da seção.\n - Path: sections[].headerActions\n Category: layout\n Kind: array\n Description: Lista de ações iconográficas renderizadas no canto direito do cabeçalho da seção.\n - Path: sections[].headerActions[].id\n Category: layout\n Kind: string\n Description: ID estável da ação de cabeçalho da seção.\n - Path: sections[].headerActions[].label\n Category: layout\n Kind: string\n Description: Label acessÃvel usada em tooltip e aria-label da ação.\n - Path: sections[].headerActions[].icon\n Category: layout\n Kind: string\n Description: Ãcone renderizado na ação do cabeçalho da seção.\n - Path: sections[].headerActions[].action\n Category: layout\n Kind: string\n Description: Nome opcional da ação emitida no customAction; se ausente, o runtime usa o ID.\n - Path: sections[].headerActions[].tooltip\n Category: layout\n Kind: string\n Description: Tooltip opcional da ação; se ausente, o runtime usa a label.\n - Path: sections[].headerActions[].color\n Category: appearance\n Kind: enum\n Description: Tom visual da ação do cabeçalho da seção.\n - Path: sections[].headerActions[].visible\n Category: layout\n Kind: boolean\n Description: Controla a visibilidade da ação do cabeçalho da seção.\n - Path: sections[].headerActions[].disabled\n Category: layout\n Kind: boolean\n Description: Controla o estado desabilitado da ação do cabeçalho da seção.\n - Path: sections[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da seção.\n - Path: sections[].styles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da seção.\n - Path: sections[].rows[].id\n Category: layout\n Kind: string\n Description: ID único da linha dentro de uma seção.\n - Path: sections[].rows[].title\n Category: layout\n Kind: string\n Description: TÃtulo interno da linha (usado em editores e labels).\n - Path: sections[].rows[].gap\n Category: layout\n Kind: number\n Description: Espaçamento horizontal (em px) entre colunas nesta linha.\n - Path: sections[].rows[].rowGap\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após esta linha.\n - Path: sections[].rows[].columns[].id\n Category: layout\n Kind: string\n Description: ID único da coluna dentro de uma linha.\n - Path: sections[].rows[].columns[].title\n Category: layout\n Kind: string\n Description: TÃtulo interno da coluna (usado em editores e labels).\n - Path: sections[].rows[].columns[].testId\n Category: layout\n Kind: string\n Description: Atributo data-testid aplicado ao container da coluna.\n - Path: sections[].rows[].columns[].fields\n Category: layout\n Kind: array\n Description: Projeção legada/derivada dos itens kind:\"field\" dentro da coluna.\n - Path: sections[].rows[].columns[].fields[]\n Category: layout\n Kind: string\n Description: Nome do campo dentro da projeção legada/derivada da coluna.\n - Path: sections[].rows[].columns[].items\n Category: layout\n Kind: array\n Description: Lista canônica ordenada de itens da coluna: campos e blocos visuais.\n - Path: sections[].rows[].columns[].items[].kind\n Category: layout\n Kind: enum\n Description: Tipo do item de layout da coluna.\n - Path: sections[].rows[].columns[].items[].id\n Category: layout\n Kind: string\n Description: ID estável do item de layout dentro do formulário.\n - Path: sections[].rows[].columns[].items[].fieldName\n Category: layout\n Kind: string\n Description: Nome do campo quando kind é \"field\".\n - Path: sections[].rows[].columns[].items[].document\n Category: editorial\n Kind: object\n Description: RichContentDocument do bloco visual quando kind é \"richContent\".\n - Path: sections[].rows[].columns[].items[].layout\n Category: editorial\n Kind: enum\n Description: Modo de renderização do bloco visual richContent dentro da coluna.\n - Path: sections[].rows[].columns[].items[].rootClassName\n Category: appearance\n Kind: string\n Description: Classe CSS opcional aplicada ao bloco visual richContent.\n - Path: sections[].rows[].columns[].span.xs\n Category: layout\n Kind: number\n Description: Largura da coluna para telas extra pequenas (xs) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.sm\n Category: layout\n Kind: number\n Description: Largura da coluna para telas pequenas (sm) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.md\n Category: layout\n Kind: number\n Description: Largura da coluna para telas médias (md) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.lg\n Category: layout\n Kind: number\n Description: Largura da coluna para telas grandes (lg) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.xl\n Category: layout\n Kind: number\n Description: Largura da coluna para telas extra grandes (xl) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.xs\n Category: layout\n Kind: number\n Description: Offset da coluna para telas extra pequenas (xs) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.sm\n Category: layout\n Kind: number\n Description: Offset da coluna para telas pequenas (sm) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.md\n Category: layout\n Kind: number\n Description: Offset da coluna para telas médias (md) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.lg\n Category: layout\n Kind: number\n Description: Offset da coluna para telas grandes (lg) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.xl\n Category: layout\n Kind: number\n Description: Offset da coluna para telas extra grandes (xl) no grid system (1-12).\n - Path: sections[].rows[].columns[].order.xs\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas extra pequenas (xs).\n - Path: sections[].rows[].columns[].order.sm\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas pequenas (sm).\n - Path: sections[].rows[].columns[].order.md\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas médias (md).\n - Path: sections[].rows[].columns[].order.lg\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas grandes (lg).\n - Path: sections[].rows[].columns[].order.xl\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas extra grandes (xl).\n - Path: sections[].rows[].columns[].hidden.xs\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra pequenas (xs).\n - Path: sections[].rows[].columns[].hidden.sm\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas pequenas (sm).\n - Path: sections[].rows[].columns[].hidden.md\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas médias (md).\n - Path: sections[].rows[].columns[].hidden.lg\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas grandes (lg).\n - Path: sections[].rows[].columns[].hidden.xl\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra grandes (xl).\n - Path: sections[].rows[].columns[].align\n Category: layout\n Kind: enum\n Description: Alinhamento vertical do conteúdo da coluna.\n - Path: sections[].rows[].columns[].padding\n Category: layout\n Kind: number\n Description: Padding (em px) interno da coluna.\n - Path: sections[].rows[].columns[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada à coluna.\n - Path: actions.submit.id\n Category: actions\n Kind: string\n Description: ID do botão de submissão.\n - Path: actions.submit.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de submissão.\n - Path: actions.submit.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de submissão.\n - Path: actions.submit.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de submissão.\n - Path: actions.submit.color\n Category: actions\n Kind: enum\n Description: Cor do botão de submissão.\n - Path: actions.submit.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de submissão.\n - Path: actions.submit.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de submissão.\n - Path: actions.submit.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de submissão.\n - Path: actions.submit.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de submissão.\n - Path: actions.submit.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de submissão.\n - Path: actions.submit.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de submissão.\n - Path: actions.submit.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.submit.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de submissão.\n - Path: actions.submit.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de submissão.\n - Path: actions.submit.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"ctrl+s\") para o botão de submissão.\n - Path: actions.cancel.id\n Category: actions\n Kind: string\n Description: ID do botão de cancelar.\n - Path: actions.cancel.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de cancelar.\n - Path: actions.cancel.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de cancelar.\n - Path: actions.cancel.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de cancelar.\n - Path: actions.cancel.color\n Category: actions\n Kind: enum\n Description: Cor do botão de cancelar.\n - Path: actions.cancel.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de cancelar.\n - Path: actions.cancel.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de cancelar.\n - Path: actions.cancel.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de cancelar.\n - Path: actions.cancel.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de cancelar.\n - Path: actions.cancel.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de cancelar.\n - Path: actions.cancel.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de cancelar.\n - Path: actions.cancel.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.cancel.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de cancelar.\n - Path: actions.cancel.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de cancelar.\n - Path: actions.cancel.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"esc\") para o botão de cancelar.\n - Path: actions.reset.id\n Category: actions\n Kind: string\n Description: ID do botão de reset.\n - Path: actions.reset.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de reset.\n - Path: actions.reset.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de reset.\n - Path: actions.reset.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de reset.\n - Path: actions.reset.color\n Category: actions\n Kind: enum\n Description: Cor do botão de reset.\n - Path: actions.reset.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de reset.\n - Path: actions.reset.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de reset.\n - Path: actions.reset.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de reset.\n - Path: actions.reset.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de reset.\n - Path: actions.reset.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de reset.\n - Path: actions.reset.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de reset.\n - Path: actions.reset.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.reset.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de reset.\n - Path: actions.reset.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de reset.\n - Path: actions.reset.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"ctrl+shift+r\") para o botão de reset.\n - Path: actions.custom\n Category: actions\n Kind: array\n Description: Lista de botões de ação customizados.\n - Path: actions.custom[]\n Category: actions\n Kind: object\n Description: Configuração de um botão de ação customizado.\n - Path: actions.custom[].id\n Category: actions\n Kind: string\n Description: ID da ação customizada.\n - Path: actions.custom[].visible\n Category: actions\n Kind: boolean\n Description: Visibilidade da ação customizada.\n - Path: actions.custom[].label\n Category: actions\n Kind: string\n Description: Rótulo da ação customizada.\n - Path: actions.custom[].icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para a ação customizada.\n - Path: actions.custom[].color\n Category: actions\n Kind: enum\n Description: Cor da ação customizada.\n - Path: actions.custom[].variant\n Category: actions\n Kind: enum\n Description: Variante visual da ação customizada.\n - Path: actions.custom[].size\n Category: actions\n Kind: enum\n Description: Tamanho da ação customizada.\n - Path: actions.custom[].className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada à ação customizada.\n - Path: actions.custom[].style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados à ação customizada.\n - Path: actions.custom[].disabled\n Category: actions\n Kind: boolean\n Description: Desabilita a ação customizada.\n - Path: actions.custom[].type\n Category: actions\n Kind: enum\n Description: Tipo do botão da ação customizada.\n - Path: actions.custom[].action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.custom[].tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido na ação customizada.\n - Path: actions.custom[].loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento na ação customizada.\n - Path: actions.custom[].shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado para a ação customizada.\n - Path: actions.position\n Category: layout\n Kind: enum\n Description: Posicionamento horizontal da barra de ações.\n - Path: actions.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões dentro da barra de ações (horizontal/vertical).\n - Path: actions.spacing\n Category: layout\n Kind: enum\n Description: Espaçamento entre os botões na barra de ações.\n - Path: actions.sticky\n Category: layout\n Kind: boolean\n Description: Define se a barra de ações deve permanecer visÃvel ao rolar a página.\n - Path: actions.divider\n Category: layout\n Kind: boolean\n Description: Exibe um divisor superior acima da barra de ações.\n - Path: actions.placement\n Category: layout\n Kind: enum\n Description: Localização estrutural da barra de ações no layout.\n - Path: actions.mobile.position\n Category: layout\n Kind: enum\n Description: Posicionamento da barra de ações em dispositivos móveis.\n - Path: actions.mobile.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões em dispositivos móveis.\n - Path: actions.mobile.collapseToMenu\n Category: behavior\n Kind: boolean\n Description: Em mobile, agrupa ações em um menu (se houver muitas).\n - Path: actions.containerClassName\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da barra de ações.\n - Path: actions.containerStyles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da barra de ações.\n - Path: actions.showSaveButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de submit.\n - Path: actions.submitButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de submit.\n - Path: actions.showCancelButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de cancel.\n - Path: actions.cancelButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de cancel.\n - Path: actions.showResetButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de reset.\n - Path: actions.resetButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de reset.\n - Path: behavior.confirmOnUnsavedChanges\n Category: behavior\n Kind: boolean\n Description: Exibe um alerta se o usuário tentar sair com mudanças não salvas.\n - Path: behavior.trackHistory\n Category: behavior\n Kind: boolean\n Description: Habilita rastreamento de histórico para desfazer/refazer (se suportado).\n - Path: behavior.focusFirstError\n Category: behavior\n Kind: boolean\n Description: Ao submeter, foca automaticamente no primeiro campo com erro.\n - Path: behavior.scrollToErrors\n Category: behavior\n Kind: boolean\n Description: Ao submeter, rola a página para exibir o primeiro erro.\n - Path: behavior.clearAfterSave\n Category: behavior\n Kind: boolean\n Description: Limpa o formulário após uma submissão bem-sucedida.\n - Path: behavior.redirectAfterSave\n Category: behavior\n Kind: string\n Description: URL para redirecionar após uma submissão bem-sucedida.\n - Path: behavior.reactiveValidation\n Category: validation\n Kind: boolean\n Description: Ativa validação reativa (em tempo real) em `valueChanges`.\n - Path: behavior.reactiveValidationDebounceMs\n Category: validation\n Kind: number\n Description: Debounce (em ms) para a validação reativa.\n - Path: api.saveEndpoint\n Category: api\n Kind: string\n Description: URL para onde os dados do formulário serão enviados (POST/PUT/PATCH).\n - Path: api.loadEndpoint\n Category: api\n Kind: string\n Description: URL para buscar dados para popular o formulário (GET).\n - Path: api.saveMethod\n Category: api\n Kind: enum\n Description: Método HTTP para a requisição de salvar.\n - Path: api.timeout\n Category: api\n Kind: number\n Description: Tempo limite (em ms) para as requisições API.\n - Path: api.headers\n Category: api\n Kind: object\n Description: Cabeçalhos HTTP personalizados para as requisições API.\n - Path: api.idField\n Category: api\n Kind: string\n Description: Nome do campo que representa o ID do registro no payload (para PUT/PATCH).\n - Path: api.beforeSave\n Category: hooks\n Kind: expression\n Description: Hook para pré-processamento de dados antes de enviar para a API.\n - Path: api.afterLoad\n Category: hooks\n Kind: expression\n Description: Hook para pós-processamento de dados após carregar da API.\n - Path: messages.updateRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após atualização de registro.\n - Path: messages.createRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após criação de registro.\n - Path: messages.updateRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após atualização de registro.\n - Path: messages.createRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após criação de registro.\n - Path: messages.confirmations.submit\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de submeter o formulário.\n - Path: messages.confirmations.cancel\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de cancelar.\n - Path: messages.confirmations.reset\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de resetar o formulário.\n - Path: messages.confirmations.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para ações customizadas. Substitua `[actionId]` pelo ID da ação.\n - Path: messages.customActions.[actionId]\n Category: messages\n Kind: object\n Description: Mensagens da ação customizada (success/error/confirmation). Substitua `[actionId]` pelo ID da ação.\n - Path: messages.customActions.[actionId].success\n Category: messages\n Kind: string\n Description: Mensagem de sucesso para a ação customizada.\n - Path: messages.customActions.[actionId].error\n Category: messages\n Kind: string\n Description: Mensagem de erro para a ação customizada.\n - Path: messages.customActions.[actionId].confirmation\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para a ação customizada.\n - Path: messages.loading.submit\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o envio do formulário.\n - Path: messages.loading.cancel\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o cancelamento.\n - Path: messages.loading.reset\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o reset do formulário.\n - Path: messages.loading.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem exibida durante a execução de uma ação customizada. Substitua `[actionId]` pelo ID da ação.\n - Path: formRules[].id\n Category: rules\n Kind: string\n Description: ID único da regra de layout.\n - Path: formRules[].name\n Category: rules\n Kind: string\n Description: Nome amigável da regra de layout.\n - Path: formRules[].description\n Category: rules\n Kind: string\n Description: Descrição da regra de layout para documentação.\n - Path: formRules[].metadata.origin\n Category: rules\n Kind: enum\n Description: Origem da regra sugerida pela IA.\n - Path: formRules[].metadata.reviewStatus\n Category: rules\n Kind: enum\n Description: Status de revisão humana da regra sugerida pela IA.\n - Path: formRules[].targetType\n Category: rules\n Kind: enum\n Description: Tipo do elemento alvo da regra (campo, seção, ação, linha, coluna ou bloco visual).\n - Path: formRules[].context\n Category: rules\n Kind: enum\n Description: Contexto legado da regra (quando properties não forem informadas).\n - Path: formRules[].targets\n Category: rules\n Kind: array\n Description: Lista de IDs dos elementos alvo da regra. O tipo do ID depende de `targetType`.\n - Path: formRules[].targets[]\n Category: rules\n Kind: string\n Description: ID do alvo da regra.\n - Path: formRules[].targetFields\n Category: rules\n Kind: array\n Description: Alias legado para alvos de campo.\n - Path: formRules[].targetFields[]\n Category: rules\n Kind: string\n Description: ID do campo alvo (alias legado).\n - Path: formRules[].effect.condition\n Category: rules\n Kind: expression\n Description: Condicao canonica da regra, expressa em Json Logic.\n - Path: formCommandRules\n Category: rules\n Kind: array\n Description: Regras condicionais de comando avaliadas depois que formRules estabilizam valores calculados.\n - Path: formCommandRules[].condition\n Category: rules\n Kind: expression\n Description: Condicao Json Logic avaliada sobre formData estabilizado, incluindo field values calculados.\n - Path: formCommandRules[].effects[].kind\n Category: rules\n Kind: enum\n Description: Tipo do efeito de comando. O primeiro corte suporta apenas global-action.\n - Path: formCommandRules[].effects[].globalAction\n Category: rules\n Kind: object\n Description: GlobalActionRef estruturado executado por GlobalActionService.executeRef quando a regra entra na condicao.\n - Path: formCommandRules[].policy\n Category: rules\n Kind: object\n Description: Politica operacional do comando: trigger, distinct, distinctBy, debounceMs, errorPolicy e runOnInitialEvaluation.\n - Path: formRulesState\n Category: rules\n Kind: object\n Description: Estado interno do builder de regras (metadados visuais).\n - Path: hooks\n Category: hooks\n Kind: object\n Description: Declarações de hooks por estágio do ciclo de vida do formulário.\n - Path: hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeInit.\n - Path: hooks.beforeInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterInit.\n - Path: hooks.afterInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeValidate.\n - Path: hooks.beforeValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterValidate.\n - Path: hooks.afterValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeSubmit.\n - Path: hooks.beforeSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterSubmit.\n - Path: hooks.afterSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.onError[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para onError.\n - Path: hooks.onError[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.onError[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.onError[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.onError[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hints.dataModes.create\n Category: form_config\n Kind: string\n Description: Dica para o modo de criação de dados.\n - Path: hints.dataModes.edit\n Category: form_config\n Kind: string\n Description: Dica para o modo de edição de dados.\n - Path: hints.dataModes.view\n Category: form_config\n Kind: string\n Description: Dica para o modo de visualização de dados.\n - Path: hints.uiModes.presentation\n Category: form_config\n Kind: string\n Description: Dica para o modo de apresentação da UI.\n - Path: hints.uiModes.readonly\n Category: form_config\n Kind: string\n Description: Dica para o modo de somente leitura da UI.\n - Path: hints.uiModes.disabled\n Category: form_config\n Kind: string\n Description: Dica para o modo desabilitado da UI.\n - Path: hints.uiModes.visible\n Category: form_config\n Kind: string\n Description: Dica para o modo de visibilidade da UI.\n - Path: fieldMetadata[].id\n Category: identity\n Kind: string\n Description: Identificador unico da instancia do componente.\n - Path: fieldMetadata[].version\n Category: identity\n Kind: string\n Description: Versao do schema de metadata (migracao).\n - Path: fieldMetadata[].context\n Category: identity\n Kind: enum\n Description: Contexto de uso do componente (form/filter/table/dialog/standalone).\n - Path: fieldMetadata[].createdAt\n Category: misc\n Kind: string\n Description: Timestamp de criacao (ISO).\n - Path: fieldMetadata[].updatedAt\n Category: misc\n Kind: string\n Description: Timestamp de atualizacao (ISO).\n - Path: fieldMetadata[].tags\n Category: identity\n Kind: array\n Description: Tags para categorizacao e busca.\n - Path: fieldMetadata[].cssClass\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao host do componente.\n - Path: fieldMetadata[].style\n Category: appearance\n Kind: object\n Description: Estilos inline (objeto CSS).\n - Path: fieldMetadata[].dataAttributes\n Category: data\n Kind: object\n Description: Data attributes para teste/analytics.\n - Path: fieldMetadata[].name\n Category: identity\n Kind: string\n Description: Identificador único do campo. Essencial para binding.\n - Path: fieldMetadata[].label\n Category: identity\n Kind: string\n Description: Rótulo principal exibido para o usuário.\n - Path: fieldMetadata[].placeholder\n Category: identity\n Kind: string\n Description: Texto temporário exibido quando vazio.\n - Path: fieldMetadata[].hint\n Category: identity\n Kind: string\n Description: Texto de ajuda exibido abaixo do campo.\n - Path: fieldMetadata[].helpText\n Category: identity\n Kind: string\n Description: Texto semântico de ajuda publicado pelo schema/DTO.\n - Path: fieldMetadata[].tooltip\n Category: identity\n Kind: string\n Description: Texto exibido ao passar o mouse.\n - Path: fieldMetadata[].tooltipOnHover\n Category: identity\n Kind: boolean\n Description: Habilita apresentação do tooltip no hover quando suportado pelo renderer.\n - Path: fieldMetadata[].description\n Category: identity\n Kind: string\n Description: Descrição detalhada (usada em documentação ou helps extensos).\n - Path: fieldMetadata[].selectionMode\n Category: behavior\n Kind: enum\n Description: Semântica de seleção explícita para controles de escolha.\n - Path: fieldMetadata[].variant\n Category: appearance\n Kind: string\n Description: Variante visual/semântica do controle.\n - Path: fieldMetadata[].density\n Category: appearance\n Kind: enum\n Description: Densidade visual do shell do controle.\n - Path: fieldMetadata[].links\n Category: identity\n Kind: array\n Description: Links ricos associados ao campo, úteis em consentimentos e conteúdo legal.\n - Path: fieldMetadata[].group\n Category: identity\n Kind: string\n Description: Agrupador lógico do campo.\n - Path: fieldMetadata[].order\n Category: layout\n Kind: number\n Description: Ordem de exibição do campo.\n - Path: fieldMetadata[].width\n Category: layout\n Kind: string\n Description: Largura do campo (ex: 50%, 100px).\n - Path: fieldMetadata[].isFlex\n Category: layout\n Kind: boolean\n Description: Se true, usa flex-grow para preencher espaço.\n - Path: fieldMetadata[].controlType\n Category: behavior\n Kind: enum\n Description: Tipo do componente de UI (input, select, datepicker, etc).\n - Path: fieldMetadata[].dataType\n Category: data\n Kind: enum\n Description: Tipo de dado do campo (text, number, date, etc).\n - Path: fieldMetadata[].source\n Category: data\n Kind: enum\n Description: Origem semantica do campo. Use local para campos do host que nao vem do schema backend.\n - Path: fieldMetadata[].transient\n Category: data\n Kind: boolean\n Description: Marca o campo como temporario/local para preenchimento. O dynamic-form omite do submit por padrao.\n - Path: fieldMetadata[].submitPolicy\n Category: behavior\n Kind: enum\n Description: Politica de submit para sobrescrever o padrao 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[].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 obrigatorio (alias rapido 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 validacao 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 (funcao).\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (funcao).\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 (funcao).\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 validacao 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 validacao no validator.\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validacao no validator (ms).\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n - Path: fieldMetadata[].options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\nComponent Capabilities:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n - Path: inputs.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",
|
|
5362
|
+
"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: editorialContext\n Category: editorial\n Kind: object\n Description: Contexto editorial compartilhado entre os blocos hospedados antes/depois do formulario.\n - Path: editorialContext.[token]\n Category: editorial\n Kind: string\n Description: Valor simples exposto no contexto editorial.\n - Path: formBlocksBefore\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado antes do formulario.\n - Path: formBlocksBefore.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content.\n - Path: formBlocksBefore.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content editorial.\n - Path: formBlocksBefore.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes do formulario.\n - Path: formBlocksBefore.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes do formulario.\n - Path: formBlocksBefore.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content hospedado antes do formulario.\n - Path: formBlocksBeforeActions\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado depois das seções e antes da área principal de ações.\n - Path: formBlocksBeforeActions.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content antes das ações.\n - Path: formBlocksBeforeActions.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content antes das ações.\n - Path: formBlocksBeforeActions.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados antes da área principal de ações.\n - Path: formBlocksBeforeActions.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado antes da área principal de ações.\n - Path: formBlocksBeforeActions.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content antes das ações.\n - Path: formBlocksAfter\n Category: editorial\n Kind: object\n Description: RichContentDocument renderizado depois do formulario inteiro, incluindo a área principal de ações.\n - Path: formBlocksAfter.kind\n Category: editorial\n Kind: string\n Description: Kind canonico do documento rich content de fechamento.\n - Path: formBlocksAfter.version\n Category: editorial\n Kind: string\n Description: Versao do documento rich content de fechamento.\n - Path: formBlocksAfter.nodes\n Category: editorial\n Kind: array\n Description: Lista de RichBlockNode renderizados depois do formulario.\n - Path: formBlocksAfter.nodes[]\n Category: editorial\n Kind: object\n Description: RichBlockNode editorial hospedado depois do formulario.\n - Path: formBlocksAfter.context\n Category: editorial\n Kind: object\n Description: Contexto base opcional do documento rich content de fechamento.\n - Path: sections[].id\n Category: layout\n Kind: string\n Description: ID único da seção.\n - Path: sections[].title\n Category: layout\n Kind: string\n Description: TÃtulo exibido para cada seção do formulário.\n - Path: sections[].description\n Category: layout\n Kind: string\n Description: Descrição auxiliar exibida abaixo do tÃtulo da seção.\n - Path: sections[].icon\n Category: layout\n Kind: string\n Description: Nome do Ãcone (Material Icons) para o cabeçalho da seção.\n - Path: sections[].sectionHeader\n Category: layout\n Kind: object\n Description: Configuração rica do header visual da seção, com suporte a avatar por imagem, iniciais ou modo automático.\n - Path: sections[].sectionHeader.mode\n Category: layout\n Kind: enum\n Description: Estratégia visual do header da seção.\n - Path: sections[].sectionHeader.sourceField\n Category: layout\n Kind: string\n Description: Campo do formulário usado como origem da imagem do avatar.\n - Path: sections[].sectionHeader.initialsSourceField\n Category: layout\n Kind: string\n Description: Campo textual usado para derivar iniciais do avatar.\n - Path: sections[].sectionHeader.altField\n Category: layout\n Kind: string\n Description: Campo textual usado como texto acessivel do avatar e como fallback textual para iniciais quando initialsSourceField nao estiver definido.\n - Path: sections[].sectionHeader.fallbackIcon\n Category: layout\n Kind: string\n Description: Ãcone opcional usado quando o avatar dinâmico estiver vazio ou inválido.\n - Path: sections[].sectionHeader.emptyState\n Category: layout\n Kind: enum\n Description: Comportamento do header quando os campos de origem ainda não possuem valor.\n - Path: sections[].sectionHeader.size\n Category: layout\n Kind: enum\n Description: Tamanho semântico do avatar da seção, materializado pelo runtime via tokens.\n - Path: sections[].sectionHeader.initialsMaxLength\n Category: layout\n Kind: number\n Description: Máximo de letras exibidas no avatar textual.\n - Path: sections[].collapsible\n Category: layout\n Kind: boolean\n Description: Define se a seção pode ser colapsada/expandida pelo usuário.\n - Path: sections[].collapsed\n Category: layout\n Kind: boolean\n Description: Estado inicial da seção (colapsada/expandida) quando `collapsible` é true.\n - Path: sections[].gapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após a seção.\n - Path: sections[].titleGapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) abaixo do tÃtulo da seção.\n - Path: sections[].descriptionGapBottom\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) abaixo da descrição da seção.\n - Path: sections[].appearance\n Category: appearance\n Kind: enum\n Description: Preset visual do container/cabeçalho da seção.\n - Path: sections[].stepLabel\n Category: content\n Kind: string\n Description: Rótulo curto do passo exibido antes do tÃtulo da seção.\n - Path: sections[].titleStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para o tÃtulo da seção.\n - Path: sections[].descriptionStyle\n Category: appearance\n Kind: enum\n Description: Preset de tipografia para a descrição da seção.\n - Path: sections[].titleColor\n Category: appearance\n Kind: string\n Description: Cor do tÃtulo da seção (CSS color ou token).\n - Path: sections[].descriptionColor\n Category: appearance\n Kind: string\n Description: Cor da descrição da seção (CSS color ou token).\n - Path: sections[].headerAlign\n Category: appearance\n Kind: enum\n Description: Alinhamento horizontal do conteúdo do cabeçalho da seção.\n - Path: sections[].headerTooltip\n Category: layout\n Kind: string\n Description: Texto de tooltip para o cabeçalho da seção.\n - Path: sections[].headerActions\n Category: layout\n Kind: array\n Description: Lista de ações iconográficas renderizadas no canto direito do cabeçalho da seção.\n - Path: sections[].headerActions[].id\n Category: layout\n Kind: string\n Description: ID estável da ação de cabeçalho da seção.\n - Path: sections[].headerActions[].label\n Category: layout\n Kind: string\n Description: Label acessÃvel usada em tooltip e aria-label da ação.\n - Path: sections[].headerActions[].icon\n Category: layout\n Kind: string\n Description: Ãcone renderizado na ação do cabeçalho da seção.\n - Path: sections[].headerActions[].action\n Category: layout\n Kind: string\n Description: Nome opcional da ação emitida no customAction; se ausente, o runtime usa o ID.\n - Path: sections[].headerActions[].tooltip\n Category: layout\n Kind: string\n Description: Tooltip opcional da ação; se ausente, o runtime usa a label.\n - Path: sections[].headerActions[].color\n Category: appearance\n Kind: enum\n Description: Tom visual da ação do cabeçalho da seção.\n - Path: sections[].headerActions[].visible\n Category: layout\n Kind: boolean\n Description: Controla a visibilidade da ação do cabeçalho da seção.\n - Path: sections[].headerActions[].disabled\n Category: layout\n Kind: boolean\n Description: Controla o estado desabilitado da ação do cabeçalho da seção.\n - Path: sections[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da seção.\n - Path: sections[].styles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da seção.\n - Path: sections[].rows[].id\n Category: layout\n Kind: string\n Description: ID único da linha dentro de uma seção.\n - Path: sections[].rows[].title\n Category: layout\n Kind: string\n Description: TÃtulo interno da linha (usado em editores e labels).\n - Path: sections[].rows[].gap\n Category: layout\n Kind: number\n Description: Espaçamento horizontal (em px) entre colunas nesta linha.\n - Path: sections[].rows[].rowGap\n Category: layout\n Kind: number\n Description: Espaçamento vertical (em px) após esta linha.\n - Path: sections[].rows[].columns[].id\n Category: layout\n Kind: string\n Description: ID único da coluna dentro de uma linha.\n - Path: sections[].rows[].columns[].title\n Category: layout\n Kind: string\n Description: TÃtulo interno da coluna (usado em editores e labels).\n - Path: sections[].rows[].columns[].testId\n Category: layout\n Kind: string\n Description: Atributo data-testid aplicado ao container da coluna.\n - Path: sections[].rows[].columns[].fields\n Category: layout\n Kind: array\n Description: Projeção legada/derivada dos itens kind:\"field\" dentro da coluna.\n - Path: sections[].rows[].columns[].fields[]\n Category: layout\n Kind: string\n Description: Nome do campo dentro da projeção legada/derivada da coluna.\n - Path: sections[].rows[].columns[].items\n Category: layout\n Kind: array\n Description: Lista canônica ordenada de itens da coluna: campos e blocos visuais.\n - Path: sections[].rows[].columns[].items[].kind\n Category: layout\n Kind: enum\n Description: Tipo do item de layout da coluna.\n - Path: sections[].rows[].columns[].items[].id\n Category: layout\n Kind: string\n Description: ID estável do item de layout dentro do formulário.\n - Path: sections[].rows[].columns[].items[].fieldName\n Category: layout\n Kind: string\n Description: Nome do campo quando kind é \"field\".\n - Path: sections[].rows[].columns[].items[].document\n Category: editorial\n Kind: object\n Description: RichContentDocument do bloco visual quando kind é \"richContent\".\n - Path: sections[].rows[].columns[].items[].layout\n Category: editorial\n Kind: enum\n Description: Modo de renderização do bloco visual richContent dentro da coluna.\n - Path: sections[].rows[].columns[].items[].rootClassName\n Category: appearance\n Kind: string\n Description: Classe CSS opcional aplicada ao bloco visual richContent.\n - Path: sections[].rows[].columns[].span.xs\n Category: layout\n Kind: number\n Description: Largura da coluna para telas extra pequenas (xs) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.sm\n Category: layout\n Kind: number\n Description: Largura da coluna para telas pequenas (sm) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.md\n Category: layout\n Kind: number\n Description: Largura da coluna para telas médias (md) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.lg\n Category: layout\n Kind: number\n Description: Largura da coluna para telas grandes (lg) no grid system (1-12).\n - Path: sections[].rows[].columns[].span.xl\n Category: layout\n Kind: number\n Description: Largura da coluna para telas extra grandes (xl) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.xs\n Category: layout\n Kind: number\n Description: Offset da coluna para telas extra pequenas (xs) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.sm\n Category: layout\n Kind: number\n Description: Offset da coluna para telas pequenas (sm) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.md\n Category: layout\n Kind: number\n Description: Offset da coluna para telas médias (md) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.lg\n Category: layout\n Kind: number\n Description: Offset da coluna para telas grandes (lg) no grid system (1-12).\n - Path: sections[].rows[].columns[].offset.xl\n Category: layout\n Kind: number\n Description: Offset da coluna para telas extra grandes (xl) no grid system (1-12).\n - Path: sections[].rows[].columns[].order.xs\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas extra pequenas (xs).\n - Path: sections[].rows[].columns[].order.sm\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas pequenas (sm).\n - Path: sections[].rows[].columns[].order.md\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas médias (md).\n - Path: sections[].rows[].columns[].order.lg\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas grandes (lg).\n - Path: sections[].rows[].columns[].order.xl\n Category: layout\n Kind: number\n Description: Ordem visual da coluna para telas extra grandes (xl).\n - Path: sections[].rows[].columns[].hidden.xs\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra pequenas (xs).\n - Path: sections[].rows[].columns[].hidden.sm\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas pequenas (sm).\n - Path: sections[].rows[].columns[].hidden.md\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas médias (md).\n - Path: sections[].rows[].columns[].hidden.lg\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas grandes (lg).\n - Path: sections[].rows[].columns[].hidden.xl\n Category: layout\n Kind: boolean\n Description: Oculta a coluna para telas extra grandes (xl).\n - Path: sections[].rows[].columns[].align\n Category: layout\n Kind: enum\n Description: Alinhamento vertical do conteúdo da coluna.\n - Path: sections[].rows[].columns[].padding\n Category: layout\n Kind: number\n Description: Padding (em px) interno da coluna.\n - Path: sections[].rows[].columns[].className\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada à coluna.\n - Path: actions.submit.id\n Category: actions\n Kind: string\n Description: ID do botão de submissão.\n - Path: actions.submit.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de submissão.\n - Path: actions.submit.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de submissão.\n - Path: actions.submit.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de submissão.\n - Path: actions.submit.color\n Category: actions\n Kind: enum\n Description: Cor do botão de submissão.\n - Path: actions.submit.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de submissão.\n - Path: actions.submit.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de submissão.\n - Path: actions.submit.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de submissão.\n - Path: actions.submit.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de submissão.\n - Path: actions.submit.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de submissão.\n - Path: actions.submit.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de submissão.\n - Path: actions.submit.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.submit.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de submissão.\n - Path: actions.submit.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de submissão.\n - Path: actions.submit.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"ctrl+s\") para o botão de submissão.\n - Path: actions.cancel.id\n Category: actions\n Kind: string\n Description: ID do botão de cancelar.\n - Path: actions.cancel.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de cancelar.\n - Path: actions.cancel.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de cancelar.\n - Path: actions.cancel.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de cancelar.\n - Path: actions.cancel.color\n Category: actions\n Kind: enum\n Description: Cor do botão de cancelar.\n - Path: actions.cancel.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de cancelar.\n - Path: actions.cancel.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de cancelar.\n - Path: actions.cancel.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de cancelar.\n - Path: actions.cancel.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de cancelar.\n - Path: actions.cancel.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de cancelar.\n - Path: actions.cancel.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de cancelar.\n - Path: actions.cancel.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.cancel.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de cancelar.\n - Path: actions.cancel.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de cancelar.\n - Path: actions.cancel.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"esc\") para o botão de cancelar.\n - Path: actions.reset.id\n Category: actions\n Kind: string\n Description: ID do botão de reset.\n - Path: actions.reset.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botão de reset.\n - Path: actions.reset.label\n Category: actions\n Kind: string\n Description: Rótulo do botão de reset.\n - Path: actions.reset.icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para o botão de reset.\n - Path: actions.reset.color\n Category: actions\n Kind: enum\n Description: Cor do botão de reset.\n - Path: actions.reset.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botão de reset.\n - Path: actions.reset.size\n Category: actions\n Kind: enum\n Description: Tamanho do botão de reset.\n - Path: actions.reset.className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada ao botão de reset.\n - Path: actions.reset.style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados ao botão de reset.\n - Path: actions.reset.disabled\n Category: actions\n Kind: boolean\n Description: Desabilita o botão de reset.\n - Path: actions.reset.type\n Category: actions\n Kind: enum\n Description: Tipo do botão de reset.\n - Path: actions.reset.action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.reset.tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido no botão de reset.\n - Path: actions.reset.loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento no botão de reset.\n - Path: actions.reset.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado (ex.: \"ctrl+shift+r\") para o botão de reset.\n - Path: actions.custom\n Category: actions\n Kind: array\n Description: Lista de botões de ação customizados.\n - Path: actions.custom[]\n Category: actions\n Kind: object\n Description: Configuração de um botão de ação customizado.\n - Path: actions.custom[].id\n Category: actions\n Kind: string\n Description: ID da ação customizada.\n - Path: actions.custom[].visible\n Category: actions\n Kind: boolean\n Description: Visibilidade da ação customizada.\n - Path: actions.custom[].label\n Category: actions\n Kind: string\n Description: Rótulo da ação customizada.\n - Path: actions.custom[].icon\n Category: actions\n Kind: string\n Description: Ãcone (Material Icons) para a ação customizada.\n - Path: actions.custom[].color\n Category: actions\n Kind: enum\n Description: Cor da ação customizada.\n - Path: actions.custom[].variant\n Category: actions\n Kind: enum\n Description: Variante visual da ação customizada.\n - Path: actions.custom[].size\n Category: actions\n Kind: enum\n Description: Tamanho da ação customizada.\n - Path: actions.custom[].className\n Category: actions\n Kind: string\n Description: Classe CSS aplicada à ação customizada.\n - Path: actions.custom[].style\n Category: actions\n Kind: object\n Description: Estilos inline aplicados à ação customizada.\n - Path: actions.custom[].disabled\n Category: actions\n Kind: boolean\n Description: Desabilita a ação customizada.\n - Path: actions.custom[].type\n Category: actions\n Kind: enum\n Description: Tipo do botão da ação customizada.\n - Path: actions.custom[].action\n Category: actions\n Kind: string\n Description: Evento customizado disparado ao clicar.\n - Path: actions.custom[].tooltip\n Category: actions\n Kind: string\n Description: Tooltip exibido na ação customizada.\n - Path: actions.custom[].loading\n Category: actions\n Kind: boolean\n Description: Exibe estado de carregamento na ação customizada.\n - Path: actions.custom[].shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado para a ação customizada.\n - Path: actions.position\n Category: layout\n Kind: enum\n Description: Posicionamento horizontal da barra de ações.\n - Path: actions.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões dentro da barra de ações (horizontal/vertical).\n - Path: actions.spacing\n Category: layout\n Kind: enum\n Description: Espaçamento entre os botões na barra de ações.\n - Path: actions.sticky\n Category: layout\n Kind: boolean\n Description: Define se a barra de ações deve permanecer visÃvel ao rolar a página.\n - Path: actions.divider\n Category: layout\n Kind: boolean\n Description: Exibe um divisor superior acima da barra de ações.\n - Path: actions.placement\n Category: layout\n Kind: enum\n Description: Localização estrutural da barra de ações no layout.\n - Path: actions.mobile.position\n Category: layout\n Kind: enum\n Description: Posicionamento da barra de ações em dispositivos móveis.\n - Path: actions.mobile.orientation\n Category: layout\n Kind: enum\n Description: Orientação dos botões em dispositivos móveis.\n - Path: actions.mobile.collapseToMenu\n Category: behavior\n Kind: boolean\n Description: Em mobile, agrupa ações em um menu (se houver muitas).\n - Path: actions.containerClassName\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao container da barra de ações.\n - Path: actions.containerStyles\n Category: appearance\n Kind: object\n Description: Estilos inline aplicados ao container da barra de ações.\n - Path: actions.showSaveButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de submit.\n - Path: actions.submitButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de submit.\n - Path: actions.showCancelButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de cancel.\n - Path: actions.cancelButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de cancel.\n - Path: actions.showResetButton\n Category: actions\n Kind: boolean\n Description: Legacy: controla visibilidade do botão de reset.\n - Path: actions.resetButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: rótulo do botão de reset.\n - Path: behavior.confirmOnUnsavedChanges\n Category: behavior\n Kind: boolean\n Description: Exibe um alerta se o usuário tentar sair com mudanças não salvas.\n - Path: behavior.trackHistory\n Category: behavior\n Kind: boolean\n Description: Habilita rastreamento de histórico para desfazer/refazer (se suportado).\n - Path: behavior.focusFirstError\n Category: behavior\n Kind: boolean\n Description: Ao submeter, foca automaticamente no primeiro campo com erro.\n - Path: behavior.scrollToErrors\n Category: behavior\n Kind: boolean\n Description: Ao submeter, rola a página para exibir o primeiro erro.\n - Path: behavior.clearAfterSave\n Category: behavior\n Kind: boolean\n Description: Limpa o formulário após uma submissão bem-sucedida.\n - Path: behavior.redirectAfterSave\n Category: behavior\n Kind: string\n Description: URL para redirecionar após uma submissão bem-sucedida.\n - Path: behavior.reactiveValidation\n Category: validation\n Kind: boolean\n Description: Ativa validação reativa (em tempo real) em `valueChanges`.\n - Path: behavior.reactiveValidationDebounceMs\n Category: validation\n Kind: number\n Description: Debounce (em ms) para a validação reativa.\n - Path: api.saveEndpoint\n Category: api\n Kind: string\n Description: URL para onde os dados do formulário serão enviados (POST/PUT/PATCH).\n - Path: api.loadEndpoint\n Category: api\n Kind: string\n Description: URL para buscar dados para popular o formulário (GET).\n - Path: api.saveMethod\n Category: api\n Kind: enum\n Description: Método HTTP para a requisição de salvar.\n - Path: api.timeout\n Category: api\n Kind: number\n Description: Tempo limite (em ms) para as requisições API.\n - Path: api.headers\n Category: api\n Kind: object\n Description: Cabeçalhos HTTP personalizados para as requisições API.\n - Path: api.idField\n Category: api\n Kind: string\n Description: Nome do campo que representa o ID do registro no payload (para PUT/PATCH).\n - Path: api.beforeSave\n Category: hooks\n Kind: expression\n Description: Hook para pré-processamento de dados antes de enviar para a API.\n - Path: api.afterLoad\n Category: hooks\n Kind: expression\n Description: Hook para pós-processamento de dados após carregar da API.\n - Path: messages.updateRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após atualização de registro.\n - Path: messages.createRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso após criação de registro.\n - Path: messages.updateRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após atualização de registro.\n - Path: messages.createRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro após criação de registro.\n - Path: messages.confirmations.submit\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de submeter o formulário.\n - Path: messages.confirmations.cancel\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de cancelar.\n - Path: messages.confirmations.reset\n Category: messages\n Kind: string\n Description: Mensagem de confirmação antes de resetar o formulário.\n - Path: messages.confirmations.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para ações customizadas. Substitua `[actionId]` pelo ID da ação.\n - Path: messages.customActions.[actionId]\n Category: messages\n Kind: object\n Description: Mensagens da ação customizada (success/error/confirmation). Substitua `[actionId]` pelo ID da ação.\n - Path: messages.customActions.[actionId].success\n Category: messages\n Kind: string\n Description: Mensagem de sucesso para a ação customizada.\n - Path: messages.customActions.[actionId].error\n Category: messages\n Kind: string\n Description: Mensagem de erro para a ação customizada.\n - Path: messages.customActions.[actionId].confirmation\n Category: messages\n Kind: string\n Description: Mensagem de confirmação para a ação customizada.\n - Path: messages.loading.submit\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o envio do formulário.\n - Path: messages.loading.cancel\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o cancelamento.\n - Path: messages.loading.reset\n Category: messages\n Kind: string\n Description: Mensagem exibida durante o reset do formulário.\n - Path: messages.loading.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem exibida durante a execução de uma ação customizada. Substitua `[actionId]` pelo ID da ação.\n - Path: formRules[].id\n Category: rules\n Kind: string\n Description: ID único da regra de layout.\n - Path: formRules[].name\n Category: rules\n Kind: string\n Description: Nome amigável da regra de layout.\n - Path: formRules[].description\n Category: rules\n Kind: string\n Description: Descrição da regra de layout para documentação.\n - Path: formRules[].metadata.origin\n Category: rules\n Kind: enum\n Description: Origem da regra sugerida pela IA.\n - Path: formRules[].metadata.reviewStatus\n Category: rules\n Kind: enum\n Description: Status de revisão humana da regra sugerida pela IA.\n - Path: formRules[].targetType\n Category: rules\n Kind: enum\n Description: Tipo do elemento alvo da regra (campo, seção, ação, linha, coluna ou bloco visual).\n - Path: formRules[].context\n Category: rules\n Kind: enum\n Description: Contexto legado da regra (quando properties não forem informadas).\n - Path: formRules[].targets\n Category: rules\n Kind: array\n Description: Lista de IDs dos elementos alvo da regra. O tipo do ID depende de `targetType`.\n - Path: formRules[].targets[]\n Category: rules\n Kind: string\n Description: ID do alvo da regra.\n - Path: formRules[].targetFields\n Category: rules\n Kind: array\n Description: Alias legado para alvos de campo.\n - Path: formRules[].targetFields[]\n Category: rules\n Kind: string\n Description: ID do campo alvo (alias legado).\n - Path: formRules[].effect.condition\n Category: rules\n Kind: expression\n Description: Condicao canonica da regra, expressa em Json Logic.\n - Path: formCommandRules\n Category: rules\n Kind: array\n Description: Regras condicionais de comando avaliadas depois que formRules estabilizam valores calculados.\n - Path: formCommandRules[].condition\n Category: rules\n Kind: expression\n Description: Condicao Json Logic avaliada sobre formData estabilizado, incluindo field values calculados.\n - Path: formCommandRules[].effects[].kind\n Category: rules\n Kind: enum\n Description: Tipo do efeito de comando. O primeiro corte suporta apenas global-action.\n - Path: formCommandRules[].effects[].globalAction\n Category: rules\n Kind: object\n Description: GlobalActionRef estruturado executado por GlobalActionService.executeRef quando a regra entra na condicao.\n - Path: formCommandRules[].policy\n Category: rules\n Kind: object\n Description: Politica operacional do comando: trigger, distinct, distinctBy, debounceMs, errorPolicy e runOnInitialEvaluation.\n - Path: formRulesState\n Category: rules\n Kind: object\n Description: Estado interno do builder de regras (metadados visuais).\n - Path: hooks\n Category: hooks\n Kind: object\n Description: Declarações de hooks por estágio do ciclo de vida do formulário.\n - Path: hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeInit.\n - Path: hooks.beforeInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterInit.\n - Path: hooks.afterInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeValidate.\n - Path: hooks.beforeValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterValidate.\n - Path: hooks.afterValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para beforeSubmit.\n - Path: hooks.beforeSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.beforeSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.beforeSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.beforeSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para afterSubmit.\n - Path: hooks.afterSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.afterSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.afterSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.afterSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hooks.onError[]\n Category: hooks\n Kind: array\n Description: Declarações de hooks para onError.\n - Path: hooks.onError[].id\n Category: hooks\n Kind: string\n Description: ID do hook (registrado no host).\n - Path: hooks.onError[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook (maior executa primeiro).\n - Path: hooks.onError[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout em ms para a execucao do hook.\n - Path: hooks.onError[].args\n Category: hooks\n Kind: object\n Description: Argumentos adicionais passados ao hook.\n - Path: hints.dataModes.create\n Category: form_config\n Kind: string\n Description: Dica para o modo de criação de dados.\n - Path: hints.dataModes.edit\n Category: form_config\n Kind: string\n Description: Dica para o modo de edição de dados.\n - Path: hints.dataModes.view\n Category: form_config\n Kind: string\n Description: Dica para o modo de visualização de dados.\n - Path: hints.uiModes.presentation\n Category: form_config\n Kind: string\n Description: Dica para o modo de apresentação da UI.\n - Path: hints.uiModes.readonly\n Category: form_config\n Kind: string\n Description: Dica para o modo de somente leitura da UI.\n - Path: hints.uiModes.disabled\n Category: form_config\n Kind: string\n Description: Dica para o modo desabilitado da UI.\n - Path: hints.uiModes.visible\n Category: form_config\n Kind: string\n Description: Dica para o modo de visibilidade da UI.\n - Path: fieldMetadata[].id\n Category: identity\n Kind: string\n Description: Identificador unico da instancia do componente.\n - Path: fieldMetadata[].version\n Category: identity\n Kind: string\n Description: Versao do schema de metadata (migracao).\n - Path: fieldMetadata[].context\n Category: identity\n Kind: enum\n Description: Contexto de uso do componente (form/filter/table/dialog/standalone).\n - Path: fieldMetadata[].createdAt\n Category: misc\n Kind: string\n Description: Timestamp de criacao (ISO).\n - Path: fieldMetadata[].updatedAt\n Category: misc\n Kind: string\n Description: Timestamp de atualizacao (ISO).\n - Path: fieldMetadata[].tags\n Category: identity\n Kind: array\n Description: Tags para categorizacao e busca.\n - Path: fieldMetadata[].cssClass\n Category: appearance\n Kind: string\n Description: Classe CSS aplicada ao host do componente.\n - Path: fieldMetadata[].style\n Category: appearance\n Kind: object\n Description: Estilos inline (objeto CSS).\n - Path: fieldMetadata[].dataAttributes\n Category: data\n Kind: object\n Description: Data attributes para teste/analytics.\n - Path: fieldMetadata[].name\n Category: identity\n Kind: string\n Description: Identificador único do campo. Essencial para binding.\n - Path: fieldMetadata[].label\n Category: identity\n Kind: string\n Description: Rótulo principal exibido para o usuário.\n - Path: fieldMetadata[].placeholder\n Category: identity\n Kind: string\n Description: Texto temporário exibido quando vazio.\n - Path: fieldMetadata[].hint\n Category: identity\n Kind: string\n Description: Texto de ajuda exibido abaixo do campo.\n - Path: fieldMetadata[].helpText\n Category: identity\n Kind: string\n Description: Texto semântico de ajuda publicado pelo schema/DTO.\n - Path: fieldMetadata[].tooltip\n Category: identity\n Kind: string\n Description: Texto exibido ao passar o mouse.\n - Path: fieldMetadata[].tooltipOnHover\n Category: identity\n Kind: boolean\n Description: Habilita apresentação do tooltip no hover quando suportado pelo renderer.\n - Path: fieldMetadata[].description\n Category: identity\n Kind: string\n Description: Descrição detalhada (usada em documentação ou helps extensos).\n - Path: fieldMetadata[].selectionMode\n Category: behavior\n Kind: enum\n Description: Semântica de seleção explícita para controles de escolha.\n - Path: fieldMetadata[].variant\n Category: appearance\n Kind: string\n Description: Variante visual/semântica do controle.\n - Path: fieldMetadata[].density\n Category: appearance\n Kind: enum\n Description: Densidade visual do shell do controle.\n - Path: fieldMetadata[].links\n Category: identity\n Kind: array\n Description: Links ricos associados ao campo, úteis em consentimentos e conteúdo legal.\n - Path: fieldMetadata[].group\n Category: identity\n Kind: string\n Description: Agrupador lógico do campo.\n - Path: fieldMetadata[].order\n Category: layout\n Kind: number\n Description: Ordem de exibição do campo.\n - Path: fieldMetadata[].width\n Category: layout\n Kind: string\n Description: Largura do campo (ex: 50%, 100px).\n - Path: fieldMetadata[].isFlex\n Category: layout\n Kind: boolean\n Description: Se true, usa flex-grow para preencher espaço.\n - Path: fieldMetadata[].controlType\n Category: behavior\n Kind: enum\n Description: Tipo do componente de UI (input, select, datepicker, etc).\n - Path: fieldMetadata[].dataType\n Category: data\n Kind: enum\n Description: Tipo de dado do campo (text, number, date, etc).\n - Path: fieldMetadata[].source\n Category: data\n Kind: enum\n Description: Origem semântica do campo. Use local para campos do host que não vêm do schema backend.\n - Path: fieldMetadata[].transient\n Category: data\n Kind: boolean\n Description: Marca o campo como temporário/local para preenchimento. O dynamic-form omite do submit por padrão.\n - Path: fieldMetadata[].submitPolicy\n Category: behavior\n Kind: enum\n Description: Política de submit para sobrescrever o padrão de campos locais/transient.\n - Path: fieldMetadata[].materialDesign.appearance\n Category: appearance\n Kind: enum\n Description: Aparência do campo Material (fill/outline).\n - Path: fieldMetadata[].materialDesign.color\n Category: appearance\n Kind: enum\n Description: Tema de cor Material (primary/accent/warn).\n - Path: fieldMetadata[].materialDesign.floatLabel\n Category: appearance\n Kind: enum\n Description: Comportamento do rótulo flutuante.\n - Path: fieldMetadata[].materialDesign.subscriptSizing\n Category: appearance\n Kind: enum\n Description: Estratégia de sizing do subscript (erros/hints).\n - Path: fieldMetadata[].materialDesign.hideRequiredMarker\n Category: appearance\n Kind: boolean\n Description: Oculta o asterisco de campo obrigatório.\n - Path: fieldMetadata[].materialDesign.density\n Category: appearance\n Kind: enum\n Description: Densidade do campo Material.\n - Path: fieldMetadata[].materialDesign.disableRipple\n Category: appearance\n Kind: boolean\n Description: Desativa ripple/ondulação em componentes Material.\n - Path: fieldMetadata[].materialDesign.customPalette\n Category: appearance\n Kind: object\n Description: Override de paleta (primary/accent/warn).\n - Path: fieldMetadata[].materialDesign.animations\n Category: appearance\n Kind: object\n Description: Configuração de animações (disable, duration, easing).\n - Path: fieldMetadata[].prefixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido antes do valor.\n - Path: fieldMetadata[].suffixIcon\n Category: appearance\n Kind: string\n Description: Ícone exibido depois do valor.\n - Path: fieldMetadata[].iconPosition\n Category: appearance\n Kind: enum\n Description: Posição preferencial do ícone principal.\n - Path: fieldMetadata[].iconSize\n Category: appearance\n Kind: enum\n Description: Tamanho do ícone.\n - Path: fieldMetadata[].iconColor\n Category: appearance\n Kind: string\n Description: Cor semântica ou token de cor aplicado ao ícone principal.\n - Path: fieldMetadata[].iconClass\n Category: appearance\n Kind: string\n Description: Classe CSS controlada pelo host para o ícone principal.\n - Path: fieldMetadata[].iconStyle\n Category: appearance\n Kind: string\n Description: Estilo visual semântico do ícone quando o renderer suportar variações.\n - Path: fieldMetadata[].iconFontSize\n Category: appearance\n Kind: string\n Description: Tamanho tipográfico do ícone principal.\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n - Path: fieldMetadata[].options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\nComponent Capabilities:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n - Path: inputs.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",
|
|
5363
5363
|
"sourcePointer": "praxis-ui-angular/projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
|
|
5364
|
-
"contentHash": "
|
|
5364
|
+
"contentHash": "808b584a6ec3ba820522adb57e91954dfa544e0a6ad89172ca3c238e5db78ce0",
|
|
5365
5365
|
"sourceKind": "component_definition",
|
|
5366
5366
|
"sourceId": "praxis-filter-form-dialog-host",
|
|
5367
5367
|
"corpusVersion": "1.0.0"
|
|
@@ -15062,6 +15062,11 @@
|
|
|
15062
15062
|
"resolver": "empty-state-config",
|
|
15063
15063
|
"description": "Estado vazio"
|
|
15064
15064
|
},
|
|
15065
|
+
{
|
|
15066
|
+
"kind": "aiAssistant",
|
|
15067
|
+
"resolver": "ai-assistant-config",
|
|
15068
|
+
"description": "Config path ai.assistant.enabled controlling the embedded table AI assistant entrypoint and session."
|
|
15069
|
+
},
|
|
15065
15070
|
{
|
|
15066
15071
|
"kind": "resizing",
|
|
15067
15072
|
"resolver": "resizing-config",
|
|
@@ -21095,9 +21100,9 @@
|
|
|
21095
21100
|
{
|
|
21096
21101
|
"chunkIndex": 2,
|
|
21097
21102
|
"chunkKind": "authoring_manifest",
|
|
21098
|
-
"content": "{\n \"schemaVersion\": \"1.0.0\",\n \"componentId\": \"praxis-table\",\n \"ownerPackage\": \"@praxisui/table\",\n \"configSchemaId\": \"TableConfig\",\n \"manifestVersion\": \"2.0.0\",\n \"runtimeInputs\": [\n {\n \"name\": \"config\",\n \"type\": \"TableConfig\",\n \"description\": \"Configuração completa da tabela\"\n },\n {\n \"name\": \"data\",\n \"type\": \"any[]\",\n \"description\": \"Dados a serem exibidos (modo client-side)\"\n },\n {\n \"name\": \"resourcePath\",\n \"type\": \"string\",\n \"description\": \"Caminho do recurso (API base)\"\n },\n {\n \"name\": \"queryContext\",\n \"type\": \"PraxisDataQueryContext\",\n \"description\": \"Contexto de consulta declarativo\"\n },\n {\n \"name\": \"title\",\n \"type\": \"string\",\n \"description\": \"Título da tabela\"\n },\n {\n \"name\": \"subtitle\",\n \"type\": \"string\",\n \"description\": \"Subtítulo da tabela\"\n },\n {\n \"name\": \"enableCustomization\",\n \"type\": \"boolean\",\n \"description\": \"Habilita modo de edição\"\n }\n ],\n \"editableTargets\": [\n {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"description\": \"Colunas base da tabela\"\n },\n {\n \"kind\": \"computedColumn\",\n \"resolver\": \"column-by-field\",\n \"description\": \"Colunas calculadas\"\n },\n {\n \"kind\": \"renderer\",\n \"resolver\": \"renderer-in-column\",\n \"description\": \"Renderizador de célula\"\n },\n {\n \"kind\": \"conditionalRenderer\",\n \"resolver\": \"conditional-renderer-in-column\",\n \"description\": \"Renderizadores condicionais\"\n },\n {\n \"kind\": \"rowAction\",\n \"resolver\": \"action-in-row-config\",\n \"description\": \"Ações por linha\"\n },\n {\n \"kind\": \"toolbarAction\",\n \"resolver\": \"action-in-toolbar-config\",\n \"description\": \"Ações na barra de ferramentas\"\n },\n {\n \"kind\": \"toolbar\",\n \"resolver\": \"toolbar-config\",\n \"description\": \"Configuração da barra de ferramentas\"\n },\n {\n \"kind\": \"filter\",\n \"resolver\": \"filter-config\",\n \"description\": \"Configuração de filtragem\"\n },\n {\n \"kind\": \"grouping\",\n \"resolver\": \"grouping-config\",\n \"description\": \"Configuração de agrupamento\"\n },\n {\n \"kind\": \"selection\",\n \"resolver\": \"selection-config\",\n \"description\": \"Configuração de seleção\"\n },\n {\n \"kind\": \"export\",\n \"resolver\": \"export-config\",\n \"description\": \"Configuração de exportação\"\n },\n {\n \"kind\": \"appearance\",\n \"resolver\": \"appearance-config\",\n \"description\": \"Configurações visuais\"\n },\n {\n \"kind\": \"expansion\",\n \"resolver\": \"expansion-config\",\n \"description\": \"Configuração de detalhe/expansão\"\n },\n {\n \"kind\": \"rule\",\n \"resolver\": \"style-rule-in-column-or-row\",\n \"description\": \"Regras de estilo ou comportamento\"\n },\n {\n \"kind\": \"meta\",\n \"resolver\": \"table-meta-config\",\n \"description\": \"Metadados da configuracao\"\n },\n {\n \"kind\": \"bulkAction\",\n \"resolver\": \"action-in-bulk-config\",\n \"description\": \"Acoes em lote\"\n },\n {\n \"kind\": \"contextAction\",\n \"resolver\": \"action-in-context-config\",\n \"description\": \"Acoes de menu contextual\"\n },\n {\n \"kind\": \"pagination\",\n \"resolver\": \"pagination-config\",\n \"description\": \"Configuracao de paginacao\"\n },\n {\n \"kind\": \"sorting\",\n \"resolver\": \"sorting-config\",\n \"description\": \"Configuracao de ordenacao\"\n },\n {\n \"kind\": \"interaction\",\n \"resolver\": \"interaction-config\",\n \"description\": \"Configuracao de interacao\"\n },\n {\n \"kind\": \"loading\",\n \"resolver\": \"loading-config\",\n \"description\": \"Estados de carregamento\"\n },\n {\n \"kind\": \"emptyState\",\n \"resolver\": \"empty-state-config\",\n \"description\": \"Estado vazio\"\n },\n {\n \"kind\": \"resizing\",\n \"resolver\": \"resizing-config\",\n \"description\": \"Redimensionamento de colunas\"\n },\n {\n \"kind\": \"dragging\",\n \"resolver\": \"dragging-config\",\n \"description\": \"Reorganizacao por drag and drop\"\n },\n {\n \"kind\": \"editing\",\n \"resolver\": \"editing-config\",\n \"description\": \"Modo de edicao\"\n },\n {\n \"kind\": \"messages\",\n \"resolver\": \"messages-config\",\n \"description\": \"Mensagens da tabela\"\n },\n {\n \"kind\": \"localization\",\n \"resolver\": \"localization-config\",\n \"description\": \"Localizacao e formatos regionais\"\n },\n {\n \"kind\": \"performance\",\n \"resolver\": \"performance-config\",\n \"description\": \"Configuracoes de performance\"\n },\n {\n \"kind\": \"data\",\n \"resolver\": \"data-config\",\n \"description\": \"Configuracoes de dados\"\n },\n {\n \"kind\": \"runtimeOperation\",\n \"resolver\": \"table-runtime-operation-contract\",\n \"description\": \"Operacoes runtime revisaveis sem mutar a configuracao persistida\"\n },\n {\n \"kind\": \"accessibility\",\n \"resolver\": \"accessibility-config\",\n \"description\": \"Acessibilidade\"\n }\n ],\n \"operations\": [\n {\n \"operationId\": \"column.add\",\n \"title\": \"Adicionar coluna\",\n \"scope\": \"global\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"field\",\n \"header\"\n ],\n \"properties\": {\n \"field\": {\n \"type\": \"string\"\n },\n \"header\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"enum\": [\n \"string\",\n \"number\",\n \"date\",\n \"boolean\",\n \"currency\",\n \"percentage\",\n \"custom\"\n ],\n \"default\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"column-field-unique\"\n ],\n \"affectedPaths\": [\n \"columns[]\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"column.remove\",\n \"title\": \"Remover coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\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\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"destructive-removal-confirmation\"\n ],\n \"affectedPaths\": [\n \"columns[]\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.header.set\",\n \"title\": \"Definir cabeçalho\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"header\"\n ],\n \"properties\": {\n \"header\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].header\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.type.set\",\n \"title\": \"Definir tipo de dado\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {}\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].type\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.format.set\",\n \"title\": \"Definir formato\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"format\"\n ],\n \"properties\": {\n \"format\": {\n \"type\": \"string\",\n \"enum\": [\n \"shortDate\",\n \"mediumDate\",\n \"longDate\",\n \"fullDate\",\n \"MMM/yyyy\",\n \"shortTime\",\n \"short\",\n \"yyyy-MM-dd\",\n \"dd/MM/yyyy\",\n \"yyyy-MM-dd HH:mm\",\n \"1.0-0\",\n \"1.1-1\",\n \"1.2-2\",\n \"1.0-3\",\n \"1.0-0|nosep\",\n \"BRL|symbol|2\",\n \"USD|symbol|2\",\n \"EUR|symbol|2\",\n \"BRL|code|2\",\n \"USD|code|0\",\n \"BRL|symbol|2|nosep\",\n \"EUR|symbol|2|nosep\",\n \"1.0-0|x100\",\n \"1.1-1|x100\",\n \"1.2-2|x100\",\n \"none\",\n \"uppercase\",\n \"lowercase\",\n \"titlecase\",\n \"capitalize\",\n \"uppercase|truncate|50|...\",\n \"000.000.000-00\",\n \"true-false\",\n \"yes-no\",\n \"active-inactive\",\n \"on-off\",\n \"enabled-disabled\",\n \"custom|Sim|Nao\"\n ],\n \"description\": \"Preset canônico do DataFormattingService.\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"format-preset-supported\"\n ],\n \"affectedPaths\": [\n \"columns[].format\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.width.set\",\n \"title\": \"Definir largura da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"width\"\n ],\n \"properties\": {\n \"width\": {\n \"type\": \"string\",\n \"pattern\": \"^(auto|\\\\d+(px|%|rem|em))$\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"column-width-valid\"\n ],\n \"affectedPaths\": [\n \"columns[].width\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.align.set\",\n \"title\": \"Definir alinhamento da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"align\"\n ],\n \"properties\": {\n \"align\": {\n \"enum\": [\n \"left\",\n \"center\",\n \"right\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].align\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.sticky.set\",\n \"title\": \"Definir sticky da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"sticky\"\n ],\n \"properties\": {\n \"sticky\": {\n \"enum\": [\n \"start\",\n \"end\",\n true,\n false\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].sticky\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.sortable.set\",\n \"title\": \"Definir ordenação da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"sortable\"\n ],\n \"properties\": {\n \"sortable\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].sortable\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.filterable.set\",\n \"title\": \"Definir filtro da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"filterable\"\n ],\n \"properties\": {\n \"filterable\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].filterable\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.style.set\",\n \"title\": \"Definir estilo da célula\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"style\"\n ],\n \"properties\": {\n \"style\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"css-style-safe\"\n ],\n \"affectedPaths\": [\n \"columns[].style\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.headerStyle.set\",\n \"title\": \"Definir estilo do cabeçalho\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"headerStyle\"\n ],\n \"properties\": {\n \"headerStyle\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"css-style-safe\"\n ],\n \"affectedPaths\": [\n \"columns[].headerStyle\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.valueMapping.set\",\n \"title\": \"Definir mapeamento de valores\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"valueMapping\"\n ],\n \"properties\": {\n \"valueMapping\": {\n \"type\": \"object\",\n \"minProperties\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"value-mapping-valid\"\n ],\n \"affectedPaths\": [\n \"columns[].valueMapping\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.order.set\",\n \"title\": \"Definir ordem visual\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"order\"\n ],\n \"properties\": {\n \"order\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].order\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.visibility.set\",\n \"title\": \"Definir visibilidade\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"visible\"\n ],\n \"properties\": {\n \"visible\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].visible\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.computed.add\",\n \"title\": \"Adicionar coluna calculada\",\n \"scope\": \"global\",\n \"targetKind\": \"computedColumn\",\n \"target\": {\n \"kind\": \"computedColumn\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"field\",\n \"header\",\n \"expression\"\n ],\n \"properties\": {\n \"field\": {\n \"type\": \"string\",\n \"description\": \"Stable camelCase field id for the new computed column. When the user supplies a header/name, derive this id from that header instead of asking for clarification.\"\n },\n \"header\": {\n \"type\": \"string\",\n \"description\": \"User-facing label for the computed column.\"\n },\n \"expression\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"outputType\": {}\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"column-field-unique\",\n \"computed-expression-valid\"\n ],\n \"affectedPaths\": [\n \"columns[]\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"column.renderer.set\",\n \"title\": \"Definir renderizador\",\n \"scope\": \"column\",\n \"targetKind\": \"renderer\",\n \"target\": {\n \"kind\": \"renderer\",\n \"resolver\": \"renderer-in-column\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {\n \"enum\": [\n \"icon\",\n \"image\",\n \"badge\",\n \"link\",\n \"button\",\n \"chip\",\n \"progress\",\n \"avatar\",\n \"toggle\",\n \"menu\",\n \"rating\",\n \"html\",\n \"compose\"\n ]\n },\n \"typeExpr\": {\n \"type\": \"string\"\n },\n \"button\": {\n \"type\": \"object\",\n \"required\": [\n \"action\"\n ],\n \"properties\": {\n \"label\": {\n \"type\": \"string\"\n },\n \"labelField\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"enum\": [\n \"primary\",\n \"accent\",\n \"warn\"\n ]\n },\n \"variant\": {\n \"enum\": [\n \"filled\",\n \"outlined\",\n \"text\"\n ]\n },\n \"size\": {\n \"enum\": [\n \"sm\",\n \"md\",\n \"lg\"\n ]\n },\n \"ariaLabel\": {\n \"type\": \"string\"\n },\n \"disabledCondition\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"action\": {\n \"type\": \"object\",\n \"required\": [\n \"id\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"payloadExpr\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"menu\": {\n \"type\": \"object\",\n \"required\": [\n \"itemsExpr\"\n ],\n \"properties\": {\n \"itemsExpr\": {\n \"type\": \"string\"\n },\n \"ariaLabel\": {\n \"type\": \"string\"\n }\n }\n },\n \"link\": {\n \"type\": \"object\",\n \"anyOf\": [\n {\n \"required\": [\n \"href\"\n ]\n },\n {\n \"required\": [\n \"hrefField\"\n ]\n }\n ],\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n },\n \"textField\": {\n \"type\": \"string\"\n },\n \"href\": {\n \"type\": \"string\"\n },\n \"hrefField\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"enum\": [\n \"_blank\",\n \"_self\",\n \"_parent\",\n \"_top\"\n ]\n },\n \"rel\": {\n \"type\": \"string\"\n }\n }\n },\n \"progress\": {\n \"type\": \"object\",\n \"required\": [\n \"valueExpr\"\n ],\n \"properties\": {\n \"valueExpr\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"showLabel\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"badge\": {\n \"type\": \"object\",\n \"anyOf\": [\n {\n \"required\": [\n \"text\"\n ]\n },\n {\n \"required\": [\n \"textField\"\n ]\n }\n ],\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n },\n \"textField\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"variant\": {\n \"enum\": [\n \"filled\",\n \"outlined\",\n \"soft\"\n ]\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"tooltip\": {\n \"type\": \"object\",\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n },\n \"position\": {\n \"enum\": [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\"\n ]\n },\n \"bgColor\": {\n \"type\": \"string\"\n },\n \"delayMs\": {\n \"type\": \"number\"\n }\n }\n }\n }\n },\n \"chip\": {\n \"type\": \"object\",\n \"anyOf\": [\n {\n \"required\": [\n \"text\"\n ]\n },\n {\n \"required\": [\n \"textField\"\n ]\n }\n ],\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n },\n \"textField\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"variant\": {\n \"enum\": [\n \"filled\",\n \"outlined\"\n ]\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"tooltip\": {\n \"type\": \"object\",\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n },\n \"position\": {\n \"enum\": [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\"\n ]\n },\n \"bgColor\": {\n \"type\": \"string\"\n },\n \"delayMs\": {\n \"type\": \"number\"\n }\n }\n }\n }\n },\n \"icon\": {\n \"type\": \"object\",\n \"anyOf\": [\n {\n \"required\": [\n \"name\"\n ]\n },\n {\n \"required\": [\n \"nameField\"\n ]\n }\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"nameField\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"size\": {\n \"type\": \"number\"\n },\n \"ariaLabel\": {\n \"type\": \"string\"\n }\n }\n },\n \"image\": {\n \"type\": \"object\",\n \"anyOf\": [\n {\n \"required\": [\n \"src\"\n ]\n },\n {\n \"required\": [\n \"srcField\"\n ]\n }\n ],\n \"properties\": {\n \"src\": {\n \"type\": \"string\"\n },\n \"srcField\": {\n \"type\": \"string\"\n },\n \"alt\": {\n \"type\": \"string\"\n },\n \"altField\": {\n \"type\": \"string\"\n },\n \"width\": {\n \"type\": \"number\"\n },\n \"height\": {\n \"type\": \"number\"\n },\n \"shape\": {\n \"enum\": [\n \"square\",\n \"rounded\",\n \"circle\"\n ]\n },\n \"fit\": {\n \"enum\": [\n \"cover\",\n \"contain\"\n ]\n },\n \"lazy\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"avatar\": {\n \"type\": \"object\",\n \"anyOf\": [\n {\n \"required\": [\n \"src\"\n ]\n },\n {\n \"required\": [\n \"srcField\"\n ]\n },\n {\n \"required\": [\n \"initialsField\"\n ]\n },\n {\n \"required\": [\n \"initialsExpr\"\n ]\n }\n ],\n \"properties\": {\n \"src\": {\n \"type\": \"string\"\n },\n \"srcField\": {\n \"type\": \"string\"\n },\n \"alt\": {\n \"type\": \"string\"\n },\n \"altField\": {\n \"type\": \"string\"\n },\n \"initialsField\": {\n \"type\": \"string\"\n },\n \"initialsExpr\": {\n \"type\": \"string\"\n },\n \"shape\": {\n \"enum\": [\n \"circle\",\n \"square\",\n \"rounded\"\n ]\n },\n \"size\": {\n \"type\": \"number\"\n },\n \"backgroundColor\": {\n \"type\": \"string\"\n },\n \"textColor\": {\n \"type\": \"string\"\n }\n }\n },\n \"toggle\": {\n \"type\": \"object\",\n \"required\": [\n \"stateExpr\",\n \"action\"\n ],\n \"properties\": {\n \"stateExpr\": {\n \"type\": \"string\"\n },\n \"disabledCondition\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"ariaLabel\": {\n \"type\": \"string\"\n },\n \"action\": {\n \"type\": \"object\",\n \"required\": [\n \"id\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"payloadExpr\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"rating\": {\n \"type\": \"object\",\n \"required\": [\n \"valueExpr\"\n ],\n \"properties\": {\n \"valueExpr\": {\n \"type\": \"string\"\n },\n \"max\": {\n \"type\": \"number\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"outlineColor\": {\n \"type\": \"string\"\n },\n \"size\": {\n \"enum\": [\n \"small\",\n \"medium\",\n \"large\"\n ]\n },\n \"ariaLabel\": {\n \"type\": \"string\"\n }\n }\n },\n \"html\": {\n \"type\": \"object\",\n \"required\": [\n \"template\"\n ],\n \"properties\": {\n \"template\": {\n \"type\": \"string\"\n },\n \"sanitize\": {\n \"enum\": [\n \"strict\",\n \"basic\"\n ]\n },\n \"emptyFallback\": {\n \"type\": \"string\"\n }\n }\n },\n \"compose\": {\n \"type\": \"object\",\n \"required\": [\n \"items\"\n ],\n \"properties\": {\n \"items\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {}\n }\n }\n },\n \"layout\": {\n \"type\": \"object\",\n \"properties\": {\n \"gap\": {\n \"type\": \"number\"\n },\n \"direction\": {\n \"enum\": [\n \"row\",\n \"column\"\n ]\n },\n \"align\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\"\n ]\n },\n \"wrap\": {\n \"type\": \"boolean\"\n },\n \"ellipsis\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n }\n },\n \"allOf\": [\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"button\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"button\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"menu\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"menu\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"link\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"link\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"progress\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"progress\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"badge\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"badge\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"chip\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"chip\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"icon\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"icon\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"image\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"image\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"avatar\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"avatar\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"toggle\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"toggle\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"rating\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"rating\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"html\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"html\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"compose\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"compose\"\n ]\n }\n }\n ]\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"columns[].renderer\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"renderer-type-supported\",\n \"renderer-config-match\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"columns[].renderer\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.conditionalRenderer.add\",\n \"title\": \"Adicionar renderizador condicional\",\n \"scope\": \"column\",\n \"targetKind\": \"conditionalRenderer\",\n \"target\": {\n \"kind\": \"conditionalRenderer\",\n \"resolver\": \"conditional-renderer-in-column\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"condition\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"description\": \"Identificador estável do renderer condicional (usado para deduplicação)\"\n },\n \"condition\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"tooltip\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n },\n \"position\": {\n \"enum\": [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\"\n ]\n },\n \"bgColor\": {\n \"type\": \"string\"\n },\n \"delayMs\": {\n \"type\": \"number\"\n }\n }\n },\n \"animation\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\",\n \"description\": \"false desativa a animacao sem remover a regra.\"\n },\n \"preset\": {\n \"enum\": [\n \"info-soft\",\n \"success-confirm\",\n \"warning-attention\",\n \"critical-alert\",\n \"audit-review\",\n \"sync-pending\",\n \"pulse-soft\",\n \"fade-soft\",\n \"sla-warning\",\n \"sla-breach\",\n \"risk-elevated\",\n \"risk-critical\",\n \"audit-warning\",\n \"sync-warning\"\n ],\n \"description\": \"Preset semantico recomendado. Preferir preset antes de type bruto.\"\n },\n \"type\": {\n \"enum\": [\n \"pulse\",\n \"blink\",\n \"grow\",\n \"fade\",\n \"slide-in\",\n \"border-pulse\"\n ]\n },\n \"durationMs\": {\n \"type\": \"number\"\n },\n \"trigger\": {\n \"enum\": [\n \"onChange\",\n \"onAppear\",\n \"onHover\",\n \"onConditionEnter\",\n \"onConditionExit\",\n \"onDataRefresh\"\n ]\n },\n \"repeat\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"once\",\n \"loop\",\n \"infinite\"\n ]\n },\n {\n \"type\": \"number\"\n }\n ]\n },\n \"delayMs\": {\n \"type\": \"number\"\n },\n \"intensity\": {\n \"enum\": [\n \"subtle\",\n \"normal\",\n \"strong\"\n ]\n }\n }\n },\n \"effects\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"scope\": {\n \"enum\": [\n \"cell\",\n \"row\",\n \"column\",\n \"table\"\n ]\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"estilo\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"color\": {\n \"type\": \"string\"\n },\n \"bgColor\": {\n \"type\": \"string\"\n },\n \"bold\": {\n \"type\": \"boolean\"\n },\n \"italic\": {\n \"type\": \"boolean\"\n },\n \"underline\": {\n \"type\": \"boolean\"\n },\n \"transform\": {\n \"enum\": [\n \"uppercase\",\n \"lowercase\",\n \"capitalize\",\n null\n ]\n },\n \"opacity\": {\n \"type\": \"number\"\n },\n \"fontScale\": {\n \"type\": \"number\"\n }\n }\n },\n \"layout\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"border\": {\n \"enum\": [\n \"none\",\n \"left\",\n \"right\",\n \"top\",\n \"bottom\",\n \"all\"\n ]\n },\n \"borderColor\": {\n \"type\": \"string\"\n },\n \"borderWidth\": {\n \"type\": \"number\"\n },\n \"padding\": {\n \"type\": \"number\"\n },\n \"align\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\"\n ]\n },\n \"elevation\": {\n \"type\": \"number\"\n }\n }\n },\n \"iconBadge\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"icon\": {\n \"type\": \"string\"\n },\n \"iconColor\": {\n \"type\": \"string\"\n },\n \"iconPos\": {\n \"enum\": [\n \"before\",\n \"after\",\n \"overlay\"\n ]\n },\n \"badgeText\": {\n \"type\": \"string\"\n },\n \"badgeStyle\": {\n \"enum\": [\n \"solid\",\n \"soft\",\n \"outline\"\n ]\n },\n \"badgeColor\": {\n \"type\": \"string\"\n }\n }\n },\n \"background\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"color\": {\n \"type\": \"string\"\n },\n \"gradient\": {\n \"type\": \"string\"\n },\n \"alpha\": {\n \"type\": \"number\"\n },\n \"blur\": {\n \"type\": \"number\"\n }\n }\n },\n \"cssClass\": {\n \"type\": \"string\"\n },\n \"inlineStyle\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"description\": {\n \"type\": \"string\"\n }\n },\n \"anyOf\": [\n {\n \"required\": [\n \"renderer\"\n ]\n },\n {\n \"required\": [\n \"tooltip\"\n ]\n },\n {\n \"required\": [\n \"animation\"\n ]\n },\n {\n \"required\": [\n \"effects\"\n ]\n }\n ]\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"columns[].conditionalRenderers[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"computed-expression-valid\",\n \"renderer-config-match\"\n ],\n \"affectedPaths\": [\n \"columns[].conditionalRenderers[]\",\n \"columns[].conditionalRenderers[].tooltip\",\n \"columns[].conditionalRenderers[].animation\",\n \"columns[].conditionalRenderers[].effects\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.conditionalStyle.add\",\n \"title\": \"Adicionar regra de estilo condicional na coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"rule\",\n \"target\": {\n \"kind\": \"rule\",\n \"resolver\": \"style-rule-in-column-or-row\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"condition\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"description\": \"Identificador estável da regra de estilo da coluna\"\n },\n \"condition\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"cssClass\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"object\"\n },\n \"tooltip\": {\n \"type\": \"object\"\n },\n \"effects\": {\n \"type\": \"array\"\n },\n \"description\": {\n \"type\": \"string\"\n }\n },\n \"anyOf\": [\n {\n \"required\": [\n \"cssClass\"\n ]\n },\n {\n \"required\": [\n \"style\"\n ]\n },\n {\n \"required\": [\n \"tooltip\"\n ]\n },\n {\n \"required\": [\n \"effects\"\n ]\n }\n ]\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"columns[].conditionalStyles[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"computed-expression-valid\",\n \"conditional-style-valid\"\n ],\n \"affectedPaths\": [\n \"columns[].conditionalStyles[]\",\n \"columns[].conditionalStyles[].effects\",\n \"columns[].conditionalStyles[].tooltip\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"row.styleRule.add\",\n \"title\": \"Adicionar regra de estilo de linha\",\n \"scope\": \"global\",\n \"targetKind\": \"rule\",\n \"target\": {\n \"kind\": \"rule\",\n \"resolver\": \"style-rule-in-column-or-row\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"condition\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"description\": \"Identificador estável da regra (usado para deduplicação via append-unique)\"\n },\n \"condition\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"style\": {\n \"type\": \"object\",\n \"description\": \"Estilo CSS (Record<string, string>)\"\n },\n \"cssClass\": {\n \"type\": \"string\"\n },\n \"effects\": {\n \"type\": \"array\"\n },\n \"description\": {\n \"type\": \"string\"\n }\n },\n \"anyOf\": [\n {\n \"required\": [\n \"cssClass\"\n ]\n },\n {\n \"required\": [\n \"style\"\n ]\n },\n {\n \"required\": [\n \"effects\"\n ]\n }\n ]\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"rowConditionalStyles[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"computed-expression-valid\"\n ],\n \"affectedPaths\": [\n \"rowConditionalStyles[]\",\n \"rowConditionalStyles[].effects\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"row.conditionalRenderer.add\",\n \"title\": \"Adicionar renderizador condicional de linha\",\n \"scope\": \"global\",\n \"targetKind\": \"conditionalRenderer\",\n \"target\": {\n \"kind\": \"conditionalRenderer\",\n \"resolver\": \"conditional-renderer-in-row\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"condition\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"description\": \"Identificador estavel da regra de renderer de linha\"\n },\n \"condition\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"tooltip\": {\n \"type\": \"object\",\n \"description\": \"Tooltip de linha\"\n },\n \"effects\": {\n \"type\": \"array\"\n },\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"description\": {\n \"type\": \"string\"\n }\n },\n \"anyOf\": [\n {\n \"required\": [\n \"tooltip\"\n ]\n },\n {\n \"required\": [\n \"animation\"\n ]\n },\n {\n \"required\": [\n \"effects\"\n ]\n }\n ]\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"rowConditionalRenderers[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"computed-expression-valid\"\n ],\n \"affectedPaths\": [\n \"rowConditionalRenderers[]\",\n \"rowConditionalRenderers[].condition\",\n \"rowConditionalRenderers[].tooltip\",\n \"rowConditionalRenderers[].animation\",\n \"rowConditionalRenderers[].effects\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"toolbar.visibility.set\",\n \"title\": \"Definir visibilidade da toolbar\",\n \"scope\": \"global\",\n \"targetKind\": \"toolbar\",\n \"target\": {\n \"kind\": \"toolbar\",\n \"resolver\": \"toolbar-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"visible\"\n ],\n \"properties\": {\n \"visible\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"toolbar\"\n }\n ],\n \"affectedPaths\": [\n \"toolbar.visible\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"toolbar.action.add\",\n \"title\": \"Adicionar ação na toolbar\",\n \"scope\": \"global\",\n \"targetKind\": \"toolbarAction\",\n \"target\": {\n \"kind\": \"toolbarAction\",\n \"resolver\": \"action-in-toolbar-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"label\",\n \"action\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"action\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"enum\": [\n \"button\",\n \"icon\",\n \"menu\"\n ],\n \"default\": \"button\"\n },\n \"visibleWhen\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"globalAction\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"actionId\": {\n \"type\": \"string\",\n \"enum\": [\n \"toast.success\",\n \"toast.error\",\n \"dialog.alert\",\n \"dialog.open\",\n \"navigation.openExternal\",\n \"navigation.openRoute\",\n \"api.post\",\n \"api.patch\"\n ]\n },\n \"payload\": {\n \"type\": \"object\"\n },\n \"payloadExpr\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"kind\",\n \"globalAction\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"kind\": {\n \"enum\": [\n \"global-action\"\n ]\n }\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"toolbar.actions[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"toolbar-action-id-unique\"\n ],\n \"affectedPaths\": [\n \"toolbar.actions[]\",\n \"toolbar.actions[].visibleWhen\",\n \"toolbar.actions[].effects\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"rowAction.add\",\n \"title\": \"Adicionar ação de linha\",\n \"scope\": \"global\",\n \"targetKind\": \"rowAction\",\n \"target\": {\n \"kind\": \"rowAction\",\n \"resolver\": \"action-in-row-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"label\",\n \"action\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"action\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"visibleWhen\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"disabledWhen\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"recordSurface\": {\n \"type\": \"object\",\n \"description\": \"ResourceSurfaceCatalogItem canonico preservado para abrir uma superficie relacionada ao registro da linha clicada.\"\n },\n \"effects\": {\n \"type\": \"array\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"actions.row.actions[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"row-action-id-unique\"\n ],\n \"affectedPaths\": [\n \"actions.row.actions[]\",\n \"actions.row.actions[].visibleWhen\",\n \"actions.row.actions[].disabledWhen\",\n \"actions.row.actions[].effects\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"bulkAction.add\",\n \"title\": \"Adicionar ação em lote\",\n \"scope\": \"global\",\n \"targetKind\": \"bulkAction\",\n \"target\": {\n \"kind\": \"bulkAction\",\n \"resolver\": \"action-in-bulk-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"label\",\n \"action\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"action\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"effects\": {\n \"type\": \"array\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"actions.bulk.actions[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"bulk-action-id-unique\"\n ],\n \"affectedPaths\": [\n \"actions.bulk.actions[]\",\n \"actions.bulk.actions[].effects\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"export.enabled.set\",\n \"title\": \"Habilitar exportação\",\n \"scope\": \"global\",\n \"targetKind\": \"export\",\n \"target\": {\n \"kind\": \"export\",\n \"resolver\": \"export-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"enabled\"\n ],\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"formats\": {\n \"type\": \"array\",\n \"items\": {\n \"enum\": [\n \"excel\",\n \"pdf\",\n \"csv\",\n \"json\"\n ]\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"export\"\n }\n ],\n \"affectedPaths\": [\n \"export.enabled\",\n \"export.formats\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"filter.advanced.configure\",\n \"title\": \"Configurar filtros avançados\",\n \"scope\": \"global\",\n \"targetKind\": \"filter\",\n \"target\": {\n \"kind\": \"filter\",\n \"resolver\": \"filter-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"enabled\"\n ],\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"queryBuilder\": {\n \"type\": \"boolean\"\n },\n \"savePresets\": {\n \"type\": \"boolean\"\n },\n \"settings\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"filter\"\n ]\n },\n \"showAdvanced\": {\n \"type\": \"boolean\"\n },\n \"allowSaveTags\": {\n \"type\": \"boolean\"\n },\n \"alwaysVisibleFields\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"selectedFieldIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"alwaysVisibleFieldMetadataOverrides\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"object\"\n }\n },\n \"changeDebounceMs\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"useInlineSearchableSelectVariant\": {\n \"type\": \"boolean\"\n },\n \"useInlineRangeVariant\": {\n \"type\": \"boolean\"\n },\n \"useInlineDateVariant\": {\n \"type\": \"boolean\"\n },\n \"useInlineDateRangeVariant\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"behavior.filtering.enabled\",\n \"value\": true\n },\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.filtering.advancedFilters\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.filtering.enabled\",\n \"behavior.filtering.advancedFilters.enabled\",\n \"behavior.filtering.advancedFilters.settings\"\n ],\n \"validators\": [\n \"filter-fields-exist\",\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"filter.advanced.fields.add\",\n \"title\": \"Adicionar campos aos filtros avançados\",\n \"scope\": \"global\",\n \"targetKind\": \"filter\",\n \"target\": {\n \"kind\": \"filter\",\n \"resolver\": \"filter-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"fields\"\n ],\n \"properties\": {\n \"fields\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1\n },\n \"selected\": {\n \"type\": \"boolean\"\n },\n \"alwaysVisible\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"behavior.filtering.enabled\",\n \"value\": true\n },\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.filtering.advancedFilters\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.filtering.enabled\",\n \"behavior.filtering.advancedFilters.enabled\",\n \"behavior.filtering.advancedFilters.settings\"\n ],\n \"validators\": [\n \"filter-fields-exist\",\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"filter.advanced.fields.remove\",\n \"title\": \"Remover campos dos filtros avançados\",\n \"scope\": \"global\",\n \"targetKind\": \"filter\",\n \"target\": {\n \"kind\": \"filter\",\n \"resolver\": \"filter-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"fields\"\n ],\n \"properties\": {\n \"fields\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1\n },\n \"selected\": {\n \"type\": \"boolean\"\n },\n \"alwaysVisible\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"behavior.filtering.enabled\",\n \"value\": true\n },\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.filtering.advancedFilters\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.filtering.enabled\",\n \"behavior.filtering.advancedFilters.enabled\",\n \"behavior.filtering.advancedFilters.settings\"\n ],\n \"validators\": [\n \"filter-fields-exist\",\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"grouping.set\",\n \"title\": \"Definir agrupamento\",\n \"scope\": \"global\",\n \"targetKind\": \"grouping\",\n \"target\": {\n \"kind\": \"grouping\",\n \"resolver\": \"grouping-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"enabled\"\n ],\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"fields\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"expanded\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.grouping\"\n }\n ],\n \"validators\": [\n \"grouping-fields-exist\"\n ],\n \"affectedPaths\": [\n \"behavior.grouping\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"selection.mode.set\",\n \"title\": \"Definir modo de seleção\",\n \"scope\": \"global\",\n \"targetKind\": \"selection\",\n \"target\": {\n \"kind\": \"selection\",\n \"resolver\": \"selection-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"enabled\",\n \"type\"\n ],\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"type\": {\n \"enum\": [\n \"single\",\n \"multiple\"\n ]\n },\n \"mode\": {\n \"enum\": [\n \"checkbox\",\n \"row\",\n \"both\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.selection\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.selection.enabled\",\n \"behavior.selection.type\",\n \"behavior.selection.mode\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"appearance.density.set\",\n \"title\": \"Definir densidade\",\n \"scope\": \"global\",\n \"targetKind\": \"appearance\",\n \"target\": {\n \"kind\": \"appearance\",\n \"resolver\": \"appearance-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"density\"\n ],\n \"properties\": {\n \"density\": {\n \"enum\": [\n \"compact\",\n \"comfortable\",\n \"spacious\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"appearance\"\n }\n ],\n \"affectedPaths\": [\n \"appearance.density\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"appearance.borders.set\",\n \"title\": \"Definir bordas\",\n \"scope\": \"global\",\n \"targetKind\": \"appearance\",\n \"target\": {\n \"kind\": \"appearance\",\n \"resolver\": \"appearance-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"showRowBorders\",\n \"showColumnBorders\"\n ],\n \"properties\": {\n \"showRowBorders\": {\n \"type\": \"boolean\"\n },\n \"showColumnBorders\": {\n \"type\": \"boolean\"\n },\n \"showOuterBorder\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"appearance.borders\"\n }\n ],\n \"affectedPaths\": [\n \"appearance.borders.showRowBorders\",\n \"appearance.borders.showColumnBorders\",\n \"appearance.borders.showOuterBorder\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"virtualization.enabled.set\",\n \"title\": \"Habilitar virtualização\",\n \"scope\": \"global\",\n \"targetKind\": \"appearance\",\n \"target\": {\n \"kind\": \"appearance\",\n \"resolver\": \"appearance-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"enabled\"\n ],\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"itemHeight\": {\n \"type\": \"number\",\n \"default\": 48\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.virtualization\"\n },\n {\n \"kind\": \"merge-object\",\n \"path\": \"performance.virtualization\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.virtualization\",\n \"performance.virtualization\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"expansion.configure\",\n \"title\": \"Configurar expansão de linha\",\n \"scope\": \"global\",\n \"targetKind\": \"expansion\",\n \"target\": {\n \"kind\": \"expansion\",\n \"resolver\": \"expansion-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"contractVersion\": {\n \"type\": \"string\"\n },\n \"state\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"controlled\",\n \"uncontrolled\"\n ]\n }\n }\n },\n \"interaction\": {\n \"type\": \"object\",\n \"properties\": {\n \"trigger\": {\n \"enum\": [\n \"icon\",\n \"row\",\n \"both\"\n ]\n },\n \"toggleIcon\": {\n \"type\": \"object\",\n \"properties\": {\n \"collapsed\": {\n \"type\": \"string\"\n },\n \"expanded\": {\n \"type\": \"string\"\n },\n \"ariaLabelCollapsed\": {\n \"type\": \"string\"\n },\n \"ariaLabelExpanded\": {\n \"type\": \"string\"\n }\n }\n },\n \"motion\": {\n \"type\": \"object\",\n \"properties\": {\n \"preset\": {\n \"enum\": [\n \"none\",\n \"subtle-slide\",\n \"accordion\",\n \"fade-scale\"\n ]\n },\n \"durationMs\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"easing\": {\n \"enum\": [\n \"standard\",\n \"emphasized\",\n \"decelerate\"\n ]\n }\n }\n },\n \"keyboard\": {\n \"type\": \"object\",\n \"properties\": {\n \"profile\": {\n \"enum\": [\n \"disclosure\",\n \"grid\"\n ]\n }\n }\n }\n }\n },\n \"limits\": {\n \"type\": \"object\",\n \"properties\": {\n \"allowMultiple\": {\n \"type\": \"boolean\"\n },\n \"maxExpandedRows\": {\n \"type\": \"number\",\n \"minimum\": 1\n },\n \"onOverflow\": {\n \"enum\": [\n \"collapseOldest\",\n \"denyNew\",\n \"collapseAll\"\n ]\n }\n }\n },\n \"collapseOn\": {\n \"type\": \"object\",\n \"properties\": {\n \"sortChange\": {\n \"type\": \"boolean\"\n },\n \"pageChange\": {\n \"type\": \"boolean\"\n },\n \"filterChange\": {\n \"type\": \"boolean\"\n },\n \"dataRefresh\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"virtualization\": {\n \"type\": \"object\",\n \"properties\": {\n \"policy\": {\n \"enum\": [\n \"fixed-height-only\",\n \"allow-dynamic-under-flag\"\n ]\n }\n }\n },\n \"persistence\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"storageKeyStrategy\": {\n \"type\": \"object\",\n \"properties\": {\n \"namespace\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"security\": {\n \"type\": \"object\",\n \"properties\": {\n \"eventExposureDefault\": {\n \"type\": \"object\",\n \"properties\": {\n \"rowId\": {\n \"enum\": [\n \"redacted\",\n \"hashed\",\n \"raw\"\n ]\n },\n \"expandedKeys\": {\n \"enum\": [\n \"none\",\n \"hashed\",\n \"raw\"\n ]\n }\n }\n }\n }\n },\n \"deepLink\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"encoding\": {\n \"enum\": [\n \"csv\"\n ]\n },\n \"parsing\": {\n \"type\": \"object\",\n \"properties\": {\n \"duplicateParams\": {\n \"enum\": [\n \"firstWins\",\n \"reject\"\n ]\n }\n }\n },\n \"integrity\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"opaqueToken\"\n ]\n }\n }\n },\n \"privacy\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"denyByDefault\",\n \"allowByDefault\"\n ]\n }\n }\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.expansion\"\n }\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"behavior.expansion\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"expansion.detailSource.configure\",\n \"title\": \"Configurar fonte remota do detalhe expansivel\",\n \"scope\": \"global\",\n \"targetKind\": \"expansion\",\n \"target\": {\n \"kind\": \"expansion\",\n \"resolver\": \"expansion-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"inline\",\n \"resource\",\n \"resourcePath\",\n \"hypermedia\"\n ]\n },\n \"inlineSchema\": {\n \"type\": \"object\"\n },\n \"resource\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"enum\": [\n \"ui-composition\",\n \"form-schema\",\n \"table-schema\",\n \"dashboard-schema\"\n ]\n },\n \"id\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\"\n }\n }\n },\n \"resourcePath\": {\n \"type\": \"object\",\n \"properties\": {\n \"path\": {\n \"type\": \"string\"\n },\n \"method\": {\n \"enum\": [\n \"GET\",\n \"POST\"\n ]\n },\n \"paramsMap\": {\n \"type\": \"object\"\n }\n }\n },\n \"resourceAllowList\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"hypermedia\": {\n \"type\": \"object\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.expansion.detail.source\"\n }\n ],\n \"validators\": [\n \"remote-resource-binding-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"behavior.expansion.detail.source\",\n \"behavior.expansion.detail.source.mode\",\n \"behavior.expansion.detail.source.resourcePath\",\n \"behavior.expansion.detail.source.resourceAllowList\",\n \"behavior.expansion.detail.source.hypermedia\"\n ],\n \"submissionImpact\": \"affects-remote-binding\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"expansion.detailPresentation.configure\",\n \"title\": \"Configurar apresentacao do detalhe expansivel\",\n \"scope\": \"global\",\n \"targetKind\": \"expansion\",\n \"target\": {\n \"kind\": \"expansion\",\n \"resolver\": \"expansion-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"schemaContract\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\"\n }\n }\n },\n \"rendering\": {\n \"type\": \"object\",\n \"properties\": {\n \"strategy\": {\n \"enum\": [\n \"registry\"\n ]\n },\n \"registryId\": {\n \"type\": \"string\"\n },\n \"hostLayout\": {\n \"enum\": [\n \"auto\",\n \"stack\",\n \"tabs\"\n ]\n },\n \"fallbackNodePolicy\": {\n \"enum\": [\n \"failClosed\",\n \"renderPlaceholder\"\n ]\n }\n }\n },\n \"height\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"fixed\",\n \"dynamic\"\n ]\n },\n \"px\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.expansion.detail\"\n }\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"behavior.expansion.detail\",\n \"behavior.expansion.detail.schemaContract\",\n \"behavior.expansion.detail.rendering\",\n \"behavior.expansion.detail.height\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"meta.configure\",\n \"title\": \"Configurar metadados\",\n \"scope\": \"global\",\n \"targetKind\": \"meta\",\n \"target\": {\n \"kind\": \"meta\",\n \"resolver\": \"table-meta-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"schemaId\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"meta\"\n }\n ],\n \"affectedPaths\": [\n \"meta\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"meta.idField.set\",\n \"title\": \"Definir campo de identidade\",\n \"scope\": \"global\",\n \"targetKind\": \"meta\",\n \"target\": {\n \"kind\": \"meta\",\n \"resolver\": \"table-meta-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"idField\"\n ],\n \"properties\": {\n \"idField\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"meta.idField\"\n }\n ],\n \"requiresConfirmation\": true,\n \"affectedPaths\": [\n \"meta.idField\"\n ],\n \"validators\": [\n \"target-column-exists\",\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"column.resizable.set\",\n \"title\": \"Definir redimensionamento da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"resizable\"\n ],\n \"properties\": {\n \"resizable\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].resizable\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.sortField.set\",\n \"title\": \"Definir campo de ordenacao da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"sortField\"\n ],\n \"properties\": {\n \"sortField\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].sortField\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.computed.configure\",\n \"title\": \"Configurar coluna calculada\",\n \"scope\": \"column\",\n \"targetKind\": \"computedColumn\",\n \"target\": {\n \"kind\": \"computedColumn\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"expression\"\n ],\n \"properties\": {\n \"expression\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"outputType\": {},\n \"format\": {\n \"type\": \"string\"\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"computed-expression-valid\",\n \"format-preset-supported\"\n ],\n \"affectedPaths\": [\n \"columns[].computed\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"behavior.pagination.configure\",\n \"title\": \"Configurar paginacao\",\n \"scope\": \"global\",\n \"targetKind\": \"pagination\",\n \"target\": {\n \"kind\": \"pagination\",\n \"resolver\": \"pagination-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"strategy\": {\n \"enum\": [\n \"client\",\n \"server\"\n ]\n },\n \"pageSize\": {\n \"type\": \"number\",\n \"minimum\": 1\n },\n \"pageSizeOptions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"number\",\n \"minimum\": 1\n }\n },\n \"position\": {\n \"enum\": [\n \"top\",\n \"bottom\",\n \"both\"\n ]\n },\n \"style\": {\n \"enum\": [\n \"default\",\n \"simple\",\n \"advanced\",\n \"compact\"\n ]\n },\n \"advanced\": {\n \"type\": \"object\",\n \"properties\": {\n \"maxPageSize\": {\n \"type\": \"number\",\n \"minimum\": 1\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.pagination\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.pagination\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.sorting.configure\",\n \"title\": \"Configurar ordenacao\",\n \"scope\": \"global\",\n \"targetKind\": \"sorting\",\n \"target\": {\n \"kind\": \"sorting\",\n \"resolver\": \"sorting-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"strategy\": {\n \"enum\": [\n \"client\",\n \"server\"\n ]\n },\n \"defaultSort\": {\n \"type\": \"object\"\n },\n \"allowClearSort\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.sorting\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.sorting\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.filtering.configure\",\n \"title\": \"Configurar filtragem\",\n \"scope\": \"global\",\n \"targetKind\": \"filter\",\n \"target\": {\n \"kind\": \"filter\",\n \"resolver\": \"filter-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"strategy\": {\n \"enum\": [\n \"client\",\n \"server\"\n ]\n },\n \"columnFilters\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"defaultType\": {\n \"enum\": [\n \"text\",\n \"select\",\n \"date\",\n \"number\",\n \"boolean\"\n ]\n },\n \"position\": {\n \"enum\": [\n \"header\",\n \"subheader\",\n \"sidebar\"\n ]\n }\n }\n },\n \"advancedFilters\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"settings\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"filter\"\n ]\n },\n \"showAdvanced\": {\n \"type\": \"boolean\"\n },\n \"allowSaveTags\": {\n \"type\": \"boolean\"\n },\n \"alwaysVisibleFields\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"selectedFieldIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"alwaysVisibleFieldMetadataOverrides\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"object\"\n }\n },\n \"changeDebounceMs\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"useInlineSearchableSelectVariant\": {\n \"type\": \"boolean\"\n },\n \"useInlineRangeVariant\": {\n \"type\": \"boolean\"\n },\n \"useInlineDateVariant\": {\n \"type\": \"boolean\"\n },\n \"useInlineDateRangeVariant\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"debounceTime\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.filtering\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.filtering\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.selection.configure\",\n \"title\": \"Configurar selecao\",\n \"scope\": \"global\",\n \"targetKind\": \"selection\",\n \"target\": {\n \"kind\": \"selection\",\n \"resolver\": \"selection-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"type\": {\n \"enum\": [\n \"single\",\n \"multiple\"\n ]\n },\n \"mode\": {\n \"enum\": [\n \"checkbox\",\n \"row\",\n \"both\"\n ]\n },\n \"allowSelectAll\": {\n \"type\": \"boolean\"\n },\n \"persistSelection\": {\n \"type\": \"boolean\"\n },\n \"maxSelections\": {\n \"type\": \"number\",\n \"minimum\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.selection\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.selection\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.interaction.configure\",\n \"title\": \"Configurar interacao\",\n \"scope\": \"global\",\n \"targetKind\": \"interaction\",\n \"target\": {\n \"kind\": \"interaction\",\n \"resolver\": \"interaction-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"rowClick\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"action\": {\n \"type\": \"string\"\n }\n }\n },\n \"keyboard\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"hover\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"highlightRow\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.interaction\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.interaction\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.loading.configure\",\n \"title\": \"Configurar loading\",\n \"scope\": \"global\",\n \"targetKind\": \"loading\",\n \"target\": {\n \"kind\": \"loading\",\n \"resolver\": \"loading-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"type\": {\n \"enum\": [\n \"spinner\",\n \"skeleton\",\n \"progress\",\n \"custom\"\n ]\n },\n \"position\": {\n \"enum\": [\n \"overlay\",\n \"inline\",\n \"replace\"\n ]\n },\n \"text\": {\n \"type\": \"string\"\n },\n \"delay\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.loading\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.loading\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.emptyState.configure\",\n \"title\": \"Configurar estado vazio\",\n \"scope\": \"global\",\n \"targetKind\": \"emptyState\",\n \"target\": {\n \"kind\": \"emptyState\",\n \"resolver\": \"empty-state-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"message\"\n ],\n \"properties\": {\n \"message\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.emptyState\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.emptyState\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.resizing.configure\",\n \"title\": \"Configurar redimensionamento\",\n \"scope\": \"global\",\n \"targetKind\": \"resizing\",\n \"target\": {\n \"kind\": \"resizing\",\n \"resolver\": \"resizing-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"minColumnWidth\": {\n \"type\": \"number\",\n \"minimum\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.resizing\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.resizing\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.dragging.configure\",\n \"title\": \"Configurar drag and drop\",\n \"scope\": \"global\",\n \"targetKind\": \"dragging\",\n \"target\": {\n \"kind\": \"dragging\",\n \"resolver\": \"dragging-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"columns\"\n ],\n \"properties\": {\n \"columns\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.dragging\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.dragging\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.editing.configure\",\n \"title\": \"Configurar edicao\",\n \"scope\": \"global\",\n \"targetKind\": \"editing\",\n \"target\": {\n \"kind\": \"editing\",\n \"resolver\": \"editing-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"mode\"\n ],\n \"properties\": {\n \"mode\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.editing\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.editing\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"toolbar.configure\",\n \"title\": \"Configurar toolbar\",\n \"scope\": \"global\",\n \"targetKind\": \"toolbar\",\n \"target\": {\n \"kind\": \"toolbar\",\n \"resolver\": \"toolbar-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"visible\": {\n \"type\": \"boolean\"\n },\n \"position\": {\n \"enum\": [\n \"top\",\n \"bottom\",\n \"both\"\n ]\n },\n \"actionsPosition\": {\n \"enum\": [\n \"top\",\n \"bottom\",\n \"both\"\n ]\n },\n \"actionsBackgroundColor\": {\n \"type\": \"string\"\n },\n \"appearance\": {\n \"type\": \"object\",\n \"properties\": {\n \"preset\": {\n \"type\": \"string\"\n },\n \"variant\": {\n \"enum\": [\n \"flat\",\n \"outlined\",\n \"elevated\",\n \"integrated\"\n ]\n },\n \"density\": {\n \"enum\": [\n \"compact\",\n \"comfortable\",\n \"spacious\"\n ]\n },\n \"shape\": {\n \"enum\": [\n \"square\",\n \"rounded\",\n \"pill\"\n ]\n },\n \"divider\": {\n \"enum\": [\n \"none\",\n \"start\",\n \"between-groups\"\n ]\n },\n \"tokens\": {\n \"type\": \"object\",\n \"properties\": {\n \"titleFg\": {\n \"type\": \"string\"\n },\n \"subtitleFg\": {\n \"type\": \"string\"\n },\n \"iconFg\": {\n \"type\": \"string\"\n },\n \"titleFontSize\": {\n \"type\": \"string\"\n },\n \"subtitleFontSize\": {\n \"type\": \"string\"\n },\n \"titleFontWeight\": {\n \"type\": \"string\"\n },\n \"identityGap\": {\n \"type\": \"string\"\n },\n \"identityFilterGap\": {\n \"type\": \"string\"\n },\n \"identityMinHeight\": {\n \"type\": \"string\"\n },\n \"identityMarginBottom\": {\n \"type\": \"string\"\n },\n \"identityIconSize\": {\n \"type\": \"string\"\n },\n \"identityIconRadius\": {\n \"type\": \"string\"\n }\n },\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"subtitle\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"textAlign\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\"\n ]\n },\n \"layout\": {\n \"type\": \"object\",\n \"properties\": {\n \"alignment\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\",\n \"space-between\"\n ]\n }\n }\n },\n \"filters\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"settingsMenu\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"columnsVisibility\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"toolbar\"\n }\n ],\n \"validators\": [\n \"css-style-safe\"\n ],\n \"affectedPaths\": [\n \"toolbar\",\n \"toolbar.title\",\n \"toolbar.subtitle\",\n \"toolbar.icon\",\n \"toolbar.textAlign\",\n \"toolbar.appearance\",\n \"toolbar.appearance.tokens\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"actions.row.configure\",\n \"title\": \"Configurar acoes de linha\",\n \"scope\": \"global\",\n \"targetKind\": \"rowAction\",\n \"target\": {\n \"kind\": \"rowAction\",\n \"resolver\": \"action-in-row-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"display\": {\n \"enum\": [\n \"menu\",\n \"buttons\",\n \"icons\"\n ]\n },\n \"trigger\": {\n \"enum\": [\n \"hover\",\n \"always\",\n \"click\"\n ]\n },\n \"discovery\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"actions.row\"\n }\n ],\n \"affectedPaths\": [\n \"actions.row\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"actions.bulk.configure\",\n \"title\": \"Configurar acoes em lote\",\n \"scope\": \"global\",\n \"targetKind\": \"bulkAction\",\n \"target\": {\n \"kind\": \"bulkAction\",\n \"resolver\": \"action-in-bulk-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"position\": {\n \"enum\": [\n \"toolbar\",\n \"floating\",\n \"both\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"actions.bulk\"\n }\n ],\n \"requiresConfirmation\": true,\n \"affectedPaths\": [\n \"actions.bulk\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"actions.context.configure\",\n \"title\": \"Configurar menu contextual\",\n \"scope\": \"global\",\n \"targetKind\": \"contextAction\",\n \"target\": {\n \"kind\": \"contextAction\",\n \"resolver\": \"action-in-context-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"trigger\": {\n \"enum\": [\n \"right-click\",\n \"long-press\",\n \"both\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"actions.context\"\n }\n ],\n \"requiresConfirmation\": true,\n \"affectedPaths\": [\n \"actions.context\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"actions.confirmations.configure\",\n \"title\": \"Configurar confirmacoes\",\n \"scope\": \"global\",\n \"targetKind\": \"contextAction\",\n \"target\": {\n \"kind\": \"contextAction\",\n \"resolver\": \"action-in-context-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"default\"\n ],\n \"properties\": {\n \"default\": {\n \"type\": \"object\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"actions.confirmations\"\n }\n ],\n \"requiresConfirmation\": true,\n \"affectedPaths\": [\n \"actions.confirmations.default\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"export.configure\",\n \"title\": \"Configurar exportacao\",\n \"scope\": \"global\",\n \"targetKind\": \"export\",\n \"target\": {\n \"kind\": \"export\",\n \"resolver\": \"export-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"formats\": {\n \"type\": \"array\",\n \"items\": {\n \"enum\": [\n \"excel\",\n \"pdf\",\n \"csv\",\n \"json\",\n \"print\"\n ]\n }\n },\n \"general\": {\n \"type\": \"object\",\n \"properties\": {\n \"includeHeaders\": {\n \"type\": \"boolean\"\n },\n \"scope\": {\n \"enum\": [\n \"auto\",\n \"selected\",\n \"filtered\",\n \"currentPage\",\n \"all\"\n ]\n },\n \"maxRows\": {\n \"type\": \"number\",\n \"minimum\": 1\n }\n }\n },\n \"excel\": {\n \"type\": \"object\",\n \"properties\": {\n \"autoFitColumns\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"pdf\": {\n \"type\": \"object\",\n \"properties\": {\n \"orientation\": {\n \"enum\": [\n \"portrait\",\n \"landscape\"\n ]\n },\n \"pageSize\": {\n \"enum\": [\n \"A4\",\n \"A3\",\n \"Letter\",\n \"Legal\"\n ]\n }\n }\n },\n \"csv\": {\n \"type\": \"object\",\n \"properties\": {\n \"delimiter\": {\n \"enum\": [\n \",\",\n \";\",\n \"|\",\n \"\\\\t\"\n ]\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"export\"\n }\n ],\n \"requiresConfirmation\": true,\n \"affectedPaths\": [\n \"export\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"tableRuntimeOperations.plan\",\n \"title\": \"Planejar operacoes runtime da tabela\",\n \"scope\": \"global\",\n \"targetKind\": \"runtimeOperation\",\n \"target\": {\n \"kind\": \"runtimeOperation\",\n \"resolver\": \"table-runtime-operation-contract\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"operations\"\n ],\n \"properties\": {\n \"operations\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"operationId\",\n \"input\"\n ],\n \"properties\": {\n \"operationId\": {\n \"enum\": [\n \"table.filter.apply\",\n \"table.export.run\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"criteria\": {\n \"type\": \"object\"\n },\n \"format\": {},\n \"scope\": {}\n }\n },\n \"description\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"tableRuntimeOperations\"\n }\n ],\n \"affectedPaths\": [\n \"tableRuntimeOperations\"\n ],\n \"validators\": [\n \"runtime-operation-declared\"\n ],\n \"submissionImpact\": \"none\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"appearance.configure\",\n \"title\": \"Configurar aparencia\",\n \"scope\": \"global\",\n \"targetKind\": \"appearance\",\n \"target\": {\n \"kind\": \"appearance\",\n \"resolver\": \"appearance-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"density\": {\n \"enum\": [\n \"compact\",\n \"comfortable\",\n \"spacious\"\n ]\n },\n \"borders\": {\n \"type\": \"object\",\n \"properties\": {\n \"showRowBorders\": {\n \"type\": \"boolean\"\n },\n \"showColumnBorders\": {\n \"type\": \"boolean\"\n },\n \"showOuterBorder\": {\n \"type\": \"boolean\"\n },\n \"style\": {\n \"enum\": [\n \"solid\",\n \"dashed\",\n \"dotted\"\n ]\n }\n }\n },\n \"colors\": {\n \"type\": \"object\",\n \"properties\": {\n \"alternateRowBackground\": {\n \"type\": \"string\"\n },\n \"hoverBackground\": {\n \"type\": \"string\"\n }\n }\n },\n \"typography\": {\n \"type\": \"object\",\n \"properties\": {\n \"fontSize\": {\n \"type\": \"string\"\n },\n \"headerFontWeight\": {\n \"type\": \"string\"\n }\n }\n },\n \"spacing\": {\n \"type\": \"object\",\n \"properties\": {\n \"cellPadding\": {\n \"type\": \"string\"\n }\n }\n },\n \"responsive\": {\n \"type\": \"object\",\n \"properties\": {\n \"mobile\": {\n \"type\": \"object\",\n \"properties\": {\n \"horizontalScroll\": {\n \"type\": \"boolean\"\n },\n \"cardMode\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"breakpoints\": {\n \"type\": \"object\",\n \"properties\": {\n \"mobile\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n }\n }\n },\n \"animations\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"elevation\": {\n \"type\": \"object\",\n \"properties\": {\n \"level\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"appearance\"\n }\n ],\n \"validators\": [\n \"css-style-safe\"\n ],\n \"affectedPaths\": [\n \"appearance\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"messages.configure\",\n \"title\": \"Configurar mensagens\",\n \"scope\": \"global\",\n \"targetKind\": \"messages\",\n \"target\": {\n \"kind\": \"messages\",\n \"resolver\": \"messages-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"states\": {\n \"type\": \"object\",\n \"properties\": {\n \"empty\": {\n \"type\": \"string\"\n },\n \"loading\": {\n \"type\": \"string\"\n }\n }\n },\n \"actions\": {\n \"type\": \"object\",\n \"properties\": {\n \"confirmations\": {\n \"type\": \"object\",\n \"properties\": {\n \"delete\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"messages\"\n }\n ],\n \"affectedPaths\": [\n \"messages\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"localization.configure\",\n \"title\": \"Configurar localizacao\",\n \"scope\": \"global\",\n \"targetKind\": \"localization\",\n \"target\": {\n \"kind\": \"localization\",\n \"resolver\": \"localization-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"locale\": {\n \"type\": \"string\"\n },\n \"direction\": {\n \"enum\": [\n \"ltr\",\n \"rtl\"\n ]\n },\n \"dateTime\": {\n \"type\": \"object\",\n \"properties\": {\n \"dateFormat\": {\n \"type\": \"string\"\n },\n \"timeFormat\": {\n \"type\": \"string\"\n },\n \"dateTimeFormat\": {\n \"type\": \"string\"\n },\n \"firstDayOfWeek\": {\n \"enum\": [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6\n ]\n },\n \"relativeTime\": {\n \"type\": \"boolean\"\n },\n \"monthNames\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"dayNames\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"number\": {\n \"type\": \"object\",\n \"properties\": {\n \"decimalSeparator\": {\n \"type\": \"string\"\n },\n \"thousandsSeparator\": {\n \"type\": \"string\"\n },\n \"defaultPrecision\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"negativeSign\": {\n \"type\": \"string\"\n },\n \"negativeSignPosition\": {\n \"enum\": [\n \"before\",\n \"after\"\n ]\n }\n }\n },\n \"currency\": {\n \"type\": \"object\",\n \"properties\": {\n \"code\": {\n \"type\": \"string\"\n },\n \"symbol\": {\n \"type\": \"string\"\n },\n \"position\": {\n \"enum\": [\n \"before\",\n \"after\"\n ]\n },\n \"spacing\": {\n \"type\": \"boolean\"\n },\n \"precision\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n },\n \"formatting\": {\n \"type\": \"object\",\n \"properties\": {\n \"percentageFormat\": {\n \"type\": \"string\"\n },\n \"fileSizeFormat\": {\n \"enum\": [\n \"binary\",\n \"decimal\"\n ]\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"localization\"\n }\n ],\n \"affectedPaths\": [\n \"localization\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"performance.configure\",\n \"title\": \"Configurar performance\",\n \"scope\": \"global\",\n \"targetKind\": \"performance\",\n \"target\": {\n \"kind\": \"performance\",\n \"resolver\": \"performance-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"virtualization\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"itemHeight\": {\n \"type\": \"number\",\n \"minimum\": 1\n }\n }\n },\n \"debounce\": {\n \"type\": \"object\",\n \"properties\": {\n \"search\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"filter\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n },\n \"lazyLoading\": {\n \"type\": \"object\",\n \"properties\": {\n \"images\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"performance\"\n }\n ],\n \"affectedPaths\": [\n \"performance\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"data.loadingStrategy.set\",\n \"title\": \"Definir estrategia de carregamento\",\n \"scope\": \"global\",\n \"targetKind\": \"data\",\n \"target\": {\n \"kind\": \"data\",\n \"resolver\": \"data-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"loadingStrategy\"\n ],\n \"properties\": {\n \"loadingStrategy\": {\n \"enum\": [\n \"eager\",\n \"lazy\",\n \"on-demand\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"data.loadingStrategy\"\n }\n ],\n \"affectedPaths\": [\n \"data.loadingStrategy\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"accessibility.configure\",\n \"title\": \"Configurar acessibilidade\",\n \"scope\": \"global\",\n \"targetKind\": \"accessibility\",\n \"target\": {\n \"kind\": \"accessibility\",\n \"resolver\": \"accessibility-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"highContrast\": {\n \"type\": \"boolean\"\n },\n \"reduceMotion\": {\n \"type\": \"boolean\"\n },\n \"announcements\": {\n \"type\": \"object\",\n \"properties\": {\n \"liveRegion\": {\n \"enum\": [\n \"polite\",\n \"assertive\"\n ]\n }\n }\n },\n \"keyboard\": {\n \"type\": \"object\",\n \"properties\": {\n \"shortcuts\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"accessibility\"\n }\n ],\n \"requiresConfirmation\": true,\n \"affectedPaths\": [\n \"accessibility\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n }\n ],\n \"validators\": [\n {\n \"validatorId\": \"target-column-exists\",\n \"level\": \"error\",\n \"code\": \"TB001\",\n \"description\": \"A coluna alvo deve existir na configuração.\"\n },\n {\n \"validatorId\": \"column-field-unique\",\n \"level\": \"error\",\n \"code\": \"TB002\",\n \"description\": \"O identificador técnico da coluna (field) deve ser único.\"\n },\n {\n \"validatorId\": \"renderer-type-supported\",\n \"level\": \"error\",\n \"code\": \"TB003\",\n \"description\": \"O tipo de renderizador deve ser suportado pelo componente.\"\n },\n {\n \"validatorId\": \"renderer-config-match\",\n \"level\": \"error\",\n \"code\": \"TB004\",\n \"description\": \"A configuração do renderizador deve corresponder ao tipo selecionado.\"\n },\n {\n \"validatorId\": \"grouping-fields-exist\",\n \"level\": \"error\",\n \"code\": \"TB005\",\n \"description\": \"Os campos de agrupamento devem existir na definição de colunas.\"\n },\n {\n \"validatorId\": \"filter-fields-exist\",\n \"level\": \"error\",\n \"code\": \"TB018\",\n \"description\": \"Os campos de filtro avançado devem existir no schema request do filtro governado.\"\n },\n {\n \"validatorId\": \"destructive-removal-confirmation\",\n \"level\": \"error\",\n \"code\": \"TB006\",\n \"description\": \"Remoções destrutivas de colunas ou ações exigem confirmação explícita.\"\n },\n {\n \"validatorId\": \"computed-expression-valid\",\n \"level\": \"error\",\n \"code\": \"TB007\",\n \"description\": \"A expressão de cálculo deve ser um AST Json Logic válido.\"\n },\n {\n \"validatorId\": \"remote-resource-binding-safe\",\n \"level\": \"error\",\n \"code\": \"TB008\",\n \"description\": \"A ligação com recurso remoto não deve conter URLs absolutas não permitidas.\"\n },\n {\n \"validatorId\": \"editor-round-trip-preserve\",\n \"level\": \"error\",\n \"code\": \"TB009\",\n \"description\": \"A edição não deve corromper propriedades críticas necessárias para o round-trip do editor.\"\n },\n {\n \"validatorId\": \"toolbar-action-id-unique\",\n \"level\": \"error\",\n \"code\": \"TB010\",\n \"description\": \"O id da ação de toolbar deve ser único em toolbar.actions[]. O efeito append-unique usa este id como chave de deduplicação.\"\n },\n {\n \"validatorId\": \"row-action-id-unique\",\n \"level\": \"error\",\n \"code\": \"TB011\",\n \"description\": \"O id da row action deve ser único em actions.row.actions[]. O efeito append-unique usa este id como chave de deduplicação.\"\n },\n {\n \"validatorId\": \"bulk-action-id-unique\",\n \"level\": \"error\",\n \"code\": \"TB017\",\n \"description\": \"O id da ação em lote deve ser único em actions.bulk.actions[]. O efeito append-unique usa este id como chave de deduplicação.\"\n },\n {\n \"validatorId\": \"format-preset-supported\",\n \"level\": \"error\",\n \"code\": \"TB012\",\n \"description\": \"O formato deve usar um preset canonico publicado em table-ai-capabilities.ts.\"\n },\n {\n \"validatorId\": \"column-width-valid\",\n \"level\": \"error\",\n \"code\": \"TB013\",\n \"description\": \"A largura deve ser auto ou uma medida simples em px, %, rem ou em.\"\n },\n {\n \"validatorId\": \"css-style-safe\",\n \"level\": \"error\",\n \"code\": \"TB014\",\n \"description\": \"Estilos inline devem permanecer em CSS simples e seguro, sem scripts, URLs perigosas ou expressoes dinamicas.\"\n },\n {\n \"validatorId\": \"value-mapping-valid\",\n \"level\": \"error\",\n \"code\": \"TB015\",\n \"description\": \"O mapeamento de valores deve ser um objeto simples com chaves estaveis e labels serializaveis.\"\n },\n {\n \"validatorId\": \"conditional-style-valid\",\n \"level\": \"error\",\n \"code\": \"TB016\",\n \"description\": \"Regras condicionais de coluna devem ter id estavel, condition Json Logic e ao menos cssClass ou style.\"\n },\n {\n \"validatorId\": \"runtime-operation-declared\",\n \"level\": \"error\",\n \"code\": \"TB019\",\n \"description\": \"Operacoes runtime devem usar operationId e input declarados em tableRuntimeOperations sem alterar a configuracao persistida.\"\n }\n ],\n \"roundTripRequirements\": [\n \"preserve-column-order\",\n \"normalize-enum-values\",\n \"maintain-renderer-precedence\",\n \"preserve-meta-ids\"\n ],\n \"presentationAffordances\": {\n \"version\": \"0.1.0\",\n \"componentId\": \"praxis-table\",\n \"defaultTargetKind\": \"column\",\n \"sourceRef\": \"praxis-ui-angular:projects/praxis-table/src/lib/ai/praxis-table-authoring-manifest.ts#presentationAffordances\",\n \"affordances\": [\n {\n \"id\": \"table.column.text-formatting\",\n \"targetKind\": \"column\",\n \"category\": \"format\",\n \"description\": \"Text transforms and masks for textual table columns.\",\n \"options\": [\n \"none\",\n \"uppercase\",\n \"lowercase\",\n \"titlecase\",\n \"capitalize\",\n \"uppercase|truncate|50|...\",\n \"000.000.000-00\"\n ],\n \"appliesToTypes\": [\n \"string\",\n \"text\",\n \"unknown\"\n ],\n \"unknownCompatible\": true\n },\n {\n \"id\": \"table.column.numeric-formatting\",\n \"targetKind\": \"column\",\n \"category\": \"format\",\n \"description\": \"Decimal, currency and percentage formats for numeric table columns.\",\n \"options\": [\n \"1.0-0\",\n \"1.1-1\",\n \"1.2-2\",\n \"1.0-3\",\n \"1.0-0|nosep\",\n \"BRL|symbol|2\",\n \"USD|symbol|2\",\n \"EUR|symbol|2\",\n \"BRL|code|2\",\n \"USD|code|0\",\n \"BRL|symbol|2|nosep\",\n \"EUR|symbol|2|nosep\",\n \"1.0-0|x100\",\n \"1.1-1|x100\",\n \"1.2-2|x100\"\n ],\n \"appliesToTypes\": [\n \"number\",\n \"currency\",\n \"percentage\"\n ],\n \"unknownCompatible\": false\n },\n {\n \"id\": \"table.column.date-formatting\",\n \"targetKind\": \"column\",\n \"category\": \"format\",\n \"description\": \"Date and time formats for date-like table columns.\",\n \"options\": [\n \"shortDate\",\n \"mediumDate\",\n \"longDate\",\n \"fullDate\",\n \"MMM/yyyy\",\n \"shortTime\",\n \"short\",\n \"yyyy-MM-dd\",\n \"dd/MM/yyyy\",\n \"yyyy-MM-dd HH:mm\"\n ],\n \"appliesToTypes\": [\n \"date\",\n \"datetime\",\n \"time\"\n ],\n \"unknownCompatible\": false\n },\n {\n \"id\": \"table.column.boolean-formatting\",\n \"targetKind\": \"column\",\n \"category\": \"format\",\n \"description\": \"Boolean label formats for true/false table columns.\",\n \"options\": [\n \"true-false\",\n \"yes-no\",\n \"active-inactive\",\n \"on-off\",\n \"enabled-disabled\",\n \"custom|Sim|Nao\"\n ],\n \"appliesToTypes\": [\n \"boolean\"\n ],\n \"unknownCompatible\": false\n },\n {\n \"id\": \"table.column.semantic-renderers\",\n \"targetKind\": \"column\",\n \"category\": \"renderer\",\n \"description\": \"Visual renderers for categorical, status or action-oriented table columns.\",\n \"options\": [\n \"badge\",\n \"chip\",\n \"icon\",\n \"link\",\n \"button\",\n \"progress\",\n \"avatar\",\n \"toggle\",\n \"menu\",\n \"rating\",\n \"compose\"\n ],\n \"appliesToTypes\": [\n \"string\",\n \"text\",\n \"boolean\",\n \"number\",\n \"currency\",\n \"percentage\",\n \"date\",\n \"datetime\",\n \"unknown\"\n ],\n \"unknownCompatible\": true\n },\n {\n \"id\": \"table.column.alignment-layout\",\n \"targetKind\": \"column\",\n \"category\": \"layout\",\n \"description\": \"Column alignment and composed cell layout options.\",\n \"options\": [\n \"align:start\",\n \"align:center\",\n \"align:end\",\n \"compose:row\",\n \"compose:column\",\n \"secondary-line\",\n \"prefix\",\n \"suffix\"\n ],\n \"appliesToTypes\": [\n \"string\",\n \"text\",\n \"boolean\",\n \"number\",\n \"currency\",\n \"percentage\",\n \"date\",\n \"datetime\",\n \"unknown\"\n ],\n \"unknownCompatible\": true\n }\n ]\n },\n \"examples\": [\n {\n \"id\": \"add-schema-column\",\n \"request\": \"Adicionar coluna para o campo email com o título Contato\",\n \"operationId\": \"column.add\",\n \"params\": {\n \"field\": \"email\",\n \"header\": \"Contato\",\n \"type\": \"string\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-computed-column\",\n \"request\": \"Criar coluna de idade baseada na data de nascimento\",\n \"operationId\": \"column.computed.add\",\n \"params\": {\n \"field\": \"idade\",\n \"header\": \"Idade\",\n \"expression\": {\n \"yearsSince\": [\n {\n \"var\": \"dataNascimento\"\n }\n ]\n },\n \"outputType\": \"number\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-conditional-badge\",\n \"request\": \"Mostrar badge vermelho na coluna status se o valor for \\\"atrasado\\\"\",\n \"operationId\": \"column.conditionalRenderer.add\",\n \"target\": \"status\",\n \"params\": {\n \"id\": \"badge-atrasado\",\n \"condition\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"atrasado\"\n ]\n },\n \"renderer\": {\n \"type\": \"badge\",\n \"badge\": {\n \"color\": \"warn\",\n \"variant\": \"filled\"\n }\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"enable-export\",\n \"request\": \"Habilitar exportação para Excel e PDF\",\n \"operationId\": \"export.enabled.set\",\n \"params\": {\n \"enabled\": true,\n \"formats\": [\n \"excel\",\n \"pdf\"\n ]\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-row-action\",\n \"request\": \"Adicionar botão de excluir na linha\",\n \"operationId\": \"rowAction.add\",\n \"params\": {\n \"id\": \"delete\",\n \"label\": \"Excluir\",\n \"action\": \"delete\",\n \"icon\": \"delete\",\n \"color\": \"warn\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-row-action-open-route\",\n \"request\": \"Adicionar botão de linha para abrir detalhe com navegação interna\",\n \"operationId\": \"rowAction.add\",\n \"params\": {\n \"id\": \"details\",\n \"label\": \"Detalhes\",\n \"action\": \"navigation.openRoute\",\n \"icon\": \"open_in_new\",\n \"globalAction\": {\n \"actionId\": \"navigation.openRoute\",\n \"payload\": {\n \"path\": \"/clientes/detalhe\",\n \"query\": {\n \"id\": \"${row.id}\"\n }\n }\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"group-by-field\",\n \"request\": \"Agrupar a tabela por departamento\",\n \"operationId\": \"grouping.set\",\n \"params\": {\n \"enabled\": true,\n \"fields\": [\n \"departamento\"\n ]\n },\n \"isPositive\": true\n },\n {\n \"id\": \"reject-invalid-renderer\",\n \"request\": \"Configurar imagem para um renderizador do tipo ícone\",\n \"operationId\": \"column.renderer.set\",\n \"target\": \"avatar\",\n \"params\": {\n \"type\": \"icon\",\n \"image\": {\n \"src\": \"...\"\n }\n },\n \"isPositive\": false\n },\n {\n \"id\": \"set-button-renderer\",\n \"request\": \"Transformar a coluna acoes em botao que executa abrir-detalhe\",\n \"operationId\": \"column.renderer.set\",\n \"target\": \"acoes\",\n \"params\": {\n \"type\": \"button\",\n \"button\": {\n \"label\": \"Abrir\",\n \"action\": {\n \"id\": \"abrir-detalhe\"\n }\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-column-conditional-style\",\n \"request\": \"Destacar a coluna status quando o valor estiver bloqueado\",\n \"operationId\": \"column.conditionalStyle.add\",\n \"target\": \"status\",\n \"params\": {\n \"id\": \"status-bloqueado\",\n \"condition\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"bloqueado\"\n ]\n },\n \"cssClass\": \"status-bloqueado\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-currency-format-preset\",\n \"request\": \"Formatar a coluna total como moeda brasileira\",\n \"operationId\": \"column.format.set\",\n \"target\": \"total\",\n \"params\": {\n \"format\": \"BRL|symbol|2\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-cpf-format-preset\",\n \"request\": \"Formate a coluna CPF\",\n \"operationId\": \"column.format.set\",\n \"target\": \"cpf\",\n \"params\": {\n \"format\": \"000.000.000-00\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-long-date-format-preset\",\n \"request\": \"Mostre a data de admissão por extenso\",\n \"operationId\": \"column.format.set\",\n \"target\": \"dataAdmissao\",\n \"params\": {\n \"format\": \"longDate\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-basic-column-width\",\n \"request\": \"Definir a largura da coluna nome para 240px\",\n \"operationId\": \"column.width.set\",\n \"target\": \"nome\",\n \"params\": {\n \"width\": \"240px\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-salary-align-right\",\n \"request\": \"Alinhe o salário à direita\",\n \"operationId\": \"column.align.set\",\n \"target\": \"salario\",\n \"params\": {\n \"align\": \"right\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"make-name-sticky-start\",\n \"request\": \"Fixe a coluna funcionário no início da tabela\",\n \"operationId\": \"column.sticky.set\",\n \"target\": \"funcionario\",\n \"params\": {\n \"sticky\": \"start\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"disable-cpf-sorting\",\n \"request\": \"Não permita ordenar pela coluna CPF\",\n \"operationId\": \"column.sortable.set\",\n \"target\": \"cpf\",\n \"params\": {\n \"sortable\": false\n },\n \"isPositive\": true\n },\n {\n \"id\": \"enable-department-filter\",\n \"request\": \"Deixe o departamento disponível nos filtros\",\n \"operationId\": \"column.filterable.set\",\n \"target\": \"departamento\",\n \"params\": {\n \"filterable\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"hide-internal-id-column\",\n \"request\": \"Oculte o ID interno da tabela\",\n \"operationId\": \"column.visibility.set\",\n \"target\": \"id\",\n \"params\": {\n \"visible\": false\n },\n \"isPositive\": true\n },\n {\n \"id\": \"map-active-status-labels\",\n \"request\": \"Mostre Sim e Não na coluna ativo\",\n \"operationId\": \"column.valueMapping.set\",\n \"target\": \"ativo\",\n \"params\": {\n \"valueMapping\": {\n \"true\": \"Sim\",\n \"false\": \"Não\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-avatar-chip-renderer\",\n \"request\": \"Corrija o avatar do funcionário e mantenha o nome como chip\",\n \"operationId\": \"column.renderer.set\",\n \"target\": \"funcionario\",\n \"params\": {\n \"type\": \"compose\",\n \"compose\": {\n \"items\": [\n {\n \"type\": \"avatar\",\n \"avatar\": {\n \"srcField\": \"avatarUrl\",\n \"initialsField\": \"funcionario\",\n \"shape\": \"circle\",\n \"backgroundColor\": \"#E3F2FD\",\n \"textColor\": \"#0D47A1\"\n }\n },\n {\n \"type\": \"chip\",\n \"chip\": {\n \"textField\": \"funcionario\",\n \"variant\": \"soft\"\n }\n }\n ]\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"animate-high-salary-row\",\n \"request\": \"Anime suavemente as linhas com salário acima de 30000\",\n \"operationId\": \"row.conditionalRenderer.add\",\n \"params\": {\n \"id\": \"salario-alto-pulse\",\n \"condition\": {\n \">\": [\n {\n \"var\": \"salario\"\n },\n 30000\n ]\n },\n \"animation\": {\n \"preset\": \"pulse-soft\",\n \"trigger\": \"onAppear\",\n \"intensity\": \"subtle\",\n \"repeat\": \"once\",\n \"durationMs\": 1200\n },\n \"description\": \"Destaca linhas de salário alto sem alterar os dados.\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"style-low-salary-cell\",\n \"request\": \"Para salários menores que 30000, use fundo laranja claro\",\n \"operationId\": \"column.conditionalStyle.add\",\n \"target\": \"salario\",\n \"params\": {\n \"id\": \"salario-baixo-laranja\",\n \"condition\": {\n \"<\": [\n {\n \"var\": \"salario\"\n },\n 30000\n ]\n },\n \"style\": {\n \"backgroundColor\": \"#FFF3E0\",\n \"color\": \"#8A4B00\"\n },\n \"tooltip\": {\n \"text\": \"Salário abaixo do recorte configurado\",\n \"position\": \"top\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"enable-advanced-filters-human\",\n \"request\": \"Ative filtros avançados e deixe CPF e departamento sempre visíveis\",\n \"operationId\": \"filter.advanced.configure\",\n \"params\": {\n \"enabled\": true,\n \"queryBuilder\": true,\n \"savePresets\": true,\n \"settings\": {\n \"mode\": \"filter\",\n \"showAdvanced\": true,\n \"alwaysVisibleFields\": [\n \"cpf\",\n \"departamento\"\n ]\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-salary-to-advanced-filters-human\",\n \"request\": \"Inclua também Salário nesses filtros\",\n \"operationId\": \"filter.advanced.fields.add\",\n \"params\": {\n \"fields\": [\n \"salario\"\n ],\n \"selected\": true,\n \"alwaysVisible\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"remove-active-from-advanced-filters-human\",\n \"request\": \"Agora remova Ativo desses filtros\",\n \"operationId\": \"filter.advanced.fields.remove\",\n \"params\": {\n \"fields\": [\n \"ativo\"\n ],\n \"selected\": true,\n \"alwaysVisible\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"enable-table-filters-human\",\n \"request\": \"Habilite os filtros dinâmicos da tabela\",\n \"operationId\": \"behavior.filtering.configure\",\n \"params\": {\n \"enabled\": true,\n \"strategy\": \"client\",\n \"debounceMs\": 250\n },\n \"isPositive\": true\n },\n {\n \"id\": \"compact-density-human\",\n \"request\": \"Deixe a tabela mais compacta\",\n \"operationId\": \"appearance.density.set\",\n \"params\": {\n \"density\": \"compact\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"toolbar-search-refresh-human\",\n \"request\": \"Mostre busca e botão de atualizar na toolbar\",\n \"operationId\": \"toolbar.configure\",\n \"params\": {\n \"visible\": true,\n \"showSearch\": true,\n \"showRefresh\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-server-pagination\",\n \"request\": \"Usar paginacao no servidor com 50 linhas por pagina\",\n \"operationId\": \"behavior.pagination.configure\",\n \"params\": {\n \"enabled\": true,\n \"strategy\": \"server\",\n \"pageSize\": 50,\n \"position\": \"bottom\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-default-sorting\",\n \"request\": \"Ordenar inicialmente por data de criacao decrescente\",\n \"operationId\": \"behavior.sorting.configure\",\n \"params\": {\n \"enabled\": true,\n \"strategy\": \"server\",\n \"defaultSort\": {\n \"field\": \"createdAt\",\n \"direction\": \"desc\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-bulk-actions\",\n \"request\": \"Habilitar acoes em lote na toolbar\",\n \"operationId\": \"actions.bulk.configure\",\n \"params\": {\n \"enabled\": true,\n \"position\": \"toolbar\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-localization\",\n \"request\": \"Configurar a tabela para portugues do Brasil\",\n \"operationId\": \"localization.configure\",\n \"params\": {\n \"locale\": \"pt-BR\",\n \"direction\": \"ltr\",\n \"dateTime\": {\n \"dateFormat\": \"dd/MM/yyyy\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-accessibility\",\n \"request\": \"Ativar alto contraste e reduzir animacoes\",\n \"operationId\": \"accessibility.configure\",\n \"params\": {\n \"enabled\": true,\n \"highContrast\": true,\n \"reduceMotion\": true,\n \"announcements\": {\n \"liveRegion\": \"polite\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"require-removal-confirmation\",\n \"request\": \"Remover a coluna nome\",\n \"operationId\": \"column.remove\",\n \"target\": \"nome\",\n \"isPositive\": true\n }\n ]\n}",
|
|
21103
|
+
"content": "{\n \"schemaVersion\": \"1.0.0\",\n \"componentId\": \"praxis-table\",\n \"ownerPackage\": \"@praxisui/table\",\n \"configSchemaId\": \"TableConfig\",\n \"manifestVersion\": \"2.0.0\",\n \"runtimeInputs\": [\n {\n \"name\": \"config\",\n \"type\": \"TableConfig\",\n \"description\": \"Configuração completa da tabela\"\n },\n {\n \"name\": \"data\",\n \"type\": \"any[]\",\n \"description\": \"Dados a serem exibidos (modo client-side)\"\n },\n {\n \"name\": \"resourcePath\",\n \"type\": \"string\",\n \"description\": \"Caminho do recurso (API base)\"\n },\n {\n \"name\": \"queryContext\",\n \"type\": \"PraxisDataQueryContext\",\n \"description\": \"Contexto de consulta declarativo\"\n },\n {\n \"name\": \"title\",\n \"type\": \"string\",\n \"description\": \"Título da tabela\"\n },\n {\n \"name\": \"subtitle\",\n \"type\": \"string\",\n \"description\": \"Subtítulo da tabela\"\n },\n {\n \"name\": \"enableCustomization\",\n \"type\": \"boolean\",\n \"description\": \"Habilita modo de edição\"\n }\n ],\n \"editableTargets\": [\n {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"description\": \"Colunas base da tabela\"\n },\n {\n \"kind\": \"computedColumn\",\n \"resolver\": \"column-by-field\",\n \"description\": \"Colunas calculadas\"\n },\n {\n \"kind\": \"renderer\",\n \"resolver\": \"renderer-in-column\",\n \"description\": \"Renderizador de célula\"\n },\n {\n \"kind\": \"conditionalRenderer\",\n \"resolver\": \"conditional-renderer-in-column\",\n \"description\": \"Renderizadores condicionais\"\n },\n {\n \"kind\": \"rowAction\",\n \"resolver\": \"action-in-row-config\",\n \"description\": \"Ações por linha\"\n },\n {\n \"kind\": \"toolbarAction\",\n \"resolver\": \"action-in-toolbar-config\",\n \"description\": \"Ações na barra de ferramentas\"\n },\n {\n \"kind\": \"toolbar\",\n \"resolver\": \"toolbar-config\",\n \"description\": \"Configuração da barra de ferramentas\"\n },\n {\n \"kind\": \"filter\",\n \"resolver\": \"filter-config\",\n \"description\": \"Configuração de filtragem\"\n },\n {\n \"kind\": \"grouping\",\n \"resolver\": \"grouping-config\",\n \"description\": \"Configuração de agrupamento\"\n },\n {\n \"kind\": \"selection\",\n \"resolver\": \"selection-config\",\n \"description\": \"Configuração de seleção\"\n },\n {\n \"kind\": \"export\",\n \"resolver\": \"export-config\",\n \"description\": \"Configuração de exportação\"\n },\n {\n \"kind\": \"appearance\",\n \"resolver\": \"appearance-config\",\n \"description\": \"Configurações visuais\"\n },\n {\n \"kind\": \"expansion\",\n \"resolver\": \"expansion-config\",\n \"description\": \"Configuração de detalhe/expansão\"\n },\n {\n \"kind\": \"rule\",\n \"resolver\": \"style-rule-in-column-or-row\",\n \"description\": \"Regras de estilo ou comportamento\"\n },\n {\n \"kind\": \"meta\",\n \"resolver\": \"table-meta-config\",\n \"description\": \"Metadados da configuracao\"\n },\n {\n \"kind\": \"bulkAction\",\n \"resolver\": \"action-in-bulk-config\",\n \"description\": \"Acoes em lote\"\n },\n {\n \"kind\": \"contextAction\",\n \"resolver\": \"action-in-context-config\",\n \"description\": \"Acoes de menu contextual\"\n },\n {\n \"kind\": \"pagination\",\n \"resolver\": \"pagination-config\",\n \"description\": \"Configuracao de paginacao\"\n },\n {\n \"kind\": \"sorting\",\n \"resolver\": \"sorting-config\",\n \"description\": \"Configuracao de ordenacao\"\n },\n {\n \"kind\": \"interaction\",\n \"resolver\": \"interaction-config\",\n \"description\": \"Configuracao de interacao\"\n },\n {\n \"kind\": \"loading\",\n \"resolver\": \"loading-config\",\n \"description\": \"Estados de carregamento\"\n },\n {\n \"kind\": \"emptyState\",\n \"resolver\": \"empty-state-config\",\n \"description\": \"Estado vazio\"\n },\n {\n \"kind\": \"aiAssistant\",\n \"resolver\": \"ai-assistant-config\",\n \"description\": \"Config path ai.assistant.enabled controlling the embedded table AI assistant entrypoint and session.\"\n },\n {\n \"kind\": \"resizing\",\n \"resolver\": \"resizing-config\",\n \"description\": \"Redimensionamento de colunas\"\n },\n {\n \"kind\": \"dragging\",\n \"resolver\": \"dragging-config\",\n \"description\": \"Reorganizacao por drag and drop\"\n },\n {\n \"kind\": \"editing\",\n \"resolver\": \"editing-config\",\n \"description\": \"Modo de edicao\"\n },\n {\n \"kind\": \"messages\",\n \"resolver\": \"messages-config\",\n \"description\": \"Mensagens da tabela\"\n },\n {\n \"kind\": \"localization\",\n \"resolver\": \"localization-config\",\n \"description\": \"Localizacao e formatos regionais\"\n },\n {\n \"kind\": \"performance\",\n \"resolver\": \"performance-config\",\n \"description\": \"Configuracoes de performance\"\n },\n {\n \"kind\": \"data\",\n \"resolver\": \"data-config\",\n \"description\": \"Configuracoes de dados\"\n },\n {\n \"kind\": \"runtimeOperation\",\n \"resolver\": \"table-runtime-operation-contract\",\n \"description\": \"Operacoes runtime revisaveis sem mutar a configuracao persistida\"\n },\n {\n \"kind\": \"accessibility\",\n \"resolver\": \"accessibility-config\",\n \"description\": \"Acessibilidade\"\n }\n ],\n \"operations\": [\n {\n \"operationId\": \"column.add\",\n \"title\": \"Adicionar coluna\",\n \"scope\": \"global\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"field\",\n \"header\"\n ],\n \"properties\": {\n \"field\": {\n \"type\": \"string\"\n },\n \"header\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"enum\": [\n \"string\",\n \"number\",\n \"date\",\n \"boolean\",\n \"currency\",\n \"percentage\",\n \"custom\"\n ],\n \"default\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"column-field-unique\"\n ],\n \"affectedPaths\": [\n \"columns[]\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"column.remove\",\n \"title\": \"Remover coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\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\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"destructive-removal-confirmation\"\n ],\n \"affectedPaths\": [\n \"columns[]\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.header.set\",\n \"title\": \"Definir cabeçalho\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"header\"\n ],\n \"properties\": {\n \"header\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].header\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.type.set\",\n \"title\": \"Definir tipo de dado\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {}\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].type\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.format.set\",\n \"title\": \"Definir formato\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"format\"\n ],\n \"properties\": {\n \"format\": {\n \"type\": \"string\",\n \"enum\": [\n \"shortDate\",\n \"mediumDate\",\n \"longDate\",\n \"fullDate\",\n \"MMM/yyyy\",\n \"shortTime\",\n \"short\",\n \"yyyy-MM-dd\",\n \"dd/MM/yyyy\",\n \"yyyy-MM-dd HH:mm\",\n \"1.0-0\",\n \"1.1-1\",\n \"1.2-2\",\n \"1.0-3\",\n \"1.0-0|nosep\",\n \"BRL|symbol|2\",\n \"USD|symbol|2\",\n \"EUR|symbol|2\",\n \"BRL|code|2\",\n \"USD|code|0\",\n \"BRL|symbol|2|nosep\",\n \"EUR|symbol|2|nosep\",\n \"1.0-0|x100\",\n \"1.1-1|x100\",\n \"1.2-2|x100\",\n \"none\",\n \"uppercase\",\n \"lowercase\",\n \"titlecase\",\n \"capitalize\",\n \"uppercase|truncate|50|...\",\n \"000.000.000-00\",\n \"true-false\",\n \"yes-no\",\n \"active-inactive\",\n \"on-off\",\n \"enabled-disabled\",\n \"custom|Sim|Nao\"\n ],\n \"description\": \"Preset canônico do DataFormattingService.\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"format-preset-supported\"\n ],\n \"affectedPaths\": [\n \"columns[].format\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.width.set\",\n \"title\": \"Definir largura da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"width\"\n ],\n \"properties\": {\n \"width\": {\n \"type\": \"string\",\n \"pattern\": \"^(auto|\\\\d+(px|%|rem|em))$\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"column-width-valid\"\n ],\n \"affectedPaths\": [\n \"columns[].width\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.align.set\",\n \"title\": \"Definir alinhamento da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"align\"\n ],\n \"properties\": {\n \"align\": {\n \"enum\": [\n \"left\",\n \"center\",\n \"right\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].align\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.sticky.set\",\n \"title\": \"Definir sticky da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"sticky\"\n ],\n \"properties\": {\n \"sticky\": {\n \"enum\": [\n \"start\",\n \"end\",\n true,\n false\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].sticky\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.sortable.set\",\n \"title\": \"Definir ordenação da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"sortable\"\n ],\n \"properties\": {\n \"sortable\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].sortable\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.filterable.set\",\n \"title\": \"Definir filtro da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"filterable\"\n ],\n \"properties\": {\n \"filterable\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].filterable\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.style.set\",\n \"title\": \"Definir estilo da célula\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"style\"\n ],\n \"properties\": {\n \"style\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"css-style-safe\"\n ],\n \"affectedPaths\": [\n \"columns[].style\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.headerStyle.set\",\n \"title\": \"Definir estilo do cabeçalho\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"headerStyle\"\n ],\n \"properties\": {\n \"headerStyle\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"css-style-safe\"\n ],\n \"affectedPaths\": [\n \"columns[].headerStyle\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.valueMapping.set\",\n \"title\": \"Definir mapeamento de valores\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"valueMapping\"\n ],\n \"properties\": {\n \"valueMapping\": {\n \"type\": \"object\",\n \"minProperties\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"value-mapping-valid\"\n ],\n \"affectedPaths\": [\n \"columns[].valueMapping\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.order.set\",\n \"title\": \"Definir ordem visual\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"order\"\n ],\n \"properties\": {\n \"order\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].order\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.visibility.set\",\n \"title\": \"Definir visibilidade\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"visible\"\n ],\n \"properties\": {\n \"visible\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].visible\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.computed.add\",\n \"title\": \"Adicionar coluna calculada\",\n \"scope\": \"global\",\n \"targetKind\": \"computedColumn\",\n \"target\": {\n \"kind\": \"computedColumn\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"field\",\n \"header\",\n \"expression\"\n ],\n \"properties\": {\n \"field\": {\n \"type\": \"string\",\n \"description\": \"Stable camelCase field id for the new computed column. When the user supplies a header/name, derive this id from that header instead of asking for clarification.\"\n },\n \"header\": {\n \"type\": \"string\",\n \"description\": \"User-facing label for the computed column.\"\n },\n \"expression\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"outputType\": {}\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"column-field-unique\",\n \"computed-expression-valid\"\n ],\n \"affectedPaths\": [\n \"columns[]\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"column.renderer.set\",\n \"title\": \"Definir renderizador\",\n \"scope\": \"column\",\n \"targetKind\": \"renderer\",\n \"target\": {\n \"kind\": \"renderer\",\n \"resolver\": \"renderer-in-column\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {\n \"enum\": [\n \"icon\",\n \"image\",\n \"badge\",\n \"link\",\n \"button\",\n \"chip\",\n \"progress\",\n \"avatar\",\n \"toggle\",\n \"menu\",\n \"rating\",\n \"html\",\n \"compose\"\n ]\n },\n \"typeExpr\": {\n \"type\": \"string\"\n },\n \"button\": {\n \"type\": \"object\",\n \"required\": [\n \"action\"\n ],\n \"properties\": {\n \"label\": {\n \"type\": \"string\"\n },\n \"labelField\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"enum\": [\n \"primary\",\n \"accent\",\n \"warn\"\n ]\n },\n \"variant\": {\n \"enum\": [\n \"filled\",\n \"outlined\",\n \"text\"\n ]\n },\n \"size\": {\n \"enum\": [\n \"sm\",\n \"md\",\n \"lg\"\n ]\n },\n \"ariaLabel\": {\n \"type\": \"string\"\n },\n \"disabledCondition\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"action\": {\n \"type\": \"object\",\n \"required\": [\n \"id\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"payloadExpr\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"menu\": {\n \"type\": \"object\",\n \"required\": [\n \"itemsExpr\"\n ],\n \"properties\": {\n \"itemsExpr\": {\n \"type\": \"string\"\n },\n \"ariaLabel\": {\n \"type\": \"string\"\n }\n }\n },\n \"link\": {\n \"type\": \"object\",\n \"anyOf\": [\n {\n \"required\": [\n \"href\"\n ]\n },\n {\n \"required\": [\n \"hrefField\"\n ]\n }\n ],\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n },\n \"textField\": {\n \"type\": \"string\"\n },\n \"href\": {\n \"type\": \"string\"\n },\n \"hrefField\": {\n \"type\": \"string\"\n },\n \"target\": {\n \"enum\": [\n \"_blank\",\n \"_self\",\n \"_parent\",\n \"_top\"\n ]\n },\n \"rel\": {\n \"type\": \"string\"\n }\n }\n },\n \"progress\": {\n \"type\": \"object\",\n \"required\": [\n \"valueExpr\"\n ],\n \"properties\": {\n \"valueExpr\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"showLabel\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"badge\": {\n \"type\": \"object\",\n \"anyOf\": [\n {\n \"required\": [\n \"text\"\n ]\n },\n {\n \"required\": [\n \"textField\"\n ]\n }\n ],\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n },\n \"textField\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"variant\": {\n \"enum\": [\n \"filled\",\n \"outlined\",\n \"soft\"\n ]\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"tooltip\": {\n \"type\": \"object\",\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n },\n \"position\": {\n \"enum\": [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\"\n ]\n },\n \"bgColor\": {\n \"type\": \"string\"\n },\n \"delayMs\": {\n \"type\": \"number\"\n }\n }\n }\n }\n },\n \"chip\": {\n \"type\": \"object\",\n \"anyOf\": [\n {\n \"required\": [\n \"text\"\n ]\n },\n {\n \"required\": [\n \"textField\"\n ]\n }\n ],\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n },\n \"textField\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"variant\": {\n \"enum\": [\n \"filled\",\n \"outlined\"\n ]\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"tooltip\": {\n \"type\": \"object\",\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n },\n \"position\": {\n \"enum\": [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\"\n ]\n },\n \"bgColor\": {\n \"type\": \"string\"\n },\n \"delayMs\": {\n \"type\": \"number\"\n }\n }\n }\n }\n },\n \"icon\": {\n \"type\": \"object\",\n \"anyOf\": [\n {\n \"required\": [\n \"name\"\n ]\n },\n {\n \"required\": [\n \"nameField\"\n ]\n }\n ],\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"nameField\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"size\": {\n \"type\": \"number\"\n },\n \"ariaLabel\": {\n \"type\": \"string\"\n }\n }\n },\n \"image\": {\n \"type\": \"object\",\n \"anyOf\": [\n {\n \"required\": [\n \"src\"\n ]\n },\n {\n \"required\": [\n \"srcField\"\n ]\n }\n ],\n \"properties\": {\n \"src\": {\n \"type\": \"string\"\n },\n \"srcField\": {\n \"type\": \"string\"\n },\n \"alt\": {\n \"type\": \"string\"\n },\n \"altField\": {\n \"type\": \"string\"\n },\n \"width\": {\n \"type\": \"number\"\n },\n \"height\": {\n \"type\": \"number\"\n },\n \"shape\": {\n \"enum\": [\n \"square\",\n \"rounded\",\n \"circle\"\n ]\n },\n \"fit\": {\n \"enum\": [\n \"cover\",\n \"contain\"\n ]\n },\n \"lazy\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"avatar\": {\n \"type\": \"object\",\n \"anyOf\": [\n {\n \"required\": [\n \"src\"\n ]\n },\n {\n \"required\": [\n \"srcField\"\n ]\n },\n {\n \"required\": [\n \"initialsField\"\n ]\n },\n {\n \"required\": [\n \"initialsExpr\"\n ]\n }\n ],\n \"properties\": {\n \"src\": {\n \"type\": \"string\"\n },\n \"srcField\": {\n \"type\": \"string\"\n },\n \"alt\": {\n \"type\": \"string\"\n },\n \"altField\": {\n \"type\": \"string\"\n },\n \"initialsField\": {\n \"type\": \"string\"\n },\n \"initialsExpr\": {\n \"type\": \"string\"\n },\n \"shape\": {\n \"enum\": [\n \"circle\",\n \"square\",\n \"rounded\"\n ]\n },\n \"size\": {\n \"type\": \"number\"\n },\n \"backgroundColor\": {\n \"type\": \"string\"\n },\n \"textColor\": {\n \"type\": \"string\"\n }\n }\n },\n \"toggle\": {\n \"type\": \"object\",\n \"required\": [\n \"stateExpr\",\n \"action\"\n ],\n \"properties\": {\n \"stateExpr\": {\n \"type\": \"string\"\n },\n \"disabledCondition\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"ariaLabel\": {\n \"type\": \"string\"\n },\n \"action\": {\n \"type\": \"object\",\n \"required\": [\n \"id\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"payloadExpr\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"rating\": {\n \"type\": \"object\",\n \"required\": [\n \"valueExpr\"\n ],\n \"properties\": {\n \"valueExpr\": {\n \"type\": \"string\"\n },\n \"max\": {\n \"type\": \"number\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"outlineColor\": {\n \"type\": \"string\"\n },\n \"size\": {\n \"enum\": [\n \"small\",\n \"medium\",\n \"large\"\n ]\n },\n \"ariaLabel\": {\n \"type\": \"string\"\n }\n }\n },\n \"html\": {\n \"type\": \"object\",\n \"required\": [\n \"template\"\n ],\n \"properties\": {\n \"template\": {\n \"type\": \"string\"\n },\n \"sanitize\": {\n \"enum\": [\n \"strict\",\n \"basic\"\n ]\n },\n \"emptyFallback\": {\n \"type\": \"string\"\n }\n }\n },\n \"compose\": {\n \"type\": \"object\",\n \"required\": [\n \"items\"\n ],\n \"properties\": {\n \"items\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"type\"\n ],\n \"properties\": {\n \"type\": {}\n }\n }\n },\n \"layout\": {\n \"type\": \"object\",\n \"properties\": {\n \"gap\": {\n \"type\": \"number\"\n },\n \"direction\": {\n \"enum\": [\n \"row\",\n \"column\"\n ]\n },\n \"align\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\"\n ]\n },\n \"wrap\": {\n \"type\": \"boolean\"\n },\n \"ellipsis\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n }\n },\n \"allOf\": [\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"button\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"button\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"menu\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"menu\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"link\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"link\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"progress\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"progress\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"badge\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"badge\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"chip\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"chip\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"icon\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"icon\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"image\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"image\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"avatar\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"avatar\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"toggle\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"toggle\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"rating\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"rating\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"html\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"html\"\n ]\n }\n },\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"compose\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"compose\"\n ]\n }\n }\n ]\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"columns[].renderer\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"renderer-type-supported\",\n \"renderer-config-match\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"columns[].renderer\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.conditionalRenderer.add\",\n \"title\": \"Adicionar renderizador condicional\",\n \"scope\": \"column\",\n \"targetKind\": \"conditionalRenderer\",\n \"target\": {\n \"kind\": \"conditionalRenderer\",\n \"resolver\": \"conditional-renderer-in-column\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"condition\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"description\": \"Identificador estável do renderer condicional (usado para deduplicação)\"\n },\n \"condition\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"tooltip\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"text\": {\n \"type\": \"string\"\n },\n \"position\": {\n \"enum\": [\n \"top\",\n \"right\",\n \"bottom\",\n \"left\"\n ]\n },\n \"bgColor\": {\n \"type\": \"string\"\n },\n \"delayMs\": {\n \"type\": \"number\"\n }\n }\n },\n \"animation\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\",\n \"description\": \"false desativa a animacao sem remover a regra.\"\n },\n \"preset\": {\n \"enum\": [\n \"info-soft\",\n \"success-confirm\",\n \"warning-attention\",\n \"critical-alert\",\n \"audit-review\",\n \"sync-pending\",\n \"pulse-soft\",\n \"fade-soft\",\n \"sla-warning\",\n \"sla-breach\",\n \"risk-elevated\",\n \"risk-critical\",\n \"audit-warning\",\n \"sync-warning\"\n ],\n \"description\": \"Preset semantico recomendado. Preferir preset antes de type bruto.\"\n },\n \"type\": {\n \"enum\": [\n \"pulse\",\n \"blink\",\n \"grow\",\n \"fade\",\n \"slide-in\",\n \"border-pulse\"\n ]\n },\n \"durationMs\": {\n \"type\": \"number\"\n },\n \"trigger\": {\n \"enum\": [\n \"onChange\",\n \"onAppear\",\n \"onHover\",\n \"onConditionEnter\",\n \"onConditionExit\",\n \"onDataRefresh\"\n ]\n },\n \"repeat\": {\n \"oneOf\": [\n {\n \"enum\": [\n \"once\",\n \"loop\",\n \"infinite\"\n ]\n },\n {\n \"type\": \"number\"\n }\n ]\n },\n \"delayMs\": {\n \"type\": \"number\"\n },\n \"intensity\": {\n \"enum\": [\n \"subtle\",\n \"normal\",\n \"strong\"\n ]\n }\n }\n },\n \"effects\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"scope\": {\n \"enum\": [\n \"cell\",\n \"row\",\n \"column\",\n \"table\"\n ]\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"estilo\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"color\": {\n \"type\": \"string\"\n },\n \"bgColor\": {\n \"type\": \"string\"\n },\n \"bold\": {\n \"type\": \"boolean\"\n },\n \"italic\": {\n \"type\": \"boolean\"\n },\n \"underline\": {\n \"type\": \"boolean\"\n },\n \"transform\": {\n \"enum\": [\n \"uppercase\",\n \"lowercase\",\n \"capitalize\",\n null\n ]\n },\n \"opacity\": {\n \"type\": \"number\"\n },\n \"fontScale\": {\n \"type\": \"number\"\n }\n }\n },\n \"layout\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"border\": {\n \"enum\": [\n \"none\",\n \"left\",\n \"right\",\n \"top\",\n \"bottom\",\n \"all\"\n ]\n },\n \"borderColor\": {\n \"type\": \"string\"\n },\n \"borderWidth\": {\n \"type\": \"number\"\n },\n \"padding\": {\n \"type\": \"number\"\n },\n \"align\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\"\n ]\n },\n \"elevation\": {\n \"type\": \"number\"\n }\n }\n },\n \"iconBadge\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"icon\": {\n \"type\": \"string\"\n },\n \"iconColor\": {\n \"type\": \"string\"\n },\n \"iconPos\": {\n \"enum\": [\n \"before\",\n \"after\",\n \"overlay\"\n ]\n },\n \"badgeText\": {\n \"type\": \"string\"\n },\n \"badgeStyle\": {\n \"enum\": [\n \"solid\",\n \"soft\",\n \"outline\"\n ]\n },\n \"badgeColor\": {\n \"type\": \"string\"\n }\n }\n },\n \"background\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"color\": {\n \"type\": \"string\"\n },\n \"gradient\": {\n \"type\": \"string\"\n },\n \"alpha\": {\n \"type\": \"number\"\n },\n \"blur\": {\n \"type\": \"number\"\n }\n }\n },\n \"cssClass\": {\n \"type\": \"string\"\n },\n \"inlineStyle\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"description\": {\n \"type\": \"string\"\n }\n },\n \"anyOf\": [\n {\n \"required\": [\n \"renderer\"\n ]\n },\n {\n \"required\": [\n \"tooltip\"\n ]\n },\n {\n \"required\": [\n \"animation\"\n ]\n },\n {\n \"required\": [\n \"effects\"\n ]\n }\n ]\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"columns[].conditionalRenderers[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"computed-expression-valid\",\n \"renderer-config-match\"\n ],\n \"affectedPaths\": [\n \"columns[].conditionalRenderers[]\",\n \"columns[].conditionalRenderers[].tooltip\",\n \"columns[].conditionalRenderers[].animation\",\n \"columns[].conditionalRenderers[].effects\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.conditionalStyle.add\",\n \"title\": \"Adicionar regra de estilo condicional na coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"rule\",\n \"target\": {\n \"kind\": \"rule\",\n \"resolver\": \"style-rule-in-column-or-row\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"condition\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"description\": \"Identificador estável da regra de estilo da coluna\"\n },\n \"condition\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"cssClass\": {\n \"type\": \"string\"\n },\n \"style\": {\n \"type\": \"object\"\n },\n \"tooltip\": {\n \"type\": \"object\"\n },\n \"effects\": {\n \"type\": \"array\"\n },\n \"description\": {\n \"type\": \"string\"\n }\n },\n \"anyOf\": [\n {\n \"required\": [\n \"cssClass\"\n ]\n },\n {\n \"required\": [\n \"style\"\n ]\n },\n {\n \"required\": [\n \"tooltip\"\n ]\n },\n {\n \"required\": [\n \"effects\"\n ]\n }\n ]\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"columns[].conditionalStyles[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"computed-expression-valid\",\n \"conditional-style-valid\"\n ],\n \"affectedPaths\": [\n \"columns[].conditionalStyles[]\",\n \"columns[].conditionalStyles[].effects\",\n \"columns[].conditionalStyles[].tooltip\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"row.styleRule.add\",\n \"title\": \"Adicionar regra de estilo de linha\",\n \"scope\": \"global\",\n \"targetKind\": \"rule\",\n \"target\": {\n \"kind\": \"rule\",\n \"resolver\": \"style-rule-in-column-or-row\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"condition\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"description\": \"Identificador estável da regra (usado para deduplicação via append-unique)\"\n },\n \"condition\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"style\": {\n \"type\": \"object\",\n \"description\": \"Estilo CSS (Record<string, string>)\"\n },\n \"cssClass\": {\n \"type\": \"string\"\n },\n \"effects\": {\n \"type\": \"array\"\n },\n \"description\": {\n \"type\": \"string\"\n }\n },\n \"anyOf\": [\n {\n \"required\": [\n \"cssClass\"\n ]\n },\n {\n \"required\": [\n \"style\"\n ]\n },\n {\n \"required\": [\n \"effects\"\n ]\n }\n ]\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"rowConditionalStyles[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"computed-expression-valid\"\n ],\n \"affectedPaths\": [\n \"rowConditionalStyles[]\",\n \"rowConditionalStyles[].effects\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"row.conditionalRenderer.add\",\n \"title\": \"Adicionar renderizador condicional de linha\",\n \"scope\": \"global\",\n \"targetKind\": \"conditionalRenderer\",\n \"target\": {\n \"kind\": \"conditionalRenderer\",\n \"resolver\": \"conditional-renderer-in-row\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"condition\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"description\": \"Identificador estavel da regra de renderer de linha\"\n },\n \"condition\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"tooltip\": {\n \"type\": \"object\",\n \"description\": \"Tooltip de linha\"\n },\n \"effects\": {\n \"type\": \"array\"\n },\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"description\": {\n \"type\": \"string\"\n }\n },\n \"anyOf\": [\n {\n \"required\": [\n \"tooltip\"\n ]\n },\n {\n \"required\": [\n \"animation\"\n ]\n },\n {\n \"required\": [\n \"effects\"\n ]\n }\n ]\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"rowConditionalRenderers[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"computed-expression-valid\"\n ],\n \"affectedPaths\": [\n \"rowConditionalRenderers[]\",\n \"rowConditionalRenderers[].condition\",\n \"rowConditionalRenderers[].tooltip\",\n \"rowConditionalRenderers[].animation\",\n \"rowConditionalRenderers[].effects\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"toolbar.visibility.set\",\n \"title\": \"Definir visibilidade da toolbar\",\n \"scope\": \"global\",\n \"targetKind\": \"toolbar\",\n \"target\": {\n \"kind\": \"toolbar\",\n \"resolver\": \"toolbar-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"visible\"\n ],\n \"properties\": {\n \"visible\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"toolbar\"\n }\n ],\n \"affectedPaths\": [\n \"toolbar.visible\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"toolbar.action.add\",\n \"title\": \"Adicionar ação na toolbar\",\n \"scope\": \"global\",\n \"targetKind\": \"toolbarAction\",\n \"target\": {\n \"kind\": \"toolbarAction\",\n \"resolver\": \"action-in-toolbar-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"label\",\n \"action\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"action\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"type\": {\n \"enum\": [\n \"button\",\n \"icon\",\n \"menu\"\n ],\n \"default\": \"button\"\n },\n \"visibleWhen\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"globalAction\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"actionId\": {\n \"type\": \"string\",\n \"enum\": [\n \"toast.success\",\n \"toast.error\",\n \"dialog.alert\",\n \"dialog.open\",\n \"navigation.openExternal\",\n \"navigation.openRoute\",\n \"api.post\",\n \"api.patch\"\n ]\n },\n \"payload\": {\n \"type\": \"object\"\n },\n \"payloadExpr\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"kind\",\n \"globalAction\"\n ],\n \"additionalProperties\": false,\n \"properties\": {\n \"kind\": {\n \"enum\": [\n \"global-action\"\n ]\n }\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"toolbar.actions[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"toolbar-action-id-unique\"\n ],\n \"affectedPaths\": [\n \"toolbar.actions[]\",\n \"toolbar.actions[].visibleWhen\",\n \"toolbar.actions[].effects\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"rowAction.add\",\n \"title\": \"Adicionar ação de linha\",\n \"scope\": \"global\",\n \"targetKind\": \"rowAction\",\n \"target\": {\n \"kind\": \"rowAction\",\n \"resolver\": \"action-in-row-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"label\",\n \"action\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"action\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"visibleWhen\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"disabledWhen\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"recordSurface\": {\n \"type\": \"object\",\n \"description\": \"ResourceSurfaceCatalogItem canonico preservado para abrir uma superficie relacionada ao registro da linha clicada.\"\n },\n \"effects\": {\n \"type\": \"array\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"actions.row.actions[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"row-action-id-unique\"\n ],\n \"affectedPaths\": [\n \"actions.row.actions[]\",\n \"actions.row.actions[].visibleWhen\",\n \"actions.row.actions[].disabledWhen\",\n \"actions.row.actions[].effects\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"bulkAction.add\",\n \"title\": \"Adicionar ação em lote\",\n \"scope\": \"global\",\n \"targetKind\": \"bulkAction\",\n \"target\": {\n \"kind\": \"bulkAction\",\n \"resolver\": \"action-in-bulk-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"id\",\n \"label\",\n \"action\"\n ],\n \"properties\": {\n \"id\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"action\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"color\": {\n \"type\": \"string\"\n },\n \"effects\": {\n \"type\": \"array\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"append-unique\",\n \"path\": \"actions.bulk.actions[]\",\n \"key\": \"id\"\n }\n ],\n \"validators\": [\n \"bulk-action-id-unique\"\n ],\n \"affectedPaths\": [\n \"actions.bulk.actions[]\",\n \"actions.bulk.actions[].effects\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"export.enabled.set\",\n \"title\": \"Habilitar exportação\",\n \"scope\": \"global\",\n \"targetKind\": \"export\",\n \"target\": {\n \"kind\": \"export\",\n \"resolver\": \"export-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"enabled\"\n ],\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"formats\": {\n \"type\": \"array\",\n \"items\": {\n \"enum\": [\n \"excel\",\n \"pdf\",\n \"csv\",\n \"json\"\n ]\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"export\"\n }\n ],\n \"affectedPaths\": [\n \"export.enabled\",\n \"export.formats\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"filter.advanced.configure\",\n \"title\": \"Configurar filtros avançados\",\n \"scope\": \"global\",\n \"targetKind\": \"filter\",\n \"target\": {\n \"kind\": \"filter\",\n \"resolver\": \"filter-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"enabled\"\n ],\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"queryBuilder\": {\n \"type\": \"boolean\"\n },\n \"savePresets\": {\n \"type\": \"boolean\"\n },\n \"settings\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"filter\"\n ]\n },\n \"showAdvanced\": {\n \"type\": \"boolean\"\n },\n \"allowSaveTags\": {\n \"type\": \"boolean\"\n },\n \"alwaysVisibleFields\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"selectedFieldIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"alwaysVisibleFieldMetadataOverrides\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"object\"\n }\n },\n \"changeDebounceMs\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"useInlineSearchableSelectVariant\": {\n \"type\": \"boolean\"\n },\n \"useInlineRangeVariant\": {\n \"type\": \"boolean\"\n },\n \"useInlineDateVariant\": {\n \"type\": \"boolean\"\n },\n \"useInlineDateRangeVariant\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"behavior.filtering.enabled\",\n \"value\": true\n },\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.filtering.advancedFilters\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.filtering.enabled\",\n \"behavior.filtering.advancedFilters.enabled\",\n \"behavior.filtering.advancedFilters.settings\"\n ],\n \"validators\": [\n \"filter-fields-exist\",\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"filter.advanced.fields.add\",\n \"title\": \"Adicionar campos aos filtros avançados\",\n \"scope\": \"global\",\n \"targetKind\": \"filter\",\n \"target\": {\n \"kind\": \"filter\",\n \"resolver\": \"filter-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"fields\"\n ],\n \"properties\": {\n \"fields\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1\n },\n \"selected\": {\n \"type\": \"boolean\"\n },\n \"alwaysVisible\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"behavior.filtering.enabled\",\n \"value\": true\n },\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.filtering.advancedFilters\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.filtering.enabled\",\n \"behavior.filtering.advancedFilters.enabled\",\n \"behavior.filtering.advancedFilters.settings\"\n ],\n \"validators\": [\n \"filter-fields-exist\",\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"filter.advanced.fields.remove\",\n \"title\": \"Remover campos dos filtros avançados\",\n \"scope\": \"global\",\n \"targetKind\": \"filter\",\n \"target\": {\n \"kind\": \"filter\",\n \"resolver\": \"filter-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"fields\"\n ],\n \"properties\": {\n \"fields\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1\n },\n \"selected\": {\n \"type\": \"boolean\"\n },\n \"alwaysVisible\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"behavior.filtering.enabled\",\n \"value\": true\n },\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.filtering.advancedFilters\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.filtering.enabled\",\n \"behavior.filtering.advancedFilters.enabled\",\n \"behavior.filtering.advancedFilters.settings\"\n ],\n \"validators\": [\n \"filter-fields-exist\",\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"grouping.set\",\n \"title\": \"Definir agrupamento\",\n \"scope\": \"global\",\n \"targetKind\": \"grouping\",\n \"target\": {\n \"kind\": \"grouping\",\n \"resolver\": \"grouping-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"enabled\"\n ],\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"fields\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"expanded\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.grouping\"\n }\n ],\n \"validators\": [\n \"grouping-fields-exist\"\n ],\n \"affectedPaths\": [\n \"behavior.grouping\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"selection.mode.set\",\n \"title\": \"Definir modo de seleção\",\n \"scope\": \"global\",\n \"targetKind\": \"selection\",\n \"target\": {\n \"kind\": \"selection\",\n \"resolver\": \"selection-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"enabled\",\n \"type\"\n ],\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"type\": {\n \"enum\": [\n \"single\",\n \"multiple\"\n ]\n },\n \"mode\": {\n \"enum\": [\n \"checkbox\",\n \"row\",\n \"both\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.selection\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.selection.enabled\",\n \"behavior.selection.type\",\n \"behavior.selection.mode\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"appearance.density.set\",\n \"title\": \"Definir densidade\",\n \"scope\": \"global\",\n \"targetKind\": \"appearance\",\n \"target\": {\n \"kind\": \"appearance\",\n \"resolver\": \"appearance-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"density\"\n ],\n \"properties\": {\n \"density\": {\n \"enum\": [\n \"compact\",\n \"comfortable\",\n \"spacious\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"appearance\"\n }\n ],\n \"affectedPaths\": [\n \"appearance.density\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"appearance.borders.set\",\n \"title\": \"Definir bordas\",\n \"scope\": \"global\",\n \"targetKind\": \"appearance\",\n \"target\": {\n \"kind\": \"appearance\",\n \"resolver\": \"appearance-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"showRowBorders\",\n \"showColumnBorders\"\n ],\n \"properties\": {\n \"showRowBorders\": {\n \"type\": \"boolean\"\n },\n \"showColumnBorders\": {\n \"type\": \"boolean\"\n },\n \"showOuterBorder\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"appearance.borders\"\n }\n ],\n \"affectedPaths\": [\n \"appearance.borders.showRowBorders\",\n \"appearance.borders.showColumnBorders\",\n \"appearance.borders.showOuterBorder\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"virtualization.enabled.set\",\n \"title\": \"Habilitar virtualização\",\n \"scope\": \"global\",\n \"targetKind\": \"appearance\",\n \"target\": {\n \"kind\": \"appearance\",\n \"resolver\": \"appearance-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"enabled\"\n ],\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"itemHeight\": {\n \"type\": \"number\",\n \"default\": 48\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.virtualization\"\n },\n {\n \"kind\": \"merge-object\",\n \"path\": \"performance.virtualization\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.virtualization\",\n \"performance.virtualization\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"expansion.configure\",\n \"title\": \"Configurar expansão de linha\",\n \"scope\": \"global\",\n \"targetKind\": \"expansion\",\n \"target\": {\n \"kind\": \"expansion\",\n \"resolver\": \"expansion-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"contractVersion\": {\n \"type\": \"string\"\n },\n \"state\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"controlled\",\n \"uncontrolled\"\n ]\n }\n }\n },\n \"interaction\": {\n \"type\": \"object\",\n \"properties\": {\n \"trigger\": {\n \"enum\": [\n \"icon\",\n \"row\",\n \"both\"\n ]\n },\n \"toggleIcon\": {\n \"type\": \"object\",\n \"properties\": {\n \"collapsed\": {\n \"type\": \"string\"\n },\n \"expanded\": {\n \"type\": \"string\"\n },\n \"ariaLabelCollapsed\": {\n \"type\": \"string\"\n },\n \"ariaLabelExpanded\": {\n \"type\": \"string\"\n }\n }\n },\n \"motion\": {\n \"type\": \"object\",\n \"properties\": {\n \"preset\": {\n \"enum\": [\n \"none\",\n \"subtle-slide\",\n \"accordion\",\n \"fade-scale\"\n ]\n },\n \"durationMs\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"easing\": {\n \"enum\": [\n \"standard\",\n \"emphasized\",\n \"decelerate\"\n ]\n }\n }\n },\n \"keyboard\": {\n \"type\": \"object\",\n \"properties\": {\n \"profile\": {\n \"enum\": [\n \"disclosure\",\n \"grid\"\n ]\n }\n }\n }\n }\n },\n \"limits\": {\n \"type\": \"object\",\n \"properties\": {\n \"allowMultiple\": {\n \"type\": \"boolean\"\n },\n \"maxExpandedRows\": {\n \"type\": \"number\",\n \"minimum\": 1\n },\n \"onOverflow\": {\n \"enum\": [\n \"collapseOldest\",\n \"denyNew\",\n \"collapseAll\"\n ]\n }\n }\n },\n \"collapseOn\": {\n \"type\": \"object\",\n \"properties\": {\n \"sortChange\": {\n \"type\": \"boolean\"\n },\n \"pageChange\": {\n \"type\": \"boolean\"\n },\n \"filterChange\": {\n \"type\": \"boolean\"\n },\n \"dataRefresh\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"virtualization\": {\n \"type\": \"object\",\n \"properties\": {\n \"policy\": {\n \"enum\": [\n \"fixed-height-only\",\n \"allow-dynamic-under-flag\"\n ]\n }\n }\n },\n \"persistence\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"storageKeyStrategy\": {\n \"type\": \"object\",\n \"properties\": {\n \"namespace\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"security\": {\n \"type\": \"object\",\n \"properties\": {\n \"eventExposureDefault\": {\n \"type\": \"object\",\n \"properties\": {\n \"rowId\": {\n \"enum\": [\n \"redacted\",\n \"hashed\",\n \"raw\"\n ]\n },\n \"expandedKeys\": {\n \"enum\": [\n \"none\",\n \"hashed\",\n \"raw\"\n ]\n }\n }\n }\n }\n },\n \"deepLink\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"encoding\": {\n \"enum\": [\n \"csv\"\n ]\n },\n \"parsing\": {\n \"type\": \"object\",\n \"properties\": {\n \"duplicateParams\": {\n \"enum\": [\n \"firstWins\",\n \"reject\"\n ]\n }\n }\n },\n \"integrity\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"opaqueToken\"\n ]\n }\n }\n },\n \"privacy\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"denyByDefault\",\n \"allowByDefault\"\n ]\n }\n }\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.expansion\"\n }\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"behavior.expansion\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"expansion.detailSource.configure\",\n \"title\": \"Configurar fonte remota do detalhe expansivel\",\n \"scope\": \"global\",\n \"targetKind\": \"expansion\",\n \"target\": {\n \"kind\": \"expansion\",\n \"resolver\": \"expansion-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"inline\",\n \"resource\",\n \"resourcePath\",\n \"hypermedia\"\n ]\n },\n \"inlineSchema\": {\n \"type\": \"object\"\n },\n \"resource\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"enum\": [\n \"ui-composition\",\n \"form-schema\",\n \"table-schema\",\n \"dashboard-schema\"\n ]\n },\n \"id\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\"\n }\n }\n },\n \"resourcePath\": {\n \"type\": \"object\",\n \"properties\": {\n \"path\": {\n \"type\": \"string\"\n },\n \"method\": {\n \"enum\": [\n \"GET\",\n \"POST\"\n ]\n },\n \"paramsMap\": {\n \"type\": \"object\"\n }\n }\n },\n \"resourceAllowList\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"hypermedia\": {\n \"type\": \"object\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.expansion.detail.source\"\n }\n ],\n \"validators\": [\n \"remote-resource-binding-safe\",\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"behavior.expansion.detail.source\",\n \"behavior.expansion.detail.source.mode\",\n \"behavior.expansion.detail.source.resourcePath\",\n \"behavior.expansion.detail.source.resourceAllowList\",\n \"behavior.expansion.detail.source.hypermedia\"\n ],\n \"submissionImpact\": \"affects-remote-binding\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"expansion.detailPresentation.configure\",\n \"title\": \"Configurar apresentacao do detalhe expansivel\",\n \"scope\": \"global\",\n \"targetKind\": \"expansion\",\n \"target\": {\n \"kind\": \"expansion\",\n \"resolver\": \"expansion-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"schemaContract\": {\n \"type\": \"object\",\n \"properties\": {\n \"kind\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\"\n }\n }\n },\n \"rendering\": {\n \"type\": \"object\",\n \"properties\": {\n \"strategy\": {\n \"enum\": [\n \"registry\"\n ]\n },\n \"registryId\": {\n \"type\": \"string\"\n },\n \"hostLayout\": {\n \"enum\": [\n \"auto\",\n \"stack\",\n \"tabs\"\n ]\n },\n \"fallbackNodePolicy\": {\n \"enum\": [\n \"failClosed\",\n \"renderPlaceholder\"\n ]\n }\n }\n },\n \"height\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"fixed\",\n \"dynamic\"\n ]\n },\n \"px\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.expansion.detail\"\n }\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"affectedPaths\": [\n \"behavior.expansion.detail\",\n \"behavior.expansion.detail.schemaContract\",\n \"behavior.expansion.detail.rendering\",\n \"behavior.expansion.detail.height\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"meta.configure\",\n \"title\": \"Configurar metadados\",\n \"scope\": \"global\",\n \"targetKind\": \"meta\",\n \"target\": {\n \"kind\": \"meta\",\n \"resolver\": \"table-meta-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"tags\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"schemaId\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"meta\"\n }\n ],\n \"affectedPaths\": [\n \"meta\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"meta.idField.set\",\n \"title\": \"Definir campo de identidade\",\n \"scope\": \"global\",\n \"targetKind\": \"meta\",\n \"target\": {\n \"kind\": \"meta\",\n \"resolver\": \"table-meta-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"idField\"\n ],\n \"properties\": {\n \"idField\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"meta.idField\"\n }\n ],\n \"requiresConfirmation\": true,\n \"affectedPaths\": [\n \"meta.idField\"\n ],\n \"validators\": [\n \"target-column-exists\",\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"column.resizable.set\",\n \"title\": \"Definir redimensionamento da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"resizable\"\n ],\n \"properties\": {\n \"resizable\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].resizable\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.sortField.set\",\n \"title\": \"Definir campo de ordenacao da coluna\",\n \"scope\": \"column\",\n \"targetKind\": \"column\",\n \"target\": {\n \"kind\": \"column\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"sortField\"\n ],\n \"properties\": {\n \"sortField\": {\n \"type\": \"string\",\n \"minLength\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\"\n ],\n \"affectedPaths\": [\n \"columns[].sortField\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"column.computed.configure\",\n \"title\": \"Configurar coluna calculada\",\n \"scope\": \"column\",\n \"targetKind\": \"computedColumn\",\n \"target\": {\n \"kind\": \"computedColumn\",\n \"resolver\": \"column-by-field\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"expression\"\n ],\n \"properties\": {\n \"expression\": {\n \"type\": \"object\",\n \"description\": \"AST Json Logic\"\n },\n \"outputType\": {},\n \"format\": {\n \"type\": \"string\"\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-by-key\",\n \"path\": \"columns[]\",\n \"key\": \"field\"\n }\n ],\n \"validators\": [\n \"target-column-exists\",\n \"computed-expression-valid\",\n \"format-preset-supported\"\n ],\n \"affectedPaths\": [\n \"columns[].computed\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"config-initialized\",\n \"target-exists\"\n ]\n },\n {\n \"operationId\": \"behavior.pagination.configure\",\n \"title\": \"Configurar paginacao\",\n \"scope\": \"global\",\n \"targetKind\": \"pagination\",\n \"target\": {\n \"kind\": \"pagination\",\n \"resolver\": \"pagination-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"strategy\": {\n \"enum\": [\n \"client\",\n \"server\"\n ]\n },\n \"pageSize\": {\n \"type\": \"number\",\n \"minimum\": 1\n },\n \"pageSizeOptions\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"number\",\n \"minimum\": 1\n }\n },\n \"position\": {\n \"enum\": [\n \"top\",\n \"bottom\",\n \"both\"\n ]\n },\n \"style\": {\n \"enum\": [\n \"default\",\n \"simple\",\n \"advanced\",\n \"compact\"\n ]\n },\n \"advanced\": {\n \"type\": \"object\",\n \"properties\": {\n \"maxPageSize\": {\n \"type\": \"number\",\n \"minimum\": 1\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.pagination\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.pagination\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.sorting.configure\",\n \"title\": \"Configurar ordenacao\",\n \"scope\": \"global\",\n \"targetKind\": \"sorting\",\n \"target\": {\n \"kind\": \"sorting\",\n \"resolver\": \"sorting-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"strategy\": {\n \"enum\": [\n \"client\",\n \"server\"\n ]\n },\n \"defaultSort\": {\n \"type\": \"object\"\n },\n \"allowClearSort\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.sorting\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.sorting\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.filtering.configure\",\n \"title\": \"Configurar filtragem\",\n \"scope\": \"global\",\n \"targetKind\": \"filter\",\n \"target\": {\n \"kind\": \"filter\",\n \"resolver\": \"filter-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"strategy\": {\n \"enum\": [\n \"client\",\n \"server\"\n ]\n },\n \"columnFilters\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"defaultType\": {\n \"enum\": [\n \"text\",\n \"select\",\n \"date\",\n \"number\",\n \"boolean\"\n ]\n },\n \"position\": {\n \"enum\": [\n \"header\",\n \"subheader\",\n \"sidebar\"\n ]\n }\n }\n },\n \"advancedFilters\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"settings\": {\n \"type\": \"object\",\n \"properties\": {\n \"mode\": {\n \"enum\": [\n \"filter\"\n ]\n },\n \"showAdvanced\": {\n \"type\": \"boolean\"\n },\n \"allowSaveTags\": {\n \"type\": \"boolean\"\n },\n \"alwaysVisibleFields\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"selectedFieldIds\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"alwaysVisibleFieldMetadataOverrides\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"object\"\n }\n },\n \"changeDebounceMs\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"useInlineSearchableSelectVariant\": {\n \"type\": \"boolean\"\n },\n \"useInlineRangeVariant\": {\n \"type\": \"boolean\"\n },\n \"useInlineDateVariant\": {\n \"type\": \"boolean\"\n },\n \"useInlineDateRangeVariant\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"debounceTime\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.filtering\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.filtering\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.selection.configure\",\n \"title\": \"Configurar selecao\",\n \"scope\": \"global\",\n \"targetKind\": \"selection\",\n \"target\": {\n \"kind\": \"selection\",\n \"resolver\": \"selection-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"type\": {\n \"enum\": [\n \"single\",\n \"multiple\"\n ]\n },\n \"mode\": {\n \"enum\": [\n \"checkbox\",\n \"row\",\n \"both\"\n ]\n },\n \"allowSelectAll\": {\n \"type\": \"boolean\"\n },\n \"persistSelection\": {\n \"type\": \"boolean\"\n },\n \"maxSelections\": {\n \"type\": \"number\",\n \"minimum\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.selection\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.selection\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.interaction.configure\",\n \"title\": \"Configurar interacao\",\n \"scope\": \"global\",\n \"targetKind\": \"interaction\",\n \"target\": {\n \"kind\": \"interaction\",\n \"resolver\": \"interaction-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"rowClick\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"action\": {\n \"type\": \"string\"\n }\n }\n },\n \"keyboard\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"hover\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"highlightRow\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.interaction\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.interaction\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.loading.configure\",\n \"title\": \"Configurar loading\",\n \"scope\": \"global\",\n \"targetKind\": \"loading\",\n \"target\": {\n \"kind\": \"loading\",\n \"resolver\": \"loading-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"type\": {\n \"enum\": [\n \"spinner\",\n \"skeleton\",\n \"progress\",\n \"custom\"\n ]\n },\n \"position\": {\n \"enum\": [\n \"overlay\",\n \"inline\",\n \"replace\"\n ]\n },\n \"text\": {\n \"type\": \"string\"\n },\n \"delay\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.loading\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.loading\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.emptyState.configure\",\n \"title\": \"Configurar estado vazio\",\n \"scope\": \"global\",\n \"targetKind\": \"emptyState\",\n \"target\": {\n \"kind\": \"emptyState\",\n \"resolver\": \"empty-state-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"message\"\n ],\n \"properties\": {\n \"message\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.emptyState\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.emptyState\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.resizing.configure\",\n \"title\": \"Configurar redimensionamento\",\n \"scope\": \"global\",\n \"targetKind\": \"resizing\",\n \"target\": {\n \"kind\": \"resizing\",\n \"resolver\": \"resizing-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"minColumnWidth\": {\n \"type\": \"number\",\n \"minimum\": 1\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.resizing\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.resizing\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.dragging.configure\",\n \"title\": \"Configurar drag and drop\",\n \"scope\": \"global\",\n \"targetKind\": \"dragging\",\n \"target\": {\n \"kind\": \"dragging\",\n \"resolver\": \"dragging-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"columns\"\n ],\n \"properties\": {\n \"columns\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.dragging\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.dragging\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"behavior.editing.configure\",\n \"title\": \"Configurar edicao\",\n \"scope\": \"global\",\n \"targetKind\": \"editing\",\n \"target\": {\n \"kind\": \"editing\",\n \"resolver\": \"editing-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"mode\"\n ],\n \"properties\": {\n \"mode\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"behavior.editing\"\n }\n ],\n \"affectedPaths\": [\n \"behavior.editing\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"toolbar.configure\",\n \"title\": \"Configurar toolbar\",\n \"scope\": \"global\",\n \"targetKind\": \"toolbar\",\n \"target\": {\n \"kind\": \"toolbar\",\n \"resolver\": \"toolbar-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"visible\": {\n \"type\": \"boolean\"\n },\n \"position\": {\n \"enum\": [\n \"top\",\n \"bottom\",\n \"both\"\n ]\n },\n \"actionsPosition\": {\n \"enum\": [\n \"top\",\n \"bottom\",\n \"both\"\n ]\n },\n \"actionsBackgroundColor\": {\n \"type\": \"string\"\n },\n \"appearance\": {\n \"type\": \"object\",\n \"properties\": {\n \"preset\": {\n \"type\": \"string\"\n },\n \"variant\": {\n \"enum\": [\n \"flat\",\n \"outlined\",\n \"elevated\",\n \"integrated\"\n ]\n },\n \"density\": {\n \"enum\": [\n \"compact\",\n \"comfortable\",\n \"spacious\"\n ]\n },\n \"shape\": {\n \"enum\": [\n \"square\",\n \"rounded\",\n \"pill\"\n ]\n },\n \"divider\": {\n \"enum\": [\n \"none\",\n \"start\",\n \"between-groups\"\n ]\n },\n \"tokens\": {\n \"type\": \"object\",\n \"properties\": {\n \"titleFg\": {\n \"type\": \"string\"\n },\n \"subtitleFg\": {\n \"type\": \"string\"\n },\n \"iconFg\": {\n \"type\": \"string\"\n },\n \"titleFontSize\": {\n \"type\": \"string\"\n },\n \"subtitleFontSize\": {\n \"type\": \"string\"\n },\n \"titleFontWeight\": {\n \"type\": \"string\"\n },\n \"identityGap\": {\n \"type\": \"string\"\n },\n \"identityFilterGap\": {\n \"type\": \"string\"\n },\n \"identityMinHeight\": {\n \"type\": \"string\"\n },\n \"identityMarginBottom\": {\n \"type\": \"string\"\n },\n \"identityIconSize\": {\n \"type\": \"string\"\n },\n \"identityIconRadius\": {\n \"type\": \"string\"\n }\n },\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"subtitle\": {\n \"type\": \"string\"\n },\n \"icon\": {\n \"type\": \"string\"\n },\n \"textAlign\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\"\n ]\n },\n \"layout\": {\n \"type\": \"object\",\n \"properties\": {\n \"alignment\": {\n \"enum\": [\n \"start\",\n \"center\",\n \"end\",\n \"space-between\"\n ]\n }\n }\n },\n \"filters\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"settingsMenu\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"columnsVisibility\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"toolbar\"\n }\n ],\n \"validators\": [\n \"css-style-safe\"\n ],\n \"affectedPaths\": [\n \"toolbar\",\n \"toolbar.title\",\n \"toolbar.subtitle\",\n \"toolbar.icon\",\n \"toolbar.textAlign\",\n \"toolbar.appearance\",\n \"toolbar.appearance.tokens\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"actions.row.configure\",\n \"title\": \"Configurar acoes de linha\",\n \"scope\": \"global\",\n \"targetKind\": \"rowAction\",\n \"target\": {\n \"kind\": \"rowAction\",\n \"resolver\": \"action-in-row-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"display\": {\n \"enum\": [\n \"menu\",\n \"buttons\",\n \"icons\"\n ]\n },\n \"trigger\": {\n \"enum\": [\n \"hover\",\n \"always\",\n \"click\"\n ]\n },\n \"discovery\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"actions.row\"\n }\n ],\n \"affectedPaths\": [\n \"actions.row\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"actions.bulk.configure\",\n \"title\": \"Configurar acoes em lote\",\n \"scope\": \"global\",\n \"targetKind\": \"bulkAction\",\n \"target\": {\n \"kind\": \"bulkAction\",\n \"resolver\": \"action-in-bulk-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"position\": {\n \"enum\": [\n \"toolbar\",\n \"floating\",\n \"both\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"actions.bulk\"\n }\n ],\n \"requiresConfirmation\": true,\n \"affectedPaths\": [\n \"actions.bulk\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"actions.context.configure\",\n \"title\": \"Configurar menu contextual\",\n \"scope\": \"global\",\n \"targetKind\": \"contextAction\",\n \"target\": {\n \"kind\": \"contextAction\",\n \"resolver\": \"action-in-context-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"trigger\": {\n \"enum\": [\n \"right-click\",\n \"long-press\",\n \"both\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"actions.context\"\n }\n ],\n \"requiresConfirmation\": true,\n \"affectedPaths\": [\n \"actions.context\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"actions.confirmations.configure\",\n \"title\": \"Configurar confirmacoes\",\n \"scope\": \"global\",\n \"targetKind\": \"contextAction\",\n \"target\": {\n \"kind\": \"contextAction\",\n \"resolver\": \"action-in-context-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"default\"\n ],\n \"properties\": {\n \"default\": {\n \"type\": \"object\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"actions.confirmations\"\n }\n ],\n \"requiresConfirmation\": true,\n \"affectedPaths\": [\n \"actions.confirmations.default\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"export.configure\",\n \"title\": \"Configurar exportacao\",\n \"scope\": \"global\",\n \"targetKind\": \"export\",\n \"target\": {\n \"kind\": \"export\",\n \"resolver\": \"export-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"formats\": {\n \"type\": \"array\",\n \"items\": {\n \"enum\": [\n \"excel\",\n \"pdf\",\n \"csv\",\n \"json\",\n \"print\"\n ]\n }\n },\n \"general\": {\n \"type\": \"object\",\n \"properties\": {\n \"includeHeaders\": {\n \"type\": \"boolean\"\n },\n \"scope\": {\n \"enum\": [\n \"auto\",\n \"selected\",\n \"filtered\",\n \"currentPage\",\n \"all\"\n ]\n },\n \"maxRows\": {\n \"type\": \"number\",\n \"minimum\": 1\n }\n }\n },\n \"excel\": {\n \"type\": \"object\",\n \"properties\": {\n \"autoFitColumns\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"pdf\": {\n \"type\": \"object\",\n \"properties\": {\n \"orientation\": {\n \"enum\": [\n \"portrait\",\n \"landscape\"\n ]\n },\n \"pageSize\": {\n \"enum\": [\n \"A4\",\n \"A3\",\n \"Letter\",\n \"Legal\"\n ]\n }\n }\n },\n \"csv\": {\n \"type\": \"object\",\n \"properties\": {\n \"delimiter\": {\n \"enum\": [\n \",\",\n \";\",\n \"|\",\n \"\\\\t\"\n ]\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"export\"\n }\n ],\n \"requiresConfirmation\": true,\n \"affectedPaths\": [\n \"export\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"tableRuntimeOperations.plan\",\n \"title\": \"Planejar operacoes runtime da tabela\",\n \"scope\": \"global\",\n \"targetKind\": \"runtimeOperation\",\n \"target\": {\n \"kind\": \"runtimeOperation\",\n \"resolver\": \"table-runtime-operation-contract\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"operations\"\n ],\n \"properties\": {\n \"operations\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": \"object\",\n \"required\": [\n \"operationId\",\n \"input\"\n ],\n \"properties\": {\n \"operationId\": {\n \"enum\": [\n \"table.filter.apply\",\n \"table.export.run\"\n ]\n },\n \"input\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"criteria\": {\n \"type\": \"object\"\n },\n \"format\": {},\n \"scope\": {}\n }\n },\n \"description\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"tableRuntimeOperations\"\n }\n ],\n \"affectedPaths\": [\n \"tableRuntimeOperations\"\n ],\n \"validators\": [\n \"runtime-operation-declared\"\n ],\n \"submissionImpact\": \"none\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"appearance.configure\",\n \"title\": \"Configurar aparencia\",\n \"scope\": \"global\",\n \"targetKind\": \"appearance\",\n \"target\": {\n \"kind\": \"appearance\",\n \"resolver\": \"appearance-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"density\": {\n \"enum\": [\n \"compact\",\n \"comfortable\",\n \"spacious\"\n ]\n },\n \"borders\": {\n \"type\": \"object\",\n \"properties\": {\n \"showRowBorders\": {\n \"type\": \"boolean\"\n },\n \"showColumnBorders\": {\n \"type\": \"boolean\"\n },\n \"showOuterBorder\": {\n \"type\": \"boolean\"\n },\n \"style\": {\n \"enum\": [\n \"solid\",\n \"dashed\",\n \"dotted\"\n ]\n }\n }\n },\n \"colors\": {\n \"type\": \"object\",\n \"properties\": {\n \"alternateRowBackground\": {\n \"type\": \"string\"\n },\n \"hoverBackground\": {\n \"type\": \"string\"\n }\n }\n },\n \"typography\": {\n \"type\": \"object\",\n \"properties\": {\n \"fontSize\": {\n \"type\": \"string\"\n },\n \"headerFontWeight\": {\n \"type\": \"string\"\n }\n }\n },\n \"spacing\": {\n \"type\": \"object\",\n \"properties\": {\n \"cellPadding\": {\n \"type\": \"string\"\n }\n }\n },\n \"responsive\": {\n \"type\": \"object\",\n \"properties\": {\n \"mobile\": {\n \"type\": \"object\",\n \"properties\": {\n \"horizontalScroll\": {\n \"type\": \"boolean\"\n },\n \"cardMode\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"breakpoints\": {\n \"type\": \"object\",\n \"properties\": {\n \"mobile\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n }\n }\n },\n \"animations\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"elevation\": {\n \"type\": \"object\",\n \"properties\": {\n \"level\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"appearance\"\n }\n ],\n \"validators\": [\n \"css-style-safe\"\n ],\n \"affectedPaths\": [\n \"appearance\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"messages.configure\",\n \"title\": \"Configurar mensagens\",\n \"scope\": \"global\",\n \"targetKind\": \"messages\",\n \"target\": {\n \"kind\": \"messages\",\n \"resolver\": \"messages-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"states\": {\n \"type\": \"object\",\n \"properties\": {\n \"empty\": {\n \"type\": \"string\"\n },\n \"loading\": {\n \"type\": \"string\"\n }\n }\n },\n \"actions\": {\n \"type\": \"object\",\n \"properties\": {\n \"confirmations\": {\n \"type\": \"object\",\n \"properties\": {\n \"delete\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"messages\"\n }\n ],\n \"affectedPaths\": [\n \"messages\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"localization.configure\",\n \"title\": \"Configurar localizacao\",\n \"scope\": \"global\",\n \"targetKind\": \"localization\",\n \"target\": {\n \"kind\": \"localization\",\n \"resolver\": \"localization-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"locale\": {\n \"type\": \"string\"\n },\n \"direction\": {\n \"enum\": [\n \"ltr\",\n \"rtl\"\n ]\n },\n \"dateTime\": {\n \"type\": \"object\",\n \"properties\": {\n \"dateFormat\": {\n \"type\": \"string\"\n },\n \"timeFormat\": {\n \"type\": \"string\"\n },\n \"dateTimeFormat\": {\n \"type\": \"string\"\n },\n \"firstDayOfWeek\": {\n \"enum\": [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6\n ]\n },\n \"relativeTime\": {\n \"type\": \"boolean\"\n },\n \"monthNames\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"dayNames\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n },\n \"number\": {\n \"type\": \"object\",\n \"properties\": {\n \"decimalSeparator\": {\n \"type\": \"string\"\n },\n \"thousandsSeparator\": {\n \"type\": \"string\"\n },\n \"defaultPrecision\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"negativeSign\": {\n \"type\": \"string\"\n },\n \"negativeSignPosition\": {\n \"enum\": [\n \"before\",\n \"after\"\n ]\n }\n }\n },\n \"currency\": {\n \"type\": \"object\",\n \"properties\": {\n \"code\": {\n \"type\": \"string\"\n },\n \"symbol\": {\n \"type\": \"string\"\n },\n \"position\": {\n \"enum\": [\n \"before\",\n \"after\"\n ]\n },\n \"spacing\": {\n \"type\": \"boolean\"\n },\n \"precision\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n },\n \"formatting\": {\n \"type\": \"object\",\n \"properties\": {\n \"percentageFormat\": {\n \"type\": \"string\"\n },\n \"fileSizeFormat\": {\n \"enum\": [\n \"binary\",\n \"decimal\"\n ]\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"localization\"\n }\n ],\n \"affectedPaths\": [\n \"localization\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"performance.configure\",\n \"title\": \"Configurar performance\",\n \"scope\": \"global\",\n \"targetKind\": \"performance\",\n \"target\": {\n \"kind\": \"performance\",\n \"resolver\": \"performance-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"virtualization\": {\n \"type\": \"object\",\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"itemHeight\": {\n \"type\": \"number\",\n \"minimum\": 1\n }\n }\n },\n \"debounce\": {\n \"type\": \"object\",\n \"properties\": {\n \"search\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"filter\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n },\n \"lazyLoading\": {\n \"type\": \"object\",\n \"properties\": {\n \"images\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"performance\"\n }\n ],\n \"affectedPaths\": [\n \"performance\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"data.loadingStrategy.set\",\n \"title\": \"Definir estrategia de carregamento\",\n \"scope\": \"global\",\n \"targetKind\": \"data\",\n \"target\": {\n \"kind\": \"data\",\n \"resolver\": \"data-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"loadingStrategy\"\n ],\n \"properties\": {\n \"loadingStrategy\": {\n \"enum\": [\n \"eager\",\n \"lazy\",\n \"on-demand\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"set-value\",\n \"path\": \"data.loadingStrategy\"\n }\n ],\n \"affectedPaths\": [\n \"data.loadingStrategy\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n },\n {\n \"operationId\": \"accessibility.configure\",\n \"title\": \"Configurar acessibilidade\",\n \"scope\": \"global\",\n \"targetKind\": \"accessibility\",\n \"target\": {\n \"kind\": \"accessibility\",\n \"resolver\": \"accessibility-config\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"highContrast\": {\n \"type\": \"boolean\"\n },\n \"reduceMotion\": {\n \"type\": \"boolean\"\n },\n \"announcements\": {\n \"type\": \"object\",\n \"properties\": {\n \"liveRegion\": {\n \"enum\": [\n \"polite\",\n \"assertive\"\n ]\n }\n }\n },\n \"keyboard\": {\n \"type\": \"object\",\n \"properties\": {\n \"shortcuts\": {\n \"type\": \"boolean\"\n }\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"merge-object\",\n \"path\": \"accessibility\"\n }\n ],\n \"requiresConfirmation\": true,\n \"affectedPaths\": [\n \"accessibility\"\n ],\n \"validators\": [\n \"editor-round-trip-preserve\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"config-initialized\"\n ]\n }\n ],\n \"validators\": [\n {\n \"validatorId\": \"target-column-exists\",\n \"level\": \"error\",\n \"code\": \"TB001\",\n \"description\": \"A coluna alvo deve existir na configuração.\"\n },\n {\n \"validatorId\": \"column-field-unique\",\n \"level\": \"error\",\n \"code\": \"TB002\",\n \"description\": \"O identificador técnico da coluna (field) deve ser único.\"\n },\n {\n \"validatorId\": \"renderer-type-supported\",\n \"level\": \"error\",\n \"code\": \"TB003\",\n \"description\": \"O tipo de renderizador deve ser suportado pelo componente.\"\n },\n {\n \"validatorId\": \"renderer-config-match\",\n \"level\": \"error\",\n \"code\": \"TB004\",\n \"description\": \"A configuração do renderizador deve corresponder ao tipo selecionado.\"\n },\n {\n \"validatorId\": \"grouping-fields-exist\",\n \"level\": \"error\",\n \"code\": \"TB005\",\n \"description\": \"Os campos de agrupamento devem existir na definição de colunas.\"\n },\n {\n \"validatorId\": \"filter-fields-exist\",\n \"level\": \"error\",\n \"code\": \"TB018\",\n \"description\": \"Os campos de filtro avançado devem existir no schema request do filtro governado.\"\n },\n {\n \"validatorId\": \"destructive-removal-confirmation\",\n \"level\": \"error\",\n \"code\": \"TB006\",\n \"description\": \"Remoções destrutivas de colunas ou ações exigem confirmação explícita.\"\n },\n {\n \"validatorId\": \"computed-expression-valid\",\n \"level\": \"error\",\n \"code\": \"TB007\",\n \"description\": \"A expressão de cálculo deve ser um AST Json Logic válido.\"\n },\n {\n \"validatorId\": \"remote-resource-binding-safe\",\n \"level\": \"error\",\n \"code\": \"TB008\",\n \"description\": \"A ligação com recurso remoto não deve conter URLs absolutas não permitidas.\"\n },\n {\n \"validatorId\": \"editor-round-trip-preserve\",\n \"level\": \"error\",\n \"code\": \"TB009\",\n \"description\": \"A edição não deve corromper propriedades críticas necessárias para o round-trip do editor.\"\n },\n {\n \"validatorId\": \"toolbar-action-id-unique\",\n \"level\": \"error\",\n \"code\": \"TB010\",\n \"description\": \"O id da ação de toolbar deve ser único em toolbar.actions[]. O efeito append-unique usa este id como chave de deduplicação.\"\n },\n {\n \"validatorId\": \"row-action-id-unique\",\n \"level\": \"error\",\n \"code\": \"TB011\",\n \"description\": \"O id da row action deve ser único em actions.row.actions[]. O efeito append-unique usa este id como chave de deduplicação.\"\n },\n {\n \"validatorId\": \"bulk-action-id-unique\",\n \"level\": \"error\",\n \"code\": \"TB017\",\n \"description\": \"O id da ação em lote deve ser único em actions.bulk.actions[]. O efeito append-unique usa este id como chave de deduplicação.\"\n },\n {\n \"validatorId\": \"format-preset-supported\",\n \"level\": \"error\",\n \"code\": \"TB012\",\n \"description\": \"O formato deve usar um preset canonico publicado em table-ai-capabilities.ts.\"\n },\n {\n \"validatorId\": \"column-width-valid\",\n \"level\": \"error\",\n \"code\": \"TB013\",\n \"description\": \"A largura deve ser auto ou uma medida simples em px, %, rem ou em.\"\n },\n {\n \"validatorId\": \"css-style-safe\",\n \"level\": \"error\",\n \"code\": \"TB014\",\n \"description\": \"Estilos inline devem permanecer em CSS simples e seguro, sem scripts, URLs perigosas ou expressoes dinamicas.\"\n },\n {\n \"validatorId\": \"value-mapping-valid\",\n \"level\": \"error\",\n \"code\": \"TB015\",\n \"description\": \"O mapeamento de valores deve ser um objeto simples com chaves estaveis e labels serializaveis.\"\n },\n {\n \"validatorId\": \"conditional-style-valid\",\n \"level\": \"error\",\n \"code\": \"TB016\",\n \"description\": \"Regras condicionais de coluna devem ter id estavel, condition Json Logic e ao menos cssClass ou style.\"\n },\n {\n \"validatorId\": \"runtime-operation-declared\",\n \"level\": \"error\",\n \"code\": \"TB019\",\n \"description\": \"Operacoes runtime devem usar operationId e input declarados em tableRuntimeOperations sem alterar a configuracao persistida.\"\n }\n ],\n \"roundTripRequirements\": [\n \"preserve-column-order\",\n \"normalize-enum-values\",\n \"maintain-renderer-precedence\",\n \"preserve-meta-ids\"\n ],\n \"presentationAffordances\": {\n \"version\": \"0.1.0\",\n \"componentId\": \"praxis-table\",\n \"defaultTargetKind\": \"column\",\n \"sourceRef\": \"praxis-ui-angular:projects/praxis-table/src/lib/ai/praxis-table-authoring-manifest.ts#presentationAffordances\",\n \"affordances\": [\n {\n \"id\": \"table.column.text-formatting\",\n \"targetKind\": \"column\",\n \"category\": \"format\",\n \"description\": \"Text transforms and masks for textual table columns.\",\n \"options\": [\n \"none\",\n \"uppercase\",\n \"lowercase\",\n \"titlecase\",\n \"capitalize\",\n \"uppercase|truncate|50|...\",\n \"000.000.000-00\"\n ],\n \"appliesToTypes\": [\n \"string\",\n \"text\",\n \"unknown\"\n ],\n \"unknownCompatible\": true\n },\n {\n \"id\": \"table.column.numeric-formatting\",\n \"targetKind\": \"column\",\n \"category\": \"format\",\n \"description\": \"Decimal, currency and percentage formats for numeric table columns.\",\n \"options\": [\n \"1.0-0\",\n \"1.1-1\",\n \"1.2-2\",\n \"1.0-3\",\n \"1.0-0|nosep\",\n \"BRL|symbol|2\",\n \"USD|symbol|2\",\n \"EUR|symbol|2\",\n \"BRL|code|2\",\n \"USD|code|0\",\n \"BRL|symbol|2|nosep\",\n \"EUR|symbol|2|nosep\",\n \"1.0-0|x100\",\n \"1.1-1|x100\",\n \"1.2-2|x100\"\n ],\n \"appliesToTypes\": [\n \"number\",\n \"currency\",\n \"percentage\"\n ],\n \"unknownCompatible\": false\n },\n {\n \"id\": \"table.column.date-formatting\",\n \"targetKind\": \"column\",\n \"category\": \"format\",\n \"description\": \"Date and time formats for date-like table columns.\",\n \"options\": [\n \"shortDate\",\n \"mediumDate\",\n \"longDate\",\n \"fullDate\",\n \"MMM/yyyy\",\n \"shortTime\",\n \"short\",\n \"yyyy-MM-dd\",\n \"dd/MM/yyyy\",\n \"yyyy-MM-dd HH:mm\"\n ],\n \"appliesToTypes\": [\n \"date\",\n \"datetime\",\n \"time\"\n ],\n \"unknownCompatible\": false\n },\n {\n \"id\": \"table.column.boolean-formatting\",\n \"targetKind\": \"column\",\n \"category\": \"format\",\n \"description\": \"Boolean label formats for true/false table columns.\",\n \"options\": [\n \"true-false\",\n \"yes-no\",\n \"active-inactive\",\n \"on-off\",\n \"enabled-disabled\",\n \"custom|Sim|Nao\"\n ],\n \"appliesToTypes\": [\n \"boolean\"\n ],\n \"unknownCompatible\": false\n },\n {\n \"id\": \"table.column.semantic-renderers\",\n \"targetKind\": \"column\",\n \"category\": \"renderer\",\n \"description\": \"Visual renderers for categorical, status or action-oriented table columns.\",\n \"options\": [\n \"badge\",\n \"chip\",\n \"icon\",\n \"link\",\n \"button\",\n \"progress\",\n \"avatar\",\n \"toggle\",\n \"menu\",\n \"rating\",\n \"compose\"\n ],\n \"appliesToTypes\": [\n \"string\",\n \"text\",\n \"boolean\",\n \"number\",\n \"currency\",\n \"percentage\",\n \"date\",\n \"datetime\",\n \"unknown\"\n ],\n \"unknownCompatible\": true\n },\n {\n \"id\": \"table.column.alignment-layout\",\n \"targetKind\": \"column\",\n \"category\": \"layout\",\n \"description\": \"Column alignment and composed cell layout options.\",\n \"options\": [\n \"align:start\",\n \"align:center\",\n \"align:end\",\n \"compose:row\",\n \"compose:column\",\n \"secondary-line\",\n \"prefix\",\n \"suffix\"\n ],\n \"appliesToTypes\": [\n \"string\",\n \"text\",\n \"boolean\",\n \"number\",\n \"currency\",\n \"percentage\",\n \"date\",\n \"datetime\",\n \"unknown\"\n ],\n \"unknownCompatible\": true\n }\n ]\n },\n \"examples\": [\n {\n \"id\": \"add-schema-column\",\n \"request\": \"Adicionar coluna para o campo email com o título Contato\",\n \"operationId\": \"column.add\",\n \"params\": {\n \"field\": \"email\",\n \"header\": \"Contato\",\n \"type\": \"string\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-computed-column\",\n \"request\": \"Criar coluna de idade baseada na data de nascimento\",\n \"operationId\": \"column.computed.add\",\n \"params\": {\n \"field\": \"idade\",\n \"header\": \"Idade\",\n \"expression\": {\n \"yearsSince\": [\n {\n \"var\": \"dataNascimento\"\n }\n ]\n },\n \"outputType\": \"number\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-conditional-badge\",\n \"request\": \"Mostrar badge vermelho na coluna status se o valor for \\\"atrasado\\\"\",\n \"operationId\": \"column.conditionalRenderer.add\",\n \"target\": \"status\",\n \"params\": {\n \"id\": \"badge-atrasado\",\n \"condition\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"atrasado\"\n ]\n },\n \"renderer\": {\n \"type\": \"badge\",\n \"badge\": {\n \"color\": \"warn\",\n \"variant\": \"filled\"\n }\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"enable-export\",\n \"request\": \"Habilitar exportação para Excel e PDF\",\n \"operationId\": \"export.enabled.set\",\n \"params\": {\n \"enabled\": true,\n \"formats\": [\n \"excel\",\n \"pdf\"\n ]\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-row-action\",\n \"request\": \"Adicionar botão de excluir na linha\",\n \"operationId\": \"rowAction.add\",\n \"params\": {\n \"id\": \"delete\",\n \"label\": \"Excluir\",\n \"action\": \"delete\",\n \"icon\": \"delete\",\n \"color\": \"warn\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-row-action-open-route\",\n \"request\": \"Adicionar botão de linha para abrir detalhe com navegação interna\",\n \"operationId\": \"rowAction.add\",\n \"params\": {\n \"id\": \"details\",\n \"label\": \"Detalhes\",\n \"action\": \"navigation.openRoute\",\n \"icon\": \"open_in_new\",\n \"globalAction\": {\n \"actionId\": \"navigation.openRoute\",\n \"payload\": {\n \"path\": \"/clientes/detalhe\",\n \"query\": {\n \"id\": \"${row.id}\"\n }\n }\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"group-by-field\",\n \"request\": \"Agrupar a tabela por departamento\",\n \"operationId\": \"grouping.set\",\n \"params\": {\n \"enabled\": true,\n \"fields\": [\n \"departamento\"\n ]\n },\n \"isPositive\": true\n },\n {\n \"id\": \"reject-invalid-renderer\",\n \"request\": \"Configurar imagem para um renderizador do tipo ícone\",\n \"operationId\": \"column.renderer.set\",\n \"target\": \"avatar\",\n \"params\": {\n \"type\": \"icon\",\n \"image\": {\n \"src\": \"...\"\n }\n },\n \"isPositive\": false\n },\n {\n \"id\": \"set-button-renderer\",\n \"request\": \"Transformar a coluna acoes em botao que executa abrir-detalhe\",\n \"operationId\": \"column.renderer.set\",\n \"target\": \"acoes\",\n \"params\": {\n \"type\": \"button\",\n \"button\": {\n \"label\": \"Abrir\",\n \"action\": {\n \"id\": \"abrir-detalhe\"\n }\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-column-conditional-style\",\n \"request\": \"Destacar a coluna status quando o valor estiver bloqueado\",\n \"operationId\": \"column.conditionalStyle.add\",\n \"target\": \"status\",\n \"params\": {\n \"id\": \"status-bloqueado\",\n \"condition\": {\n \"==\": [\n {\n \"var\": \"status\"\n },\n \"bloqueado\"\n ]\n },\n \"cssClass\": \"status-bloqueado\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-currency-format-preset\",\n \"request\": \"Formatar a coluna total como moeda brasileira\",\n \"operationId\": \"column.format.set\",\n \"target\": \"total\",\n \"params\": {\n \"format\": \"BRL|symbol|2\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-cpf-format-preset\",\n \"request\": \"Formate a coluna CPF\",\n \"operationId\": \"column.format.set\",\n \"target\": \"cpf\",\n \"params\": {\n \"format\": \"000.000.000-00\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-long-date-format-preset\",\n \"request\": \"Mostre a data de admissão por extenso\",\n \"operationId\": \"column.format.set\",\n \"target\": \"dataAdmissao\",\n \"params\": {\n \"format\": \"longDate\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-basic-column-width\",\n \"request\": \"Definir a largura da coluna nome para 240px\",\n \"operationId\": \"column.width.set\",\n \"target\": \"nome\",\n \"params\": {\n \"width\": \"240px\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-salary-align-right\",\n \"request\": \"Alinhe o salário à direita\",\n \"operationId\": \"column.align.set\",\n \"target\": \"salario\",\n \"params\": {\n \"align\": \"right\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"make-name-sticky-start\",\n \"request\": \"Fixe a coluna funcionário no início da tabela\",\n \"operationId\": \"column.sticky.set\",\n \"target\": \"funcionario\",\n \"params\": {\n \"sticky\": \"start\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"disable-cpf-sorting\",\n \"request\": \"Não permita ordenar pela coluna CPF\",\n \"operationId\": \"column.sortable.set\",\n \"target\": \"cpf\",\n \"params\": {\n \"sortable\": false\n },\n \"isPositive\": true\n },\n {\n \"id\": \"enable-department-filter\",\n \"request\": \"Deixe o departamento disponível nos filtros\",\n \"operationId\": \"column.filterable.set\",\n \"target\": \"departamento\",\n \"params\": {\n \"filterable\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"hide-internal-id-column\",\n \"request\": \"Oculte o ID interno da tabela\",\n \"operationId\": \"column.visibility.set\",\n \"target\": \"id\",\n \"params\": {\n \"visible\": false\n },\n \"isPositive\": true\n },\n {\n \"id\": \"map-active-status-labels\",\n \"request\": \"Mostre Sim e Não na coluna ativo\",\n \"operationId\": \"column.valueMapping.set\",\n \"target\": \"ativo\",\n \"params\": {\n \"valueMapping\": {\n \"true\": \"Sim\",\n \"false\": \"Não\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-avatar-chip-renderer\",\n \"request\": \"Corrija o avatar do funcionário e mantenha o nome como chip\",\n \"operationId\": \"column.renderer.set\",\n \"target\": \"funcionario\",\n \"params\": {\n \"type\": \"compose\",\n \"compose\": {\n \"items\": [\n {\n \"type\": \"avatar\",\n \"avatar\": {\n \"srcField\": \"avatarUrl\",\n \"initialsField\": \"funcionario\",\n \"shape\": \"circle\",\n \"backgroundColor\": \"#E3F2FD\",\n \"textColor\": \"#0D47A1\"\n }\n },\n {\n \"type\": \"chip\",\n \"chip\": {\n \"textField\": \"funcionario\",\n \"variant\": \"soft\"\n }\n }\n ]\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"animate-high-salary-row\",\n \"request\": \"Anime suavemente as linhas com salário acima de 30000\",\n \"operationId\": \"row.conditionalRenderer.add\",\n \"params\": {\n \"id\": \"salario-alto-pulse\",\n \"condition\": {\n \">\": [\n {\n \"var\": \"salario\"\n },\n 30000\n ]\n },\n \"animation\": {\n \"preset\": \"pulse-soft\",\n \"trigger\": \"onAppear\",\n \"intensity\": \"subtle\",\n \"repeat\": \"once\",\n \"durationMs\": 1200\n },\n \"description\": \"Destaca linhas de salário alto sem alterar os dados.\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"style-low-salary-cell\",\n \"request\": \"Para salários menores que 30000, use fundo laranja claro\",\n \"operationId\": \"column.conditionalStyle.add\",\n \"target\": \"salario\",\n \"params\": {\n \"id\": \"salario-baixo-laranja\",\n \"condition\": {\n \"<\": [\n {\n \"var\": \"salario\"\n },\n 30000\n ]\n },\n \"style\": {\n \"backgroundColor\": \"#FFF3E0\",\n \"color\": \"#8A4B00\"\n },\n \"tooltip\": {\n \"text\": \"Salário abaixo do recorte configurado\",\n \"position\": \"top\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"enable-advanced-filters-human\",\n \"request\": \"Ative filtros avançados e deixe CPF e departamento sempre visíveis\",\n \"operationId\": \"filter.advanced.configure\",\n \"params\": {\n \"enabled\": true,\n \"queryBuilder\": true,\n \"savePresets\": true,\n \"settings\": {\n \"mode\": \"filter\",\n \"showAdvanced\": true,\n \"alwaysVisibleFields\": [\n \"cpf\",\n \"departamento\"\n ]\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"add-salary-to-advanced-filters-human\",\n \"request\": \"Inclua também Salário nesses filtros\",\n \"operationId\": \"filter.advanced.fields.add\",\n \"params\": {\n \"fields\": [\n \"salario\"\n ],\n \"selected\": true,\n \"alwaysVisible\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"remove-active-from-advanced-filters-human\",\n \"request\": \"Agora remova Ativo desses filtros\",\n \"operationId\": \"filter.advanced.fields.remove\",\n \"params\": {\n \"fields\": [\n \"ativo\"\n ],\n \"selected\": true,\n \"alwaysVisible\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"enable-table-filters-human\",\n \"request\": \"Habilite os filtros dinâmicos da tabela\",\n \"operationId\": \"behavior.filtering.configure\",\n \"params\": {\n \"enabled\": true,\n \"strategy\": \"client\",\n \"debounceMs\": 250\n },\n \"isPositive\": true\n },\n {\n \"id\": \"compact-density-human\",\n \"request\": \"Deixe a tabela mais compacta\",\n \"operationId\": \"appearance.density.set\",\n \"params\": {\n \"density\": \"compact\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"toolbar-search-refresh-human\",\n \"request\": \"Mostre busca e botão de atualizar na toolbar\",\n \"operationId\": \"toolbar.configure\",\n \"params\": {\n \"visible\": true,\n \"showSearch\": true,\n \"showRefresh\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-server-pagination\",\n \"request\": \"Usar paginacao no servidor com 50 linhas por pagina\",\n \"operationId\": \"behavior.pagination.configure\",\n \"params\": {\n \"enabled\": true,\n \"strategy\": \"server\",\n \"pageSize\": 50,\n \"position\": \"bottom\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-default-sorting\",\n \"request\": \"Ordenar inicialmente por data de criacao decrescente\",\n \"operationId\": \"behavior.sorting.configure\",\n \"params\": {\n \"enabled\": true,\n \"strategy\": \"server\",\n \"defaultSort\": {\n \"field\": \"createdAt\",\n \"direction\": \"desc\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-bulk-actions\",\n \"request\": \"Habilitar acoes em lote na toolbar\",\n \"operationId\": \"actions.bulk.configure\",\n \"params\": {\n \"enabled\": true,\n \"position\": \"toolbar\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-localization\",\n \"request\": \"Configurar a tabela para portugues do Brasil\",\n \"operationId\": \"localization.configure\",\n \"params\": {\n \"locale\": \"pt-BR\",\n \"direction\": \"ltr\",\n \"dateTime\": {\n \"dateFormat\": \"dd/MM/yyyy\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-accessibility\",\n \"request\": \"Ativar alto contraste e reduzir animacoes\",\n \"operationId\": \"accessibility.configure\",\n \"params\": {\n \"enabled\": true,\n \"highContrast\": true,\n \"reduceMotion\": true,\n \"announcements\": {\n \"liveRegion\": \"polite\"\n }\n },\n \"isPositive\": true\n },\n {\n \"id\": \"require-removal-confirmation\",\n \"request\": \"Remover a coluna nome\",\n \"operationId\": \"column.remove\",\n \"target\": \"nome\",\n \"isPositive\": true\n }\n ]\n}",
|
|
21099
21104
|
"sourcePointer": "praxis-ui-angular/projects/praxis-table/src/lib/ai/praxis-table-authoring-manifest.ts",
|
|
21100
|
-
"contentHash": "
|
|
21105
|
+
"contentHash": "753efad941c598f12af68071bc649a91621f83f9cafd25f133b63a84a079ad55",
|
|
21101
21106
|
"sourceKind": "component_definition",
|
|
21102
21107
|
"sourceId": "praxis-table",
|
|
21103
21108
|
"corpusVersion": "1.0.0"
|