@praxisui/table 9.0.0-beta.20 → 9.0.0-beta.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-06-24T23:12:14.260Z",
3
+ "generatedAt": "2026-06-26T01:13:35.730Z",
4
4
  "packageName": "@praxisui/table",
5
- "packageVersion": "9.0.0-beta.20",
5
+ "packageVersion": "9.0.0-beta.22",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 3,
@@ -717,6 +717,231 @@
717
717
  "ajustar tamanho do ícone"
718
718
  ]
719
719
  },
720
+ {
721
+ "path": "valuePresentation",
722
+ "category": "appearance",
723
+ "valueKind": "object",
724
+ "description": "Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.",
725
+ "safetyNotes": "Preferir este contrato a formatadores legados quando a intencao for apresentacao de valor.",
726
+ "intentExamples": [
727
+ "mostrar como moeda",
728
+ "formatar como data longa",
729
+ "exibir percentual"
730
+ ]
731
+ },
732
+ {
733
+ "path": "presentation",
734
+ "category": "appearance",
735
+ "valueKind": "object",
736
+ "description": "Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.",
737
+ "safetyNotes": "Use apenas semantica declarativa; nao incluir CSS arbitrario, HTML, comandos ou efeitos mutaveis.",
738
+ "intentExamples": [
739
+ "status com icone",
740
+ "badge de pendente",
741
+ "campo em tom warning"
742
+ ]
743
+ },
744
+ {
745
+ "path": "presentation.presenter",
746
+ "category": "appearance",
747
+ "valueKind": "enum",
748
+ "allowedValues": [
749
+ "text",
750
+ "badge",
751
+ "chip",
752
+ "status",
753
+ "iconValue",
754
+ "progress",
755
+ "rating",
756
+ "microVisualization"
757
+ ],
758
+ "description": "Tipo semantico de renderizacao em modo apresentacao.",
759
+ "intentExamples": [
760
+ "renderizar como status",
761
+ "usar chip",
762
+ "mostrar icone com valor"
763
+ ]
764
+ },
765
+ {
766
+ "path": "presentation.tone",
767
+ "category": "appearance",
768
+ "valueKind": "enum",
769
+ "allowedValues": [
770
+ "neutral",
771
+ "info",
772
+ "success",
773
+ "warning",
774
+ "danger"
775
+ ],
776
+ "description": "Tom semantico mapeado pelo consumidor para tokens de tema.",
777
+ "intentExamples": [
778
+ "tom de sucesso",
779
+ "tom de alerta",
780
+ "tom de erro"
781
+ ]
782
+ },
783
+ {
784
+ "path": "presentation.appearance",
785
+ "category": "appearance",
786
+ "valueKind": "enum",
787
+ "allowedValues": [
788
+ "plain",
789
+ "soft",
790
+ "outlined",
791
+ "filled"
792
+ ],
793
+ "description": "Nivel de enfase visual do apresentador.",
794
+ "intentExamples": [
795
+ "status preenchido",
796
+ "badge contornado",
797
+ "chip suave"
798
+ ]
799
+ },
800
+ {
801
+ "path": "presentation.icon",
802
+ "category": "appearance",
803
+ "valueKind": "string",
804
+ "description": "Nome de icone Material Symbols usado pelo apresentador semantico.",
805
+ "intentExamples": [
806
+ "icone lock",
807
+ "icone payments",
808
+ "icone schedule"
809
+ ]
810
+ },
811
+ {
812
+ "path": "presentation.label",
813
+ "category": "identity",
814
+ "valueKind": "string",
815
+ "description": "Rotulo semantico exibido por apresentadores como status, badge ou chip.",
816
+ "intentExamples": [
817
+ "rotulo Bloqueado",
818
+ "texto Aprovado",
819
+ "status Aguardando aprovacao"
820
+ ]
821
+ },
822
+ {
823
+ "path": "presentation.badge",
824
+ "category": "appearance",
825
+ "valueKind": "string",
826
+ "description": "Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.",
827
+ "intentExamples": [
828
+ "badge alto valor",
829
+ "marcador D+35",
830
+ "sinalizar revisao executiva"
831
+ ]
832
+ },
833
+ {
834
+ "path": "presentation.valuePresentation",
835
+ "category": "appearance",
836
+ "valueKind": "object",
837
+ "description": "Override de formatacao aplicado apenas pela superficie de apresentacao.",
838
+ "safetyNotes": "Nao altera o valor real do FormControl nem o payload de submit."
839
+ },
840
+ {
841
+ "path": "presentation.visualization",
842
+ "category": "appearance",
843
+ "valueKind": "object",
844
+ "description": "Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.",
845
+ "safetyNotes": "Exige fallback textual e nao pode conter opcoes de ECharts, HTML, SVG bruto, CSS ou comandos.",
846
+ "intentExamples": [
847
+ "micro chart de SLA",
848
+ "barra empilhada em celula",
849
+ "bullet chart de orcamento",
850
+ "fluxo compacto de aprovacao"
851
+ ]
852
+ },
853
+ {
854
+ "path": "presentation.visualization.kind",
855
+ "category": "appearance",
856
+ "valueKind": "enum",
857
+ "allowedValues": [
858
+ "line",
859
+ "area",
860
+ "column",
861
+ "comparison",
862
+ "stackedBar",
863
+ "radial",
864
+ "harveyBall",
865
+ "bullet",
866
+ "delta",
867
+ "processFlow"
868
+ ],
869
+ "description": "Tipo semantico da micro visualizacao de apresentacao.",
870
+ "intentExamples": [
871
+ "comparison",
872
+ "stackedBar",
873
+ "bullet",
874
+ "processFlow"
875
+ ]
876
+ },
877
+ {
878
+ "path": "presentation.visualization.surface",
879
+ "category": "layout",
880
+ "valueKind": "enum",
881
+ "allowedValues": [
882
+ "table-cell",
883
+ "list-item",
884
+ "object-header",
885
+ "card-summary",
886
+ "form-presentation"
887
+ ],
888
+ "description": "Superficie alvo usada para aplicar regras de densidade e fallback.",
889
+ "intentExamples": [
890
+ "table-cell",
891
+ "list-item",
892
+ "form-presentation"
893
+ ]
894
+ },
895
+ {
896
+ "path": "presentation.visualization.size",
897
+ "category": "layout",
898
+ "valueKind": "enum",
899
+ "allowedValues": [
900
+ "xs",
901
+ "sm",
902
+ "md",
903
+ "lg",
904
+ "responsive"
905
+ ],
906
+ "description": "Tamanho semantico da micro visualizacao.",
907
+ "intentExamples": [
908
+ "xs em tabela",
909
+ "md em header",
910
+ "responsive em card"
911
+ ]
912
+ },
913
+ {
914
+ "path": "presentation.visualization.fallbackText",
915
+ "category": "accessibility",
916
+ "valueKind": "string",
917
+ "description": "Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.",
918
+ "safetyNotes": "Deve explicar valor, unidade, meta, tendencia ou estado quando aplicavel."
919
+ },
920
+ {
921
+ "path": "presentationRules",
922
+ "category": "appearance",
923
+ "valueKind": "array",
924
+ "description": "Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.",
925
+ "safetyNotes": "As regras devem produzir apenas set/effect semantico. Nao use para alterar valor, executar acao, navegar ou injetar HTML/CSS.",
926
+ "intentExamples": [
927
+ "se status for BLOQUEADO, usar tone danger",
928
+ "se valor maior que limite, mostrar badge de revisao"
929
+ ]
930
+ },
931
+ {
932
+ "path": "presentationRules[].when",
933
+ "category": "behavior",
934
+ "valueKind": "object",
935
+ "description": "Guarda Json Logic avaliada contra o contexto de apresentacao do campo.",
936
+ "safetyNotes": "Use Json Logic serializavel; funcoes nao sao aceitas."
937
+ },
938
+ {
939
+ "path": "presentationRules[].set",
940
+ "category": "appearance",
941
+ "valueKind": "object",
942
+ "description": "Patch semantico aplicado sobre presentation quando a guarda for verdadeira.",
943
+ "safetyNotes": "Somente presenter, tone, icon, label, badge, tooltip, appearance, valuePresentation e interactions seguras."
944
+ },
720
945
  {
721
946
  "path": "mask",
722
947
  "category": "appearance",
@@ -1479,9 +1704,9 @@
1479
1704
  {
1480
1705
  "chunkIndex": 1,
1481
1706
  "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 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",
1707
+ "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: valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n - Path: presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n - Path: presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n - Path: presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n - Path: presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n - Path: presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n - Path: presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n - Path: presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n - Path: presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n - Path: presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n - Path: presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n - Path: presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n - Path: presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n - Path: presentation.visualization.fallbackText\n Category: accessibility\n Kind: string\n Description: Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.\n - Path: presentationRules\n Category: appearance\n Kind: array\n Description: Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.\n - Path: presentationRules[].when\n Category: behavior\n Kind: object\n Description: Guarda Json Logic avaliada contra o contexto de apresentacao do campo.\n - Path: presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\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
1708
  "sourcePointer": "praxis-ui-angular/projects/praxis-core/src/lib/ai/field-metadata-ai-capabilities.ts",
1484
- "contentHash": "9cd4caf524bb9e3af72f1723f4e9ebbada222e64bf175b7dd97fdf8c1a2ce49e",
1709
+ "contentHash": "466e427814fe510e5b0108e418a13f828b5a363d3da46bf9b69be588c7088ce2",
1485
1710
  "sourceKind": "component_definition",
1486
1711
  "sourceId": "praxis-filter",
1487
1712
  "corpusVersion": "1.0.0"
@@ -4048,6 +4273,231 @@
4048
4273
  "ajustar tamanho do ícone"
4049
4274
  ]
4050
4275
  },
4276
+ {
4277
+ "path": "fieldMetadata[].valuePresentation",
4278
+ "category": "appearance",
4279
+ "valueKind": "object",
4280
+ "description": "Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.",
4281
+ "safetyNotes": "Preferir este contrato a formatadores legados quando a intencao for apresentacao de valor.",
4282
+ "intentExamples": [
4283
+ "mostrar como moeda",
4284
+ "formatar como data longa",
4285
+ "exibir percentual"
4286
+ ]
4287
+ },
4288
+ {
4289
+ "path": "fieldMetadata[].presentation",
4290
+ "category": "appearance",
4291
+ "valueKind": "object",
4292
+ "description": "Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.",
4293
+ "safetyNotes": "Use apenas semantica declarativa; nao incluir CSS arbitrario, HTML, comandos ou efeitos mutaveis.",
4294
+ "intentExamples": [
4295
+ "status com icone",
4296
+ "badge de pendente",
4297
+ "campo em tom warning"
4298
+ ]
4299
+ },
4300
+ {
4301
+ "path": "fieldMetadata[].presentation.presenter",
4302
+ "category": "appearance",
4303
+ "valueKind": "enum",
4304
+ "allowedValues": [
4305
+ "text",
4306
+ "badge",
4307
+ "chip",
4308
+ "status",
4309
+ "iconValue",
4310
+ "progress",
4311
+ "rating",
4312
+ "microVisualization"
4313
+ ],
4314
+ "description": "Tipo semantico de renderizacao em modo apresentacao.",
4315
+ "intentExamples": [
4316
+ "renderizar como status",
4317
+ "usar chip",
4318
+ "mostrar icone com valor"
4319
+ ]
4320
+ },
4321
+ {
4322
+ "path": "fieldMetadata[].presentation.tone",
4323
+ "category": "appearance",
4324
+ "valueKind": "enum",
4325
+ "allowedValues": [
4326
+ "neutral",
4327
+ "info",
4328
+ "success",
4329
+ "warning",
4330
+ "danger"
4331
+ ],
4332
+ "description": "Tom semantico mapeado pelo consumidor para tokens de tema.",
4333
+ "intentExamples": [
4334
+ "tom de sucesso",
4335
+ "tom de alerta",
4336
+ "tom de erro"
4337
+ ]
4338
+ },
4339
+ {
4340
+ "path": "fieldMetadata[].presentation.appearance",
4341
+ "category": "appearance",
4342
+ "valueKind": "enum",
4343
+ "allowedValues": [
4344
+ "plain",
4345
+ "soft",
4346
+ "outlined",
4347
+ "filled"
4348
+ ],
4349
+ "description": "Nivel de enfase visual do apresentador.",
4350
+ "intentExamples": [
4351
+ "status preenchido",
4352
+ "badge contornado",
4353
+ "chip suave"
4354
+ ]
4355
+ },
4356
+ {
4357
+ "path": "fieldMetadata[].presentation.icon",
4358
+ "category": "appearance",
4359
+ "valueKind": "string",
4360
+ "description": "Nome de icone Material Symbols usado pelo apresentador semantico.",
4361
+ "intentExamples": [
4362
+ "icone lock",
4363
+ "icone payments",
4364
+ "icone schedule"
4365
+ ]
4366
+ },
4367
+ {
4368
+ "path": "fieldMetadata[].presentation.label",
4369
+ "category": "identity",
4370
+ "valueKind": "string",
4371
+ "description": "Rotulo semantico exibido por apresentadores como status, badge ou chip.",
4372
+ "intentExamples": [
4373
+ "rotulo Bloqueado",
4374
+ "texto Aprovado",
4375
+ "status Aguardando aprovacao"
4376
+ ]
4377
+ },
4378
+ {
4379
+ "path": "fieldMetadata[].presentation.badge",
4380
+ "category": "appearance",
4381
+ "valueKind": "string",
4382
+ "description": "Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.",
4383
+ "intentExamples": [
4384
+ "badge alto valor",
4385
+ "marcador D+35",
4386
+ "sinalizar revisao executiva"
4387
+ ]
4388
+ },
4389
+ {
4390
+ "path": "fieldMetadata[].presentation.valuePresentation",
4391
+ "category": "appearance",
4392
+ "valueKind": "object",
4393
+ "description": "Override de formatacao aplicado apenas pela superficie de apresentacao.",
4394
+ "safetyNotes": "Nao altera o valor real do FormControl nem o payload de submit."
4395
+ },
4396
+ {
4397
+ "path": "fieldMetadata[].presentation.visualization",
4398
+ "category": "appearance",
4399
+ "valueKind": "object",
4400
+ "description": "Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.",
4401
+ "safetyNotes": "Exige fallback textual e nao pode conter opcoes de ECharts, HTML, SVG bruto, CSS ou comandos.",
4402
+ "intentExamples": [
4403
+ "micro chart de SLA",
4404
+ "barra empilhada em celula",
4405
+ "bullet chart de orcamento",
4406
+ "fluxo compacto de aprovacao"
4407
+ ]
4408
+ },
4409
+ {
4410
+ "path": "fieldMetadata[].presentation.visualization.kind",
4411
+ "category": "appearance",
4412
+ "valueKind": "enum",
4413
+ "allowedValues": [
4414
+ "line",
4415
+ "area",
4416
+ "column",
4417
+ "comparison",
4418
+ "stackedBar",
4419
+ "radial",
4420
+ "harveyBall",
4421
+ "bullet",
4422
+ "delta",
4423
+ "processFlow"
4424
+ ],
4425
+ "description": "Tipo semantico da micro visualizacao de apresentacao.",
4426
+ "intentExamples": [
4427
+ "comparison",
4428
+ "stackedBar",
4429
+ "bullet",
4430
+ "processFlow"
4431
+ ]
4432
+ },
4433
+ {
4434
+ "path": "fieldMetadata[].presentation.visualization.surface",
4435
+ "category": "layout",
4436
+ "valueKind": "enum",
4437
+ "allowedValues": [
4438
+ "table-cell",
4439
+ "list-item",
4440
+ "object-header",
4441
+ "card-summary",
4442
+ "form-presentation"
4443
+ ],
4444
+ "description": "Superficie alvo usada para aplicar regras de densidade e fallback.",
4445
+ "intentExamples": [
4446
+ "table-cell",
4447
+ "list-item",
4448
+ "form-presentation"
4449
+ ]
4450
+ },
4451
+ {
4452
+ "path": "fieldMetadata[].presentation.visualization.size",
4453
+ "category": "layout",
4454
+ "valueKind": "enum",
4455
+ "allowedValues": [
4456
+ "xs",
4457
+ "sm",
4458
+ "md",
4459
+ "lg",
4460
+ "responsive"
4461
+ ],
4462
+ "description": "Tamanho semantico da micro visualizacao.",
4463
+ "intentExamples": [
4464
+ "xs em tabela",
4465
+ "md em header",
4466
+ "responsive em card"
4467
+ ]
4468
+ },
4469
+ {
4470
+ "path": "fieldMetadata[].presentation.visualization.fallbackText",
4471
+ "category": "accessibility",
4472
+ "valueKind": "string",
4473
+ "description": "Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.",
4474
+ "safetyNotes": "Deve explicar valor, unidade, meta, tendencia ou estado quando aplicavel."
4475
+ },
4476
+ {
4477
+ "path": "fieldMetadata[].presentationRules",
4478
+ "category": "appearance",
4479
+ "valueKind": "array",
4480
+ "description": "Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.",
4481
+ "safetyNotes": "As regras devem produzir apenas set/effect semantico. Nao use para alterar valor, executar acao, navegar ou injetar HTML/CSS.",
4482
+ "intentExamples": [
4483
+ "se status for BLOQUEADO, usar tone danger",
4484
+ "se valor maior que limite, mostrar badge de revisao"
4485
+ ]
4486
+ },
4487
+ {
4488
+ "path": "fieldMetadata[].presentationRules[].when",
4489
+ "category": "behavior",
4490
+ "valueKind": "object",
4491
+ "description": "Guarda Json Logic avaliada contra o contexto de apresentacao do campo.",
4492
+ "safetyNotes": "Use Json Logic serializavel; funcoes nao sao aceitas."
4493
+ },
4494
+ {
4495
+ "path": "fieldMetadata[].presentationRules[].set",
4496
+ "category": "appearance",
4497
+ "valueKind": "object",
4498
+ "description": "Patch semantico aplicado sobre presentation quando a guarda for verdadeira.",
4499
+ "safetyNotes": "Somente presenter, tone, icon, label, badge, tooltip, appearance, valuePresentation e interactions seguras."
4500
+ },
4051
4501
  {
4052
4502
  "path": "fieldMetadata[].mask",
4053
4503
  "category": "appearance",
@@ -4923,6 +5373,17 @@
4923
5373
  "description": "Layout legado (FormLayout). Preferir inputs.config + sections.",
4924
5374
  "safetyNotes": "Use apenas para formularios antigos baseados em fieldsets."
4925
5375
  },
5376
+ {
5377
+ "path": "inputs.generatedLayoutPreset",
5378
+ "category": "inputs",
5379
+ "valueKind": "enum",
5380
+ "allowedValues": [
5381
+ "default",
5382
+ "compactPresentation"
5383
+ ],
5384
+ "description": "Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.",
5385
+ "safetyNotes": "Nao reprocessa layouts ja persistidos ou authorados."
5386
+ },
4926
5387
  {
4927
5388
  "path": "inputs.backConfig",
4928
5389
  "category": "inputs",
@@ -5359,9 +5820,9 @@
5359
5820
  {
5360
5821
  "chunkIndex": 1,
5361
5822
  "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 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",
5823
+ "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[].valuePresentation\n Category: appearance\n Kind: object\n Description: Formato canonico de exibicao em superficies readonly/display, como moeda, numero, percentual, data, datetime, time e boolean.\n - Path: fieldMetadata[].presentation\n Category: appearance\n Kind: object\n Description: Estado visual semantico base para presentationMode, incluindo presenter, tone, icon, label, badge, tooltip, appearance e formatter opcional.\n - Path: fieldMetadata[].presentation.presenter\n Category: appearance\n Kind: enum\n Description: Tipo semantico de renderizacao em modo apresentacao.\n - Path: fieldMetadata[].presentation.tone\n Category: appearance\n Kind: enum\n Description: Tom semantico mapeado pelo consumidor para tokens de tema.\n - Path: fieldMetadata[].presentation.appearance\n Category: appearance\n Kind: enum\n Description: Nivel de enfase visual do apresentador.\n - Path: fieldMetadata[].presentation.icon\n Category: appearance\n Kind: string\n Description: Nome de icone Material Symbols usado pelo apresentador semantico.\n - Path: fieldMetadata[].presentation.label\n Category: identity\n Kind: string\n Description: Rotulo semantico exibido por apresentadores como status, badge ou chip.\n - Path: fieldMetadata[].presentation.badge\n Category: appearance\n Kind: string\n Description: Marcador secundario opcional exibido junto ao valor em superficies de apresentacao.\n - Path: fieldMetadata[].presentation.valuePresentation\n Category: appearance\n Kind: object\n Description: Override de formatacao aplicado apenas pela superficie de apresentacao.\n - Path: fieldMetadata[].presentation.visualization\n Category: appearance\n Kind: object\n Description: Micro visualizacao renderer-neutral para superficies compactas como tabela, lista, header, card e form read-only.\n - Path: fieldMetadata[].presentation.visualization.kind\n Category: appearance\n Kind: enum\n Description: Tipo semantico da micro visualizacao de apresentacao.\n - Path: fieldMetadata[].presentation.visualization.surface\n Category: layout\n Kind: enum\n Description: Superficie alvo usada para aplicar regras de densidade e fallback.\n - Path: fieldMetadata[].presentation.visualization.size\n Category: layout\n Kind: enum\n Description: Tamanho semantico da micro visualizacao.\n - Path: fieldMetadata[].presentation.visualization.fallbackText\n Category: accessibility\n Kind: string\n Description: Texto equivalente obrigatorio para fallback, exportacao e leitores de tela.\n - Path: fieldMetadata[].presentationRules\n Category: appearance\n Kind: array\n Description: Regras Json Logic ordenadas que sobrescrevem presentation em modo readonly/display; regras posteriores que casam vencem.\n - Path: fieldMetadata[].presentationRules[].when\n Category: behavior\n Kind: object\n Description: Guarda Json Logic avaliada contra o contexto de apresentacao do campo.\n - Path: fieldMetadata[].presentationRules[].set\n Category: appearance\n Kind: object\n Description: Patch semantico aplicado sobre presentation quando a guarda for verdadeira.\n - Path: fieldMetadata[].mask\n Category: appearance\n Kind: string\n Description: Máscara de input (padrão do componente).\n - Path: fieldMetadata[].format\n Category: appearance\n Kind: string\n Description: Formato de exibição (ex: pipes).\n - Path: fieldMetadata[].validators\n Category: validation\n Kind: object\n Description: Objeto contendo todas as regras de validação.\n - Path: fieldMetadata[].validators.required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório.\n - Path: fieldMetadata[].required\n Category: validation\n Kind: boolean\n Description: Campo obrigatório (alias rápido do validators.required).\n - Path: fieldMetadata[].validators.requiredMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para required.\n - Path: fieldMetadata[].validators.email\n Category: validation\n Kind: boolean\n Description: Validação de formato de e-mail.\n - Path: fieldMetadata[].validators.emailMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para validação de email.\n - Path: fieldMetadata[].validators.minLength\n Category: validation\n Kind: number\n Description: Comprimento mínimo do texto.\n - Path: fieldMetadata[].validators.minLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para minLength.\n - Path: fieldMetadata[].validators.maxLength\n Category: validation\n Kind: number\n Description: Comprimento máximo do texto.\n - Path: fieldMetadata[].validators.maxLengthMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para maxLength.\n - Path: fieldMetadata[].validators.min\n Category: validation\n Kind: number\n Description: Valor numérico mínimo.\n - Path: fieldMetadata[].validators.minMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para min.\n - Path: fieldMetadata[].validators.max\n Category: validation\n Kind: number\n Description: Valor numérico máximo.\n - Path: fieldMetadata[].validators.maxMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para max.\n - Path: fieldMetadata[].validators.pattern\n Category: validation\n Kind: string\n Description: Regex para validação.\n - Path: fieldMetadata[].validators.patternMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para pattern.\n - Path: fieldMetadata[].validators.cpf\n Category: validation\n Kind: boolean\n Description: Validador de CPF (legado).\n - Path: fieldMetadata[].validators.cnpj\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ (legado).\n - Path: fieldMetadata[].validators.cpfCnpj\n Category: validation\n Kind: boolean\n Description: Validador automatico CPF/CNPJ (legado).\n - Path: fieldMetadata[].validators.cnpjAlpha\n Category: validation\n Kind: boolean\n Description: Validador de CNPJ alfanumerico (legado).\n - Path: fieldMetadata[].validators.cpfMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CPF.\n - Path: fieldMetadata[].validators.cnpjMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ.\n - Path: fieldMetadata[].validators.cnpjAlphaMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para CNPJ alfanumerico.\n - Path: fieldMetadata[].validators.url\n Category: validation\n Kind: boolean\n Description: Validador de URL.\n - Path: fieldMetadata[].validators.urlMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para URL.\n - Path: fieldMetadata[].validators.minWords\n Category: validation\n Kind: number\n Description: Mínimo de palavras.\n - Path: fieldMetadata[].validators.requiredChecked\n Category: validation\n Kind: boolean\n Description: Exige checkbox marcado (ex: termos de uso).\n - Path: fieldMetadata[].validators.customValidator\n Category: validation\n Kind: expression\n Description: Validador customizado (função).\n - Path: fieldMetadata[].validators.asyncValidator\n Category: validation\n Kind: expression\n Description: Validador async customizado (função).\n - Path: fieldMetadata[].validators.matchField\n Category: validation\n Kind: string\n Description: Campo que deve coincidir (cross-field).\n - Path: fieldMetadata[].validators.matchFieldMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para matchField.\n - Path: fieldMetadata[].validators.uniqueValidator\n Category: validation\n Kind: expression\n Description: Validador de unicidade via API (função).\n - Path: fieldMetadata[].validators.uniqueMessage\n Category: validation\n Kind: string\n Description: Mensagem customizada para unicidade.\n - Path: fieldMetadata[].validators.conditionalValidation\n Category: validation\n Kind: array\n Description: Regras de validação condicional.\n - Path: fieldMetadata[].validators.conditionalValidation[].condition\n Category: validation\n Kind: expression\n Description: Condicao para aplicar validadores.\n - Path: fieldMetadata[].validators.conditionalValidation[].validators\n Category: validation\n Kind: object\n Description: Conjunto de validadores aplicados quando a condicao for verdadeira.\n - Path: fieldMetadata[].validators.validationTrigger\n Category: validation\n Kind: enum\n Description: Gatilho de validação no validator.\n - Path: fieldMetadata[].validators.validationDebounce\n Category: validation\n Kind: number\n Description: Debounce de validação no validator (ms).\n - Path: fieldMetadata[].validators.showInlineErrors\n Category: validation\n Kind: boolean\n Description: Exibe erros inline (validator).\n - Path: fieldMetadata[].validators.errorPosition\n Category: validation\n Kind: enum\n Description: Posicao do erro (validator).\n - Path: fieldMetadata[].validationMode\n Category: validation\n Kind: enum\n Description: Gatilho da validação (change/blur/submit).\n - Path: fieldMetadata[].debounceTime\n Category: validation\n Kind: number\n Description: Debounce para validação em ms.\n - Path: fieldMetadata[].options\n Category: data\n Kind: array\n Description: Array de opções conforme controlType (ex.: { key, value } ou { value, text/display }).\n - Path: fieldMetadata[].endpoint\n Category: data\n Kind: string\n Description: URL para carregar opções remotas.\n - Path: fieldMetadata[].valueField\n Category: data\n Kind: string\n Description: Nome da propriedade de valor nas opções.\n - Path: fieldMetadata[].displayField\n Category: data\n Kind: string\n Description: Nome da propriedade de texto nas opções.\n - Path: fieldMetadata[].filterField\n Category: data\n Kind: string\n Description: Campo para filtragem no backend.\n - Path: fieldMetadata[].queryParams\n Category: data\n Kind: object\n Description: Parâmetros fixos para a query do endpoint.\n - Path: fieldMetadata[].cacheDuration\n Category: data\n Kind: number\n Description: Duração do cache de dados em ms.\n - Path: fieldMetadata[].hidden\n Category: behavior\n Kind: boolean\n Description: Oculta o campo globalmente.\n - Path: fieldMetadata[].visibleIn\n Category: behavior\n Kind: array\n Description: Contextos onde o campo é visível.\n - Path: fieldMetadata[].formHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no formulário.\n - Path: fieldMetadata[].tableHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas na tabela.\n - Path: fieldMetadata[].filterHidden\n Category: behavior\n Kind: boolean\n Description: Oculta apenas no filtro.\n - Path: fieldMetadata[].dependencyFields\n Category: dependency\n Kind: array\n Description: Campos dos quais este campo depende.\n - Path: fieldMetadata[].conditionalRequired\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para obrigatoriedade declarativa.\n - Path: fieldMetadata[].conditionalDisplay\n Category: dependency\n Kind: expression\n Description: Condição Json Logic para visibilidade declarativa.\n - Path: fieldMetadata[].dependencyFilterMap\n Category: dependency\n Kind: object\n Description: Mapeamento de filtro baseado na dependência.\n - Path: fieldMetadata[].dependencyValuePath\n Category: dependency\n Kind: string\n Description: Caminho no valor da dependência.\n - Path: fieldMetadata[].dependencyMergeStrategy\n Category: dependency\n Kind: enum\n Description: Estratégia de merge dos dados carregados.\n - Path: fieldMetadata[].dependencyLoadOnChange\n Category: dependency\n Kind: enum\n Description: Quando recarregar dependência.\n - Path: fieldMetadata[].resetOnDependentChange\n Category: dependency\n Kind: boolean\n Description: Zera valor se dependência mudar.\n - Path: fieldMetadata[].enableDependencyCascade\n Category: dependency\n Kind: boolean\n Description: Habilita/desabilita cascata nativa de dependências entre campos.\n - Path: fieldMetadata[].dependencyDebounceMs\n Category: dependency\n Kind: number\n Description: Delay para reagir à mudança de dependência.\n - Path: fieldMetadata[].suppressInlineErrorsOnCascade\n Category: dependency\n Kind: boolean\n Description: Suprime erros inline durante cascata.\n - Path: fieldMetadata[].transformDisplayValue\n Category: transform\n Kind: expression\n Description: Transforma valor para exibição.\n - Path: fieldMetadata[].transformSaveValue\n Category: transform\n Kind: expression\n Description: Transforma valor para salvar.\n - Path: fieldMetadata[].textTransformApply\n Category: transform\n Kind: enum\n Description: Quando aplicar transformação de texto.\n - Path: fieldMetadata[].inlineEditing\n Category: behavior\n Kind: boolean\n Description: Permite edição inline (tabelas).\n - Path: fieldMetadata[].unique\n Category: validation\n Kind: boolean\n Description: Valida unicidade no backend.\n - Path: fieldMetadata[].readOnly\n Category: behavior\n Kind: boolean\n Description: Campo somente leitura.\n - Path: fieldMetadata[].disabled\n Category: behavior\n Kind: boolean\n Description: Campo desabilitado.\n - Path: fieldMetadata[].defaultValue\n Category: data\n Kind: object\n Description: Valor inicial do campo.\n - Path: fieldMetadata[].ariaLabel\n Category: accessibility\n Kind: string\n Description: Label para leitores de tela.\n - Path: fieldMetadata[].ariaDescribedBy\n Category: accessibility\n Kind: string\n Description: IDs de descrição acessível.\n - Path: fieldMetadata[].tabIndex\n Category: accessibility\n Kind: number\n Description: Ordem de tabulacao para teclado.\n - Path: fieldMetadata[].accessKey\n Category: accessibility\n Kind: string\n Description: Atalho de teclado (accessKey).\nComponent Capabilities:\n - Path: inputs.resourcePath\n Category: inputs\n Kind: string\n Description: Caminho do recurso para carregar/salvar dados via CRUD.\n - Path: inputs.resourceId\n Category: inputs\n Kind: string\n Description: ID do registro atual (string ou number).\n - Path: inputs.initialValue\n Category: inputs\n Kind: object\n Description: Valores iniciais locais para campos host-authored ou complementares.\n - Path: inputs.mode\n Category: inputs\n Kind: enum\n Description: Modo do formulario (create/edit/view).\n - Path: inputs.config\n Category: inputs\n Kind: object\n Description: Configuracao completa do formulario (FormConfig).\n - Path: inputs.schemaSource\n Category: inputs\n Kind: enum\n Description: Fonte de schema para construcao automatica (resource/filter).\n - Path: inputs.schemaUrl\n Category: inputs\n Kind: string\n Description: Schema canonico explicito publicado pelo backend para hosts que seguem surfaces/actions/capabilities.\n - Path: inputs.readUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de leitura publicado por surface VIEW/READ_PROJECTION para hidratar a entidade exibida.\n - Path: inputs.apiEndpointKey\n Category: inputs\n Kind: string\n Description: Endpoint canonico usado para resolver schemaUrl, readUrl e submitUrl relativos em hosts destacados.\n - Path: inputs.submitUrl\n Category: inputs\n Kind: string\n Description: Endpoint canonico de submit publicado por surface/action.\n - Path: inputs.submitMethod\n Category: inputs\n Kind: enum\n Description: Metodo HTTP canonico para o submit quando o backend publica operacao explicita.\n - Path: inputs.responseSchemaUrl\n Category: inputs\n Kind: string\n Description: Schema de resposta publicado pelo backend para inspeção diagnostica/read-only do host.\n - Path: inputs.enableCustomization\n Category: inputs\n Kind: boolean\n Description: Habilita a edicao de layout/configuracao no editor.\n - Path: inputs.showAiAssistant\n Category: inputs\n Kind: boolean\n Description: Mostra os gatilhos do copiloto semantico Praxis para a instancia do formulario.\n - Path: inputs.formId\n Category: inputs\n Kind: string\n Description: ID persistente para salvar configuracoes e preferencias.\n - Path: inputs.editorialContext\n Category: inputs\n Kind: object\n Description: Override de contexto editorial fornecido pelo host para os blocos hospedados antes/depois do formulario.\n - Path: inputs.layout\n Category: inputs\n Kind: object\n Description: Layout legado (FormLayout). Preferir inputs.config + sections.\n - Path: inputs.generatedLayoutPreset\n Category: inputs\n Kind: enum\n Description: Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.\n - Path: inputs.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
5824
  "sourcePointer": "praxis-ui-angular/projects/praxis-dynamic-form/src/lib/ai/form-ai-capabilities.ts",
5364
- "contentHash": "808b584a6ec3ba820522adb57e91954dfa544e0a6ad89172ca3c238e5db78ce0",
5825
+ "contentHash": "c8e67b0ab5f83995fad1ca4cf8d5e9e08232b5c889fb2429f103429fd2279bf0",
5365
5826
  "sourceKind": "component_definition",
5366
5827
  "sourceId": "praxis-filter-form-dialog-host",
5367
5828
  "corpusVersion": "1.0.0"
@@ -11233,6 +11694,10 @@
11233
11694
  "value": "html",
11234
11695
  "label": "HTML"
11235
11696
  },
11697
+ {
11698
+ "value": "microVisualization",
11699
+ "label": "Micro visualization"
11700
+ },
11236
11701
  {
11237
11702
  "value": "compose",
11238
11703
  "label": "Compose"
@@ -11442,9 +11907,19 @@
11442
11907
  {
11443
11908
  "value": "html",
11444
11909
  "label": "HTML"
11910
+ },
11911
+ {
11912
+ "value": "microVisualization",
11913
+ "label": "Micro visualization"
11445
11914
  }
11446
11915
  ]
11447
11916
  },
11917
+ "columns[].renderer.microVisualization.visualization.valueExpr": {},
11918
+ "columns[].renderer.microVisualization.visualization.targetExpr": {},
11919
+ "columns[].renderer.microVisualization.visualization.segmentsExpr": {},
11920
+ "columns[].renderer.microVisualization.visualization.pointsExpr": {},
11921
+ "columns[].renderer.microVisualization.visualization.toneExpr": {},
11922
+ "columns[].renderer.microVisualization.visualization.fallbackTextExpr": {},
11448
11923
  "columns[].conditionalRenderers[].renderer.type": {
11449
11924
  "mode": "enum",
11450
11925
  "options": [
@@ -11496,6 +11971,10 @@
11496
11971
  "value": "html",
11497
11972
  "label": "HTML"
11498
11973
  },
11974
+ {
11975
+ "value": "microVisualization",
11976
+ "label": "Micro visualization"
11977
+ },
11499
11978
  {
11500
11979
  "value": "compose",
11501
11980
  "label": "Compose"
@@ -11705,6 +12184,10 @@
11705
12184
  {
11706
12185
  "value": "html",
11707
12186
  "label": "HTML"
12187
+ },
12188
+ {
12189
+ "value": "microVisualization",
12190
+ "label": "Micro visualization"
11708
12191
  }
11709
12192
  ]
11710
12193
  },
@@ -21110,9 +21593,9 @@
21110
21593
  {
21111
21594
  "chunkIndex": 3,
21112
21595
  "chunkKind": "context_pack",
21113
- "content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"optionsByPath\": {\n \"appearance.density\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"comfortable\",\n \"label\": \"Comfortable\"\n },\n {\n \"value\": \"spacious\",\n \"label\": \"Spacious\"\n }\n ]\n },\n \"export.formats\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"excel\",\n \"label\": \"Excel\"\n },\n {\n \"value\": \"pdf\",\n \"label\": \"PDF\"\n },\n {\n \"value\": \"csv\",\n \"label\": \"CSV\"\n },\n {\n \"value\": \"json\",\n \"label\": \"JSON\"\n },\n {\n \"value\": \"print\",\n \"label\": \"Print\"\n }\n ]\n },\n \"columns[].type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"string\",\n \"label\": \"String\"\n },\n {\n \"value\": \"number\",\n \"label\": \"Number\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"percentage\",\n \"label\": \"Percentage\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date\"\n },\n {\n \"value\": \"boolean\",\n \"label\": \"Boolean\"\n },\n {\n \"value\": \"custom\",\n \"label\": \"Custom\"\n }\n ]\n },\n \"columns[].format\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"shortDate\",\n \"label\": \"Date short\",\n \"example\": \"01/12/2023\"\n },\n {\n \"value\": \"mediumDate\",\n \"label\": \"Date medium\",\n \"example\": \"01 Dec 2023\"\n },\n {\n \"value\": \"longDate\",\n \"label\": \"Date long\",\n \"example\": \"01 December 2023\"\n },\n {\n \"value\": \"fullDate\",\n \"label\": \"Date full\",\n \"example\": \"Friday, 01 December 2023\"\n },\n {\n \"value\": \"MMM/yyyy\",\n \"label\": \"Month/Year\",\n \"example\": \"Dec/2023\"\n },\n {\n \"value\": \"shortTime\",\n \"label\": \"Time short\",\n \"example\": \"14:30\"\n },\n {\n \"value\": \"short\",\n \"label\": \"Date+Time short\",\n \"example\": \"01/12/2023 14:30\"\n },\n {\n \"value\": \"yyyy-MM-dd\",\n \"label\": \"ISO 8601\",\n \"example\": \"2023-12-01\"\n },\n {\n \"value\": \"dd/MM/yyyy\",\n \"label\": \"Date dd/MM/yyyy\",\n \"example\": \"01/12/2023\"\n },\n {\n \"value\": \"yyyy-MM-dd HH:mm\",\n \"label\": \"DateTime yyyy-MM-dd HH:mm\",\n \"example\": \"2023-12-01 14:30\"\n },\n {\n \"value\": \"1.0-0\",\n \"label\": \"Number integer\",\n \"example\": \"1,234\"\n },\n {\n \"value\": \"1.1-1\",\n \"label\": \"Number 1 decimal\",\n \"example\": \"1,234.5\"\n },\n {\n \"value\": \"1.2-2\",\n \"label\": \"Number 2 decimals\",\n \"example\": \"1,234.56\"\n },\n {\n \"value\": \"1.0-3\",\n \"label\": \"Number up to 3 decimals\",\n \"example\": \"1,234.567\"\n },\n {\n \"value\": \"1.0-0|nosep\",\n \"label\": \"Number no grouping\",\n \"example\": \"1234\"\n },\n {\n \"value\": \"BRL|symbol|2\",\n \"label\": \"Currency BRL symbol\",\n \"example\": \"R$ 1.234,56\"\n },\n {\n \"value\": \"BRL|symbol|2|nosep\",\n \"label\": \"Currency BRL symbol (no grouping)\",\n \"example\": \"R$ 1234,56\"\n },\n {\n \"value\": \"USD|symbol|2\",\n \"label\": \"Currency USD symbol\",\n \"example\": \"US$ 1,234.56\"\n },\n {\n \"value\": \"EUR|symbol|2\",\n \"label\": \"Currency EUR symbol\",\n \"example\": \"EUR 1,234.56\"\n },\n {\n \"value\": \"BRL|code|2\",\n \"label\": \"Currency code\",\n \"example\": \"1,234.56 BRL\"\n },\n {\n \"value\": \"USD|code|0\",\n \"label\": \"Currency USD code (0 decimals)\",\n \"example\": \"1234 USD\"\n },\n {\n \"value\": \"EUR|symbol|2|nosep\",\n \"label\": \"Currency EUR symbol (no grouping)\",\n \"example\": \"EUR 1234,56\"\n },\n {\n \"value\": \"1.0-0\",\n \"label\": \"Percent 0 decimals\",\n \"example\": \"12%\"\n },\n {\n \"value\": \"1.1-1\",\n \"label\": \"Percent 1 decimal\",\n \"example\": \"12.3%\"\n },\n {\n \"value\": \"1.2-2\",\n \"label\": \"Percent 2 decimals\",\n \"example\": \"12.34%\"\n },\n {\n \"value\": \"1.0-0|x100\",\n \"label\": \"Percent 0 decimals (x100)\",\n \"example\": \"12%\"\n },\n {\n \"value\": \"1.1-1|x100\",\n \"label\": \"Percent 1 decimal (x100)\",\n \"example\": \"12.3%\"\n },\n {\n \"value\": \"1.2-2|x100\",\n \"label\": \"Percent 2 decimals (x100)\",\n \"example\": \"12.34%\"\n },\n {\n \"value\": \"none\",\n \"label\": \"String none\",\n \"example\": \"Sample\"\n },\n {\n \"value\": \"uppercase\",\n \"label\": \"String uppercase\",\n \"example\": \"SAMPLE\"\n },\n {\n \"value\": \"lowercase\",\n \"label\": \"String lowercase\",\n \"example\": \"sample\"\n },\n {\n \"value\": \"titlecase\",\n \"label\": \"String titlecase\",\n \"example\": \"Sample Text\"\n },\n {\n \"value\": \"capitalize\",\n \"label\": \"String capitalize\",\n \"example\": \"Sample\"\n },\n {\n \"value\": \"uppercase|truncate|50|...\",\n \"label\": \"String uppercase + truncate 50\",\n \"example\": \"SAMPLE...\"\n },\n {\n \"value\": \"true-false\",\n \"label\": \"Boolean true/false\",\n \"example\": \"True / False\"\n },\n {\n \"value\": \"yes-no\",\n \"label\": \"Boolean yes/no\",\n \"example\": \"Yes / No\"\n },\n {\n \"value\": \"active-inactive\",\n \"label\": \"Boolean active/inactive\",\n \"example\": \"Active / Inactive\"\n },\n {\n \"value\": \"on-off\",\n \"label\": \"Boolean on/off\",\n \"example\": \"On / Off\"\n },\n {\n \"value\": \"enabled-disabled\",\n \"label\": \"Boolean enabled/disabled\",\n \"example\": \"Enabled / Disabled\"\n },\n {\n \"value\": \"custom|Sim|Nao\",\n \"label\": \"Boolean custom (Sim/Nao)\",\n \"example\": \"Sim / Nao\"\n }\n ]\n },\n \"columns[].computed.outputType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"string\",\n \"label\": \"String\"\n },\n {\n \"value\": \"number\",\n \"label\": \"Number\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"percentage\",\n \"label\": \"Percentage\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date\"\n },\n {\n \"value\": \"boolean\",\n \"label\": \"Boolean\"\n },\n {\n \"value\": \"custom\",\n \"label\": \"Custom\"\n }\n ]\n },\n \"columns[].computed.format\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"shortDate\",\n \"label\": \"Date short\",\n \"example\": \"01/12/2023\"\n },\n {\n \"value\": \"mediumDate\",\n \"label\": \"Date medium\",\n \"example\": \"01 Dec 2023\"\n },\n {\n \"value\": \"longDate\",\n \"label\": \"Date long\",\n \"example\": \"01 December 2023\"\n },\n {\n \"value\": \"fullDate\",\n \"label\": \"Date full\",\n \"example\": \"Friday, 01 December 2023\"\n },\n {\n \"value\": \"MMM/yyyy\",\n \"label\": \"Month/Year\",\n \"example\": \"Dec/2023\"\n },\n {\n \"value\": \"shortTime\",\n \"label\": \"Time short\",\n \"example\": \"14:30\"\n },\n {\n \"value\": \"short\",\n \"label\": \"Date+Time short\",\n \"example\": \"01/12/2023 14:30\"\n },\n {\n \"value\": \"yyyy-MM-dd\",\n \"label\": \"ISO 8601\",\n \"example\": \"2023-12-01\"\n },\n {\n \"value\": \"dd/MM/yyyy\",\n \"label\": \"Date dd/MM/yyyy\",\n \"example\": \"01/12/2023\"\n },\n {\n \"value\": \"yyyy-MM-dd HH:mm\",\n \"label\": \"DateTime yyyy-MM-dd HH:mm\",\n \"example\": \"2023-12-01 14:30\"\n },\n {\n \"value\": \"1.0-0\",\n \"label\": \"Number integer\",\n \"example\": \"1,234\"\n },\n {\n \"value\": \"1.1-1\",\n \"label\": \"Number 1 decimal\",\n \"example\": \"1,234.5\"\n },\n {\n \"value\": \"1.2-2\",\n \"label\": \"Number 2 decimals\",\n \"example\": \"1,234.56\"\n },\n {\n \"value\": \"1.0-3\",\n \"label\": \"Number up to 3 decimals\",\n \"example\": \"1,234.567\"\n },\n {\n \"value\": \"1.0-0|nosep\",\n \"label\": \"Number no grouping\",\n \"example\": \"1234\"\n },\n {\n \"value\": \"BRL|symbol|2\",\n \"label\": \"Currency BRL symbol\",\n \"example\": \"R$ 1.234,56\"\n },\n {\n \"value\": \"BRL|symbol|2|nosep\",\n \"label\": \"Currency BRL symbol (no grouping)\",\n \"example\": \"R$ 1234,56\"\n },\n {\n \"value\": \"USD|symbol|2\",\n \"label\": \"Currency USD symbol\",\n \"example\": \"US$ 1,234.56\"\n },\n {\n \"value\": \"EUR|symbol|2\",\n \"label\": \"Currency EUR symbol\",\n \"example\": \"EUR 1,234.56\"\n },\n {\n \"value\": \"BRL|code|2\",\n \"label\": \"Currency code\",\n \"example\": \"1,234.56 BRL\"\n },\n {\n \"value\": \"USD|code|0\",\n \"label\": \"Currency USD code (0 decimals)\",\n \"example\": \"1234 USD\"\n },\n {\n \"value\": \"EUR|symbol|2|nosep\",\n \"label\": \"Currency EUR symbol (no grouping)\",\n \"example\": \"EUR 1234,56\"\n },\n {\n \"value\": \"1.0-0\",\n \"label\": \"Percent 0 decimals\",\n \"example\": \"12%\"\n },\n {\n \"value\": \"1.1-1\",\n \"label\": \"Percent 1 decimal\",\n \"example\": \"12.3%\"\n },\n {\n \"value\": \"1.2-2\",\n \"label\": \"Percent 2 decimals\",\n \"example\": \"12.34%\"\n },\n {\n \"value\": \"1.0-0|x100\",\n \"label\": \"Percent 0 decimals (x100)\",\n \"example\": \"12%\"\n },\n {\n \"value\": \"1.1-1|x100\",\n \"label\": \"Percent 1 decimal (x100)\",\n \"example\": \"12.3%\"\n },\n {\n \"value\": \"1.2-2|x100\",\n \"label\": \"Percent 2 decimals (x100)\",\n \"example\": \"12.34%\"\n },\n {\n \"value\": \"none\",\n \"label\": \"String none\",\n \"example\": \"Sample\"\n },\n {\n \"value\": \"uppercase\",\n \"label\": \"String uppercase\",\n \"example\": \"SAMPLE\"\n },\n {\n \"value\": \"lowercase\",\n \"label\": \"String lowercase\",\n \"example\": \"sample\"\n },\n {\n \"value\": \"titlecase\",\n \"label\": \"String titlecase\",\n \"example\": \"Sample Text\"\n },\n {\n \"value\": \"capitalize\",\n \"label\": \"String capitalize\",\n \"example\": \"Sample\"\n },\n {\n \"value\": \"uppercase|truncate|50|...\",\n \"label\": \"String uppercase + truncate 50\",\n \"example\": \"SAMPLE...\"\n },\n {\n \"value\": \"true-false\",\n \"label\": \"Boolean true/false\",\n \"example\": \"True / False\"\n },\n {\n \"value\": \"yes-no\",\n \"label\": \"Boolean yes/no\",\n \"example\": \"Yes / No\"\n },\n {\n \"value\": \"active-inactive\",\n \"label\": \"Boolean active/inactive\",\n \"example\": \"Active / Inactive\"\n },\n {\n \"value\": \"on-off\",\n \"label\": \"Boolean on/off\",\n \"example\": \"On / Off\"\n },\n {\n \"value\": \"enabled-disabled\",\n \"label\": \"Boolean enabled/disabled\",\n \"example\": \"Enabled / Disabled\"\n },\n {\n \"value\": \"custom|Sim|Nao\",\n \"label\": \"Boolean custom (Sim/Nao)\",\n \"example\": \"Sim / Nao\"\n }\n ]\n },\n \"behavior.filtering.advancedFilters.settings.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filter\",\n \"label\": \"Filter\"\n }\n ]\n },\n \"behavior.expansion.state.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"controlled\",\n \"label\": \"Controlled\"\n },\n {\n \"value\": \"uncontrolled\",\n \"label\": \"Uncontrolled\"\n }\n ]\n },\n \"behavior.expansion.interaction.trigger\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"row\",\n \"label\": \"Row\"\n },\n {\n \"value\": \"both\",\n \"label\": \"Both\"\n }\n ]\n },\n \"behavior.expansion.interaction.keyboard.profile\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"disclosure\",\n \"label\": \"Disclosure\"\n },\n {\n \"value\": \"grid\",\n \"label\": \"Grid\"\n }\n ]\n },\n \"behavior.expansion.limits.onOverflow\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"collapseOldest\",\n \"label\": \"Collapse Oldest\"\n },\n {\n \"value\": \"denyNew\",\n \"label\": \"Deny New\"\n },\n {\n \"value\": \"collapseAll\",\n \"label\": \"Collapse All\"\n }\n ]\n },\n \"behavior.expansion.collapseOn.sortChange\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"true\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"false\",\n \"label\": \"Disabled\"\n }\n ]\n },\n \"behavior.expansion.collapseOn.pageChange\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"true\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"false\",\n \"label\": \"Disabled\"\n }\n ]\n },\n \"behavior.expansion.collapseOn.filterChange\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"true\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"false\",\n \"label\": \"Disabled\"\n }\n ]\n },\n \"behavior.expansion.collapseOn.dataRefresh\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"true\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"false\",\n \"label\": \"Disabled\"\n }\n ]\n },\n \"behavior.expansion.detail.source.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"inline\",\n \"label\": \"Inline\"\n },\n {\n \"value\": \"resource\",\n \"label\": \"Resource\"\n },\n {\n \"value\": \"resourcePath\",\n \"label\": \"Resource Path\"\n }\n ]\n },\n \"behavior.expansion.detail.source.resource.kind\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"ui-composition\",\n \"label\": \"UI Composition\"\n },\n {\n \"value\": \"form-schema\",\n \"label\": \"Form Schema\"\n },\n {\n \"value\": \"table-schema\",\n \"label\": \"Table Schema\"\n },\n {\n \"value\": \"dashboard-schema\",\n \"label\": \"Dashboard Schema\"\n }\n ]\n },\n \"behavior.expansion.detail.source.resourcePath.method\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"GET\",\n \"label\": \"GET\"\n },\n {\n \"value\": \"POST\",\n \"label\": \"POST\"\n }\n ]\n },\n \"behavior.expansion.detail.source.resourcePath.paramsMap\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"{\\\"id\\\":\\\"$row.id\\\"}\",\n \"label\": \"Row ID\"\n },\n {\n \"value\": \"{\\\"id\\\":\\\"$row.id\\\",\\\"table\\\":\\\"$ctx.tableId\\\"}\",\n \"label\": \"Row + Table\"\n }\n ]\n },\n \"behavior.expansion.detail.source.resourceAllowList[]\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"api/orders/*/detail-schema\",\n \"label\": \"Orders detail schema\"\n },\n {\n \"value\": \"api/customers/*/detail-schema\",\n \"label\": \"Customers detail schema\"\n }\n ]\n },\n \"behavior.expansion.detail.rendering.strategy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"registry\",\n \"label\": \"Registry\"\n }\n ]\n },\n \"behavior.expansion.detail.rendering.hostLayout\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n },\n {\n \"value\": \"stack\",\n \"label\": \"Stack\"\n },\n {\n \"value\": \"tabs\",\n \"label\": \"Tabs\"\n }\n ]\n },\n \"behavior.expansion.detail.rendering.fallbackNodePolicy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"failClosed\",\n \"label\": \"Fail Closed\"\n },\n {\n \"value\": \"renderPlaceholder\",\n \"label\": \"Render Placeholder\"\n }\n ]\n },\n \"behavior.expansion.detail.height.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"fixed\",\n \"label\": \"Fixed\"\n },\n {\n \"value\": \"dynamic\",\n \"label\": \"Dynamic\"\n }\n ]\n },\n \"behavior.expansion.virtualization.policy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"fixed-height-only\",\n \"label\": \"Fixed Height Only\"\n },\n {\n \"value\": \"allow-dynamic-under-flag\",\n \"label\": \"Allow Dynamic Under Flag\"\n }\n ]\n },\n \"behavior.expansion.security.eventExposureDefault.rowId\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"redacted\",\n \"label\": \"Redacted\"\n },\n {\n \"value\": \"hashed\",\n \"label\": \"Hashed\"\n },\n {\n \"value\": \"raw\",\n \"label\": \"Raw\"\n }\n ]\n },\n \"behavior.expansion.security.eventExposureDefault.expandedKeys\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"none\",\n \"label\": \"None\"\n },\n {\n \"value\": \"hashed\",\n \"label\": \"Hashed\"\n },\n {\n \"value\": \"raw\",\n \"label\": \"Raw\"\n }\n ]\n },\n \"behavior.expansion.deepLink.encoding\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"csv\",\n \"label\": \"CSV\"\n }\n ]\n },\n \"behavior.expansion.deepLink.parsing.duplicateParams\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"firstWins\",\n \"label\": \"First Wins\"\n },\n {\n \"value\": \"reject\",\n \"label\": \"Reject\"\n }\n ]\n },\n \"behavior.expansion.deepLink.integrity.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"opaqueToken\",\n \"label\": \"Opaque Token\"\n }\n ]\n },\n \"behavior.expansion.deepLink.privacy.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"denyByDefault\",\n \"label\": \"Deny By Default\"\n },\n {\n \"value\": \"allowByDefault\",\n \"label\": \"Allow By Default\"\n }\n ]\n },\n \"columns[].renderer.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"image\",\n \"label\": \"Image\"\n },\n {\n \"value\": \"badge\",\n \"label\": \"Badge\"\n },\n {\n \"value\": \"link\",\n \"label\": \"Link\"\n },\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"chip\",\n \"label\": \"Chip\"\n },\n {\n \"value\": \"progress\",\n \"label\": \"Progress\"\n },\n {\n \"value\": \"avatar\",\n \"label\": \"Avatar\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"menu\",\n \"label\": \"Menu\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n },\n {\n \"value\": \"compose\",\n \"label\": \"Compose\"\n }\n ]\n },\n \"columns[].renderer.image.shape\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"square\",\n \"label\": \"Square\"\n },\n {\n \"value\": \"rounded\",\n \"label\": \"Rounded\"\n },\n {\n \"value\": \"circle\",\n \"label\": \"Circle\"\n }\n ]\n },\n \"columns[].renderer.image.fit\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"cover\",\n \"label\": \"Cover\"\n },\n {\n \"value\": \"contain\",\n \"label\": \"Contain\"\n }\n ]\n },\n \"columns[].renderer.link.target\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"_blank\",\n \"label\": \"New tab\"\n },\n {\n \"value\": \"_self\",\n \"label\": \"Same tab\"\n },\n {\n \"value\": \"_parent\",\n \"label\": \"Parent frame\"\n },\n {\n \"value\": \"_top\",\n \"label\": \"Top frame\"\n }\n ]\n },\n \"columns[].renderer.button.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n },\n {\n \"value\": \"text\",\n \"label\": \"Text\"\n }\n ]\n },\n \"columns[].renderer.button.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"columns[].renderer.button.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"sm\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"md\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"lg\",\n \"label\": \"Large\"\n }\n ]\n },\n \"columns[].renderer.badge.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n },\n {\n \"value\": \"soft\",\n \"label\": \"Soft\"\n }\n ]\n },\n \"columns[].renderer.chip.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n },\n {\n \"value\": \"soft\",\n \"label\": \"Soft\"\n }\n ]\n },\n \"columns[].renderer.rating.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"small\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"medium\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"large\",\n \"label\": \"Large\"\n }\n ]\n },\n \"columns[].renderer.compose.items[].type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"image\",\n \"label\": \"Image\"\n },\n {\n \"value\": \"badge\",\n \"label\": \"Badge\"\n },\n {\n \"value\": \"link\",\n \"label\": \"Link\"\n },\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"chip\",\n \"label\": \"Chip\"\n },\n {\n \"value\": \"progress\",\n \"label\": \"Progress\"\n },\n {\n \"value\": \"avatar\",\n \"label\": \"Avatar\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"menu\",\n \"label\": \"Menu\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"image\",\n \"label\": \"Image\"\n },\n {\n \"value\": \"badge\",\n \"label\": \"Badge\"\n },\n {\n \"value\": \"link\",\n \"label\": \"Link\"\n },\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"chip\",\n \"label\": \"Chip\"\n },\n {\n \"value\": \"progress\",\n \"label\": \"Progress\"\n },\n {\n \"value\": \"avatar\",\n \"label\": \"Avatar\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"menu\",\n \"label\": \"Menu\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n },\n {\n \"value\": \"compose\",\n \"label\": \"Compose\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.image.shape\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"square\",\n \"label\": \"Square\"\n },\n {\n \"value\": \"rounded\",\n \"label\": \"Rounded\"\n },\n {\n \"value\": \"circle\",\n \"label\": \"Circle\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.image.fit\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"cover\",\n \"label\": \"Cover\"\n },\n {\n \"value\": \"contain\",\n \"label\": \"Contain\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.link.target\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"_blank\",\n \"label\": \"New tab\"\n },\n {\n \"value\": \"_self\",\n \"label\": \"Same tab\"\n },\n {\n \"value\": \"_parent\",\n \"label\": \"Parent frame\"\n },\n {\n \"value\": \"_top\",\n \"label\": \"Top frame\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.button.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n },\n {\n \"value\": \"text\",\n \"label\": \"Text\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.button.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.button.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"sm\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"md\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"lg\",\n \"label\": \"Large\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.badge.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n },\n {\n \"value\": \"soft\",\n \"label\": \"Soft\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.chip.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n },\n {\n \"value\": \"soft\",\n \"label\": \"Soft\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.rating.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"small\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"medium\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"large\",\n \"label\": \"Large\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.compose.items[].type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"image\",\n \"label\": \"Image\"\n },\n {\n \"value\": \"badge\",\n \"label\": \"Badge\"\n },\n {\n \"value\": \"link\",\n \"label\": \"Link\"\n },\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"chip\",\n \"label\": \"Chip\"\n },\n {\n \"value\": \"progress\",\n \"label\": \"Progress\"\n },\n {\n \"value\": \"avatar\",\n \"label\": \"Avatar\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"menu\",\n \"label\": \"Menu\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n }\n ]\n },\n \"actions.row.actions[].color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"actions.row.actions[].icon\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"edit\",\n \"label\": \"Edit\"\n },\n {\n \"value\": \"delete\",\n \"label\": \"Delete\"\n },\n {\n \"value\": \"visibility\",\n \"label\": \"View\"\n },\n {\n \"value\": \"more_vert\",\n \"label\": \"More\"\n },\n {\n \"value\": \"check\",\n \"label\": \"Approve\"\n },\n {\n \"value\": \"close\",\n \"label\": \"Reject\"\n },\n {\n \"value\": \"download\",\n \"label\": \"Download\"\n }\n ]\n },\n \"actions.row.actions[].globalAction.[actionId]\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"toast.success\",\n \"label\": \"Toast success\"\n },\n {\n \"value\": \"toast.error\",\n \"label\": \"Toast error\"\n },\n {\n \"value\": \"dialog.alert\",\n \"label\": \"Dialog alert\"\n },\n {\n \"value\": \"dialog.open\",\n \"label\": \"Dialog open\"\n },\n {\n \"value\": \"navigation.openExternal\",\n \"label\": \"Open external URL\"\n },\n {\n \"value\": \"navigation.openRoute\",\n \"label\": \"Open internal route\"\n },\n {\n \"value\": \"api.post\",\n \"label\": \"API POST\"\n },\n {\n \"value\": \"api.patch\",\n \"label\": \"API PATCH\"\n }\n ]\n },\n \"rowConditionalStyles[].condition\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"status == \\\"active\\\"\",\n \"label\": \"Status Active\"\n },\n {\n \"value\": \"amount < 0\",\n \"label\": \"Negative Amount\"\n },\n {\n \"value\": \"priority == \\\"high\\\"\",\n \"label\": \"High Priority\"\n }\n ]\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"ADD_COLUMN\",\n \"intentExamples\": [\n \"add column\",\n \"nova coluna\",\n \"criar coluna\",\n \"insert column\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": false,\n \"params\": [\n {\n \"name\": \"field\",\n \"type\": \"STRING\",\n \"description\": \"Nome técnico da nova coluna\"\n },\n {\n \"name\": \"header\",\n \"type\": \"STRING\",\n \"description\": \"Título da coluna\"\n }\n ],\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{params.field}}\",\n \"header\": \"{{params.header}}\",\n \"visible\": true\n }\n ]\n }\n },\n {\n \"id\": \"ADD_COLUMN_COMPUTED\",\n \"intentExamples\": [\n \"calculated column\",\n \"coluna calculada\",\n \"compute\",\n \"formula\",\n \"expression\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": false,\n \"params\": [\n {\n \"name\": \"field\",\n \"type\": \"STRING\",\n \"description\": \"Nome técnico da nova coluna (ex: total)\"\n },\n {\n \"name\": \"header\",\n \"type\": \"STRING\",\n \"description\": \"Título da coluna\"\n },\n {\n \"name\": \"expression\",\n \"type\": \"STRING\",\n \"description\": \"AST Json Logic canônico serializado em JSON para derived values (ex: { \\\"*\\\": [{ \\\"var\\\": \\\"quantity\\\" }, { \\\"var\\\": \\\"price\\\" }] })\"\n },\n {\n \"name\": \"type\",\n \"type\": \"ENUM\",\n \"options\": [\n \"number\",\n \"currency\",\n \"percentage\",\n \"string\",\n \"boolean\"\n ],\n \"description\": \"Tipo de dado resultante\"\n }\n ],\n \"relatedConcepts\": [\n \"computed-logic\"\n ],\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{params.field}}\",\n \"header\": \"{{params.header}}\",\n \"visible\": true,\n \"computed\": {\n \"expression\": \"{{params.expression}}\",\n \"outputType\": \"{{params.type}}\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"HIDE_COLUMN\",\n \"intentExamples\": [\n \"hide column\",\n \"ocultar coluna\",\n \"esconder coluna\",\n \"invisible\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"visible\": false\n }\n ]\n }\n },\n {\n \"id\": \"SHOW_COLUMN\",\n \"intentExamples\": [\n \"show column\",\n \"mostrar coluna\",\n \"exibir coluna\",\n \"visible\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"visible\": true\n }\n ]\n }\n },\n {\n \"id\": \"RENAME_COLUMN\",\n \"intentExamples\": [\n \"rename column\",\n \"renomear coluna\",\n \"titulo\",\n \"cabecalho\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"header\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"column.format.set\",\n \"intentExamples\": [\n \"format\",\n \"formatar\",\n \"date format\",\n \"number format\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"format\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"column.type.set\",\n \"intentExamples\": [\n \"type\",\n \"tipo\",\n \"data type\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"type\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"DISABLE_SORT\",\n \"intentExamples\": [\n \"disable sort\",\n \"desativar ordenacao\",\n \"sem ordenacao\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"sortable\": false\n }\n ]\n }\n },\n {\n \"id\": \"ENABLE_SORT\",\n \"intentExamples\": [\n \"enable sort\",\n \"ativar ordenacao\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"sortable\": true\n }\n ]\n }\n },\n {\n \"id\": \"column.width.set\",\n \"intentExamples\": [\n \"width\",\n \"largura\",\n \"col width\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"width\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"column.order.set\",\n \"intentExamples\": [\n \"ordem visual\",\n \"mover coluna\",\n \"colocar depois de\",\n \"colocar antes de\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"NUMBER\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"order\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"column.align.set\",\n \"intentExamples\": [\n \"align\",\n \"alinhamento\",\n \"left\",\n \"center\",\n \"right\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"align\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"column.sticky.set\",\n \"intentExamples\": [\n \"sticky\",\n \"fixar coluna\",\n \"pin column\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"sticky\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"column.renderer.type.set\",\n \"intentExamples\": [\n \"renderer\",\n \"render\",\n \"cell type\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"{{value}}\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"column.renderer.image.shape.set\",\n \"intentExamples\": [\n \"image shape\",\n \"avatar shape\",\n \"imagem recorte\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"image\",\n \"image\": {\n \"shape\": \"{{value}}\"\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"column.renderer.link.target.set\",\n \"intentExamples\": [\n \"link target\",\n \"abrir em nova aba\",\n \"target blank\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"link\",\n \"link\": {\n \"target\": \"{{value}}\"\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"column.renderer.button.style.set\",\n \"intentExamples\": [\n \"button style\",\n \"botao estilo\",\n \"variant\",\n \"color\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"button\",\n \"button\": {\n \"variant\": \"{{params.variant}}\",\n \"color\": \"{{params.color}}\"\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"SET_RENDERER_BADGE\",\n \"intentExamples\": [\n \"render badge\",\n \"exibir como badge\",\n \"status badge\",\n \"etiqueta\",\n \"tag\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"params\": [\n {\n \"name\": \"variant\",\n \"type\": \"ENUM\",\n \"options\": [\n \"filled\",\n \"outlined\",\n \"soft\"\n ],\n \"description\": \"Estilo visual do badge\"\n },\n {\n \"name\": \"color\",\n \"type\": \"ENUM\",\n \"options\": [\n \"primary\",\n \"accent\",\n \"warn\",\n \"success\",\n \"info\"\n ],\n \"description\": \"Cor semântica do badge\"\n }\n ],\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"badge\",\n \"badge\": {\n \"text\": \"{{target}}\",\n \"textField\": \"{{target}}\",\n \"color\": \"{{params.color}}\",\n \"variant\": \"{{params.variant}}\"\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"SET_RENDERER_CHIP\",\n \"intentExamples\": [\n \"render chip\",\n \"exibir como chip\",\n \"chip\",\n \"pilula\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"chip\",\n \"chip\": {\n \"textField\": \"{{target}}\",\n \"color\": \"{{params.color}}\",\n \"variant\": \"{{params.variant}}\"\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"SET_RENDERER_ICON\",\n \"intentExamples\": [\n \"render icon\",\n \"exibir como icone\",\n \"icone\",\n \"icon\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"icon\",\n \"icon\": {\n \"name\": \"{{value}}\",\n \"color\": \"{{params.color}}\",\n \"size\": 18\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"SET_RENDERER_COMPOSE_TITLE_SUBTITLE\",\n \"intentExamples\": [\n \"compose title subtitle\",\n \"titulo e subtitulo\",\n \"two lines\",\n \"duas linhas\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"compose\",\n \"compose\": {\n \"layout\": {\n \"direction\": \"column\",\n \"gap\": 4\n },\n \"items\": [\n {\n \"type\": \"value\",\n \"style\": \"font-weight: 500;\"\n },\n {\n \"type\": \"value\",\n \"textField\": \"{{params.subtitleField}}\",\n \"style\": \"font-size: 0.85em; color: var(--text-secondary);\"\n }\n ]\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"SET_RENDERER_COMPOSE_AVATAR_TEXT\",\n \"intentExamples\": [\n \"compose avatar text\",\n \"avatar e texto\",\n \"user card\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"compose\",\n \"compose\": {\n \"layout\": {\n \"direction\": \"row\",\n \"gap\": 12,\n \"align\": \"center\"\n },\n \"items\": [\n {\n \"type\": \"avatar\",\n \"avatar\": {\n \"srcField\": \"{{params.imageField}}\",\n \"initialsField\": \"{{target}}\",\n \"shape\": \"circle\"\n }\n },\n {\n \"type\": \"compose\",\n \"compose\": {\n \"layout\": {\n \"direction\": \"column\",\n \"gap\": 2\n },\n \"items\": [\n {\n \"type\": \"value\",\n \"style\": \"font-weight: 500;\"\n },\n {\n \"type\": \"value\",\n \"textField\": \"{{params.subtitleField}}\",\n \"style\": \"font-size: 0.85em; opacity: 0.7;\"\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"ENABLE_PAGINATION\",\n \"intentExamples\": [\n \"enable pagination\",\n \"paginar\",\n \"paginação\",\n \"pagination\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"pagination\": {\n \"enabled\": true,\n \"pageSize\": \"{{params.pageSize}}\"\n }\n }\n }\n },\n {\n \"id\": \"DISABLE_PAGINATION\",\n \"intentExamples\": [\n \"disable pagination\",\n \"remover paginacao\",\n \"lista infinita\",\n \"no pagination\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"pagination\": {\n \"enabled\": false\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_FILTERING\",\n \"intentExamples\": [\n \"enable filtering\",\n \"ligar filtros\",\n \"filtrar\",\n \"searchable\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"filtering\": {\n \"enabled\": true\n }\n }\n }\n },\n {\n \"id\": \"DISABLE_FILTERING\",\n \"intentExamples\": [\n \"disable filtering\",\n \"desligar filtros\",\n \"no filter\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"filtering\": {\n \"enabled\": false\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_ADVANCED_FILTERS\",\n \"intentExamples\": [\n \"advanced filters\",\n \"filtros avancados\",\n \"filtro complexo\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"filtering\": {\n \"advancedFilters\": {\n \"enabled\": true\n }\n }\n }\n }\n },\n {\n \"id\": \"SET_FILTER_MODE\",\n \"intentExamples\": [\n \"filter mode\",\n \"modo de filtro\",\n \"modo unico do filtro\",\n \"painel de filtro\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"filtering\": {\n \"advancedFilters\": {\n \"settings\": {\n \"mode\": \"{{value}}\"\n }\n }\n }\n }\n }\n },\n {\n \"id\": \"SET_ALWAYS_VISIBLE_FILTERS\",\n \"intentExamples\": [\n \"always visible filter\",\n \"filtro fixo\",\n \"fixar filtro\",\n \"pin filter\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"filtering\": {\n \"advancedFilters\": {\n \"settings\": {\n \"alwaysVisibleFields\": [\n \"{{target}}\"\n ]\n }\n }\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_FILTER_SAVING\",\n \"intentExamples\": [\n \"save filters\",\n \"salvar filtros\",\n \"filter tags\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"filtering\": {\n \"advancedFilters\": {\n \"settings\": {\n \"allowSaveTags\": true\n }\n }\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_SORTING\",\n \"intentExamples\": [\n \"enable sorting\",\n \"ligar ordenacao\",\n \"ordenar\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"sorting\": {\n \"enabled\": true\n }\n }\n }\n },\n {\n \"id\": \"DISABLE_SORTING\",\n \"intentExamples\": [\n \"disable sorting\",\n \"desligar ordenacao\",\n \"no sort\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"sorting\": {\n \"enabled\": false\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_SELECTION\",\n \"intentExamples\": [\n \"enable selection\",\n \"ativar selecao\",\n \"selecionavel\",\n \"selectable\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"selection\": {\n \"enabled\": true\n }\n }\n }\n },\n {\n \"id\": \"DISABLE_SELECTION\",\n \"intentExamples\": [\n \"disable selection\",\n \"remover selecao\",\n \"not selectable\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"selection\": {\n \"enabled\": false\n }\n }\n }\n },\n {\n \"id\": \"SET_SELECTION_SINGLE\",\n \"intentExamples\": [\n \"single selection\",\n \"selecao unica\",\n \"selecionar um\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": \"single\",\n \"patchTemplate\": {\n \"behavior\": {\n \"selection\": {\n \"type\": \"single\"\n }\n }\n }\n },\n {\n \"id\": \"SET_SELECTION_MULTIPLE\",\n \"intentExamples\": [\n \"multiple selection\",\n \"selecao multipla\",\n \"selecionar varios\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": \"multiple\",\n \"patchTemplate\": {\n \"behavior\": {\n \"selection\": {\n \"type\": \"multiple\"\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_EXPORT\",\n \"intentExamples\": [\n \"enable export\",\n \"ativar exportacao\",\n \"botão exportar\",\n \"excel\",\n \"pdf\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"export\": {\n \"enabled\": true\n },\n \"toolbar\": {\n \"visible\": true\n }\n }\n },\n {\n \"id\": \"DISABLE_EXPORT\",\n \"intentExamples\": [\n \"disable export\",\n \"remover exportacao\",\n \"esconder exportar\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"export\": {\n \"enabled\": false\n }\n }\n },\n {\n \"id\": \"SET_DENSITY\",\n \"intentExamples\": [\n \"set density\",\n \"mudar densidade\",\n \"compacto\",\n \"confortavel\",\n \"espacoso\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"appearance\": {\n \"density\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"SHOW_BORDERS\",\n \"intentExamples\": [\n \"show borders\",\n \"mostrar bordas\",\n \"com bordas\",\n \"grid lines\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"appearance\": {\n \"borders\": {\n \"showRowBorders\": true,\n \"showColumnBorders\": true\n }\n }\n }\n },\n {\n \"id\": \"HIDE_BORDERS\",\n \"intentExamples\": [\n \"hide borders\",\n \"ocultar bordas\",\n \"sem bordas\",\n \"clean look\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"appearance\": {\n \"borders\": {\n \"showRowBorders\": false,\n \"showColumnBorders\": false,\n \"showOuterBorder\": false\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_STRIPED_ROWS\",\n \"intentExamples\": [\n \"striped rows\",\n \"zebrado\",\n \"linhas alternadas\",\n \"zebra\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"appearance\": {\n \"colors\": {\n \"alternateRowBackground\": \"#f7f9fc\"\n }\n }\n }\n },\n {\n \"id\": \"DISABLE_STRIPED_ROWS\",\n \"intentExamples\": [\n \"disable striped\",\n \"remover zebrado\",\n \"fundo solido\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"appearance\": {\n \"colors\": {}\n }\n }\n },\n {\n \"id\": \"SHOW_TOOLBAR\",\n \"intentExamples\": [\n \"show toolbar\",\n \"mostrar toolbar\",\n \"barra de ferramentas\",\n \"titulo da tabela\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"toolbar\": {\n \"visible\": true\n }\n }\n },\n {\n \"id\": \"HIDE_TOOLBAR\",\n \"intentExamples\": [\n \"hide toolbar\",\n \"esconder toolbar\",\n \"remover titulo\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"toolbar\": {\n \"visible\": false\n }\n }\n },\n {\n \"id\": \"SET_TOOLBAR_POSITION\",\n \"intentExamples\": [\n \"toolbar position\",\n \"posicao da toolbar\",\n \"toolbar no topo\",\n \"toolbar embaixo\",\n \"toolbar em cima\",\n \"toolbar ambos\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"toolbar\": {\n \"position\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"SET_TOOLBAR_ACTIONS_POSITION\",\n \"intentExamples\": [\n \"acoes da toolbar\",\n \"barra de acoes\",\n \"acoes no topo\",\n \"acoes embaixo\",\n \"acoes em cima\",\n \"acoes em ambos\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"toolbar\": {\n \"actionsPosition\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"SET_TOOLBAR_ACTIONS_BG\",\n \"intentExamples\": [\n \"cor barra de acoes\",\n \"fundo da barra de acoes\",\n \"background acoes\",\n \"acoes com cor\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"toolbar\": {\n \"actionsBackgroundColor\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"ENABLE_VIRTUALIZATION\",\n \"intentExamples\": [\n \"enable virtualization\",\n \"virtualizar\",\n \"scroll infinito\",\n \"performance\",\n \"large dataset\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"virtualization\": {\n \"enabled\": true,\n \"itemHeight\": 48\n }\n },\n \"performance\": {\n \"virtualization\": {\n \"enabled\": true,\n \"itemHeight\": 48\n }\n }\n }\n },\n {\n \"id\": \"DISABLE_VIRTUALIZATION\",\n \"intentExamples\": [\n \"disable virtualization\",\n \"desativar virtualizacao\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"virtualization\": {\n \"enabled\": false\n }\n },\n \"performance\": {\n \"virtualization\": {\n \"enabled\": false\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_ROW_EXPANSION\",\n \"intentExamples\": [\n \"expand row\",\n \"expandir linha\",\n \"detalhe expansivel\",\n \"row details\",\n \"master detail\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"expansion\": {\n \"enabled\": true,\n \"contractVersion\": \"1.0.0\",\n \"interaction\": {\n \"trigger\": \"icon\",\n \"keyboard\": {\n \"profile\": \"disclosure\"\n }\n },\n \"limits\": {\n \"allowMultiple\": false,\n \"maxExpandedRows\": 1,\n \"onOverflow\": \"collapseOldest\"\n },\n \"detail\": {\n \"schemaContract\": {\n \"kind\": \"praxis.detail.schema\",\n \"version\": \"1.0.0\"\n },\n \"source\": {\n \"mode\": \"inline\",\n \"inlineSchema\": {\n \"layout\": \"stack\",\n \"items\": []\n }\n },\n \"rendering\": {\n \"strategy\": \"registry\",\n \"registryId\": \"praxis.detail.default\"\n }\n }\n }\n }\n }\n },\n {\n \"id\": \"SET_EXPANSION_SOURCE_MODE\",\n \"intentExamples\": [\n \"expansion source\",\n \"detail source\",\n \"schema source\",\n \"resource detail\",\n \"resourcePath detail\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"expansion\": {\n \"detail\": {\n \"source\": {\n \"mode\": \"{{value}}\"\n }\n }\n }\n }\n }\n },\n {\n \"id\": \"SET_EXPANSION_RESOURCE\",\n \"intentExamples\": [\n \"detail resource id\",\n \"resource detail id\",\n \"ui composition detail\",\n \"schema detail resource\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"expansion\": {\n \"detail\": {\n \"source\": {\n \"mode\": \"resource\",\n \"resource\": {\n \"kind\": \"{{params.kind}}\",\n \"id\": \"{{params.id}}\",\n \"version\": \"{{params.version}}\"\n }\n }\n }\n }\n }\n }\n },\n {\n \"id\": \"SET_COLUMN_BOLD\",\n \"intentExamples\": [\n \"column bold\",\n \"coluna negrito\",\n \"destacar coluna\",\n \"bold text\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"style\": \"font-weight: 600;\"\n }\n ]\n }\n },\n {\n \"id\": \"SET_COLUMN_COLOR\",\n \"intentExamples\": [\n \"column color\",\n \"cor da coluna\",\n \"pintar coluna\",\n \"text color\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"style\": \"color: {{value}};\"\n }\n ]\n }\n },\n {\n \"id\": \"SET_HEADER_UPPERCASE\",\n \"intentExamples\": [\n \"header uppercase\",\n \"cabecalho maiuscula\",\n \"titulo caixa alta\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"headerStyle\": \"text-transform: uppercase;\"\n }\n ]\n }\n },\n {\n \"id\": \"SET_HEADER_BOLD\",\n \"intentExamples\": [\n \"header bold\",\n \"cabecalho negrito\",\n \"titulo forte\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"headerStyle\": \"font-weight: 600;\"\n }\n ]\n }\n },\n {\n \"id\": \"SET_HEADER_BG_COLOR\",\n \"intentExamples\": [\n \"header background\",\n \"fundo cabecalho\",\n \"cor titulo\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"headerStyle\": \"background-color: {{value}};\"\n }\n ]\n }\n },\n {\n \"id\": \"SET_HEADER_TEXT_COLOR\",\n \"intentExamples\": [\n \"header text color\",\n \"cor texto cabecalho\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"headerStyle\": \"color: {{value}};\"\n }\n ]\n }\n },\n {\n \"id\": \"SET_TOOLBAR_ALIGNMENT\",\n \"intentExamples\": [\n \"toolbar align\",\n \"alinhar toolbar\",\n \"alinhamento barra\",\n \"space-between\",\n \"start\",\n \"end\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"toolbar\": {\n \"layout\": {\n \"alignment\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_GROUPING\",\n \"intentExamples\": [\n \"group by\",\n \"agrupar por\",\n \"agrupamento\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"grouping\": {\n \"enabled\": true,\n \"fields\": [\n \"{{target}}\"\n ],\n \"expanded\": true\n }\n }\n }\n },\n {\n \"id\": \"CLEAR_GROUPING\",\n \"intentExamples\": [\n \"ungroup\",\n \"desagrupar\",\n \"remover agrupamento\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"grouping\": {\n \"enabled\": false,\n \"fields\": []\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_ROW_ACTIONS\",\n \"intentExamples\": [\n \"enable row actions\",\n \"acoes de linha\",\n \"botoes na linha\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"actions\": {\n \"row\": {\n \"enabled\": true,\n \"sticky\": \"end\"\n }\n }\n }\n },\n {\n \"id\": \"ADD_ROW_ACTION_ICON\",\n \"intentExamples\": [\n \"add row action\",\n \"botao de acao\",\n \"adicionar botao\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"actions\": {\n \"row\": {\n \"actions\": [\n {\n \"id\": \"{{id}}\",\n \"icon\": \"{{icon}}\",\n \"label\": \"{{label}}\",\n \"color\": \"{{params.color}}\",\n \"overflow\": false\n }\n ]\n }\n }\n }\n },\n {\n \"id\": \"ADD_ROW_ACTION_MENU\",\n \"intentExamples\": [\n \"add row menu\",\n \"acao no menu\",\n \"item de menu\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"actions\": {\n \"row\": {\n \"actions\": [\n {\n \"id\": \"{{id}}\",\n \"icon\": \"{{icon}}\",\n \"label\": \"{{label}}\",\n \"overflow\": true\n }\n ]\n }\n }\n }\n },\n {\n \"id\": \"ADD_ROW_STYLE_BG\",\n \"intentExamples\": [\n \"row background condition\",\n \"pintar linha se\",\n \"cor de fundo condicional\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"rowConditionalStyles\": [\n {\n \"condition\": \"{{condition}}\",\n \"style\": {\n \"background-color\": \"{{value}}\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"ADD_ROW_STYLE_COLOR\",\n \"intentExamples\": [\n \"row text color condition\",\n \"cor texto linha se\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"rowConditionalStyles\": [\n {\n \"condition\": \"{{condition}}\",\n \"style\": {\n \"color\": \"{{value}}\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"ADD_CONDITIONAL_RENDERER\",\n \"intentExamples\": [\n \"conditional renderer\",\n \"renderer condicional\",\n \"badge condicional\",\n \"chip condicional\",\n \"badge se\",\n \"chip se\",\n \"conditional badge\",\n \"conditional chip\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": true,\n \"params\": [\n {\n \"name\": \"condition\",\n \"type\": \"STRING\",\n \"description\": \"Expressao condicional (ex: recompensa > 500000)\"\n },\n {\n \"name\": \"renderer\",\n \"type\": \"STRING\",\n \"description\": \"Renderer completo com type e config (ex: { type: \\\"badge\\\", badge: { textField: \\\"recompensa\\\", color: \\\"#ff69b4\\\", variant: \\\"filled\\\" } })\"\n }\n ],\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"conditionalRenderers\": [\n {\n \"condition\": \"{{params.condition}}\",\n \"renderer\": \"{{params.renderer}}\"\n }\n ]\n }\n ]\n }\n },\n {\n \"id\": \"ADD_CONDITIONAL_ICON\",\n \"intentExamples\": [\n \"conditional icon\",\n \"icone condicional\",\n \"icone se\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"conditionalRenderers\": [\n {\n \"condition\": \"{{condition}}\",\n \"renderer\": {\n \"type\": \"icon\",\n \"icon\": {\n \"name\": \"{{value}}\",\n \"color\": \"{{params.color}}\"\n }\n }\n }\n ]\n }\n ]\n }\n }\n ],\n \"fieldResolvers\": {\n \"columns[].field\": [\n \"field\",\n \"header\"\n ],\n \"actions.row.actions[].id\": [\n \"id\",\n \"label\"\n ],\n \"rowConditionalStyles[].condition\": [\n \"condition\"\n ]\n },\n \"hints\": [\n \"Use semantic patches with columns[] and field, not JSON Patch or column indexes.\",\n \"Set columns[].type before choosing columns[].format presets to avoid mismatched formatting.\",\n \"Renderer config overrides format/valueMapping; avoid mixing unless required.\",\n \"Use ADD_CONDITIONAL_RENDERER with renderer.type + renderer.<type> config for conditional badges/chips.\",\n \"When the table already shows a status/boolean column as valueMapping or chip/badge and the user refines colors, variants, icons, animation or tooltip, preserve the target column and create conditionalRenderers per semantic value instead of repeating the same valueMapping.\",\n \"For boolean chips/badges, model true/false branches explicitly: condition {\\\"==\\\":[{\\\"var\\\":\\\"<field>\\\"},true]} for the positive label and {\\\"==\\\":[{\\\"var\\\":\\\"<field>\\\"},false]} for the negative label; use renderer.type \\\"chip\\\" or \\\"badge\\\" with text, color and variant.\",\n \"DOC: Widget purpose: data table with sorting, filtering, pagination, and actions.\",\n \"DOC: Host inputs: tableId (required), resourcePath (optional), config (optional).\",\n \"DOC: config defaults to createDefaultTableConfig(); columns may start empty.\",\n \"DOC: behavior.expansion.detail é schema-driven; altere source.mode (inline/resource/resourcePath), não use detail.type.\",\n \"DOC: Para detail.source.mode=resource, sempre informar resource.kind + resource.id + resource.version.\",\n \"DOC: Para detail.source.mode=resourcePath, sempre informar resourcePath.paramsMap + resourceAllowList[]; URL absoluta/scheme (http:, https:, data:, javascript:) é bloqueada e o runtime aplica fail-closed.\",\n \"DOC: collapseOn ativo no runtime P0A: sortChange, pageChange, filterChange e dataRefresh.\",\n \"DOC: When resourcePath is available, the table can load schema and data; ask the user to pick an API resource when missing.\",\n \"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\",\n \"DOC: columns[].computed.expression agora usa AST Json Logic canônico para derived values; não use fórmulas string.\",\n \"DOC: Operadores/funções canônicos úteis: +, -, *, /, %, min, max, cat, substr, round, ceil, floor, abs, coalesce, now, date, yearsSince, monthsSince, daysSince, len, toNumber e stringify.\",\n \"DOC: Examples: {\\\"yearsSince\\\":[{\\\"var\\\":\\\"dataNascimento\\\"}]} → idade; {\\\"yearsSince\\\":[{\\\"var\\\":\\\"dataAdmissao\\\"}]} → tempoEmpresa (anos); {\\\"monthsSince\\\":[{\\\"var\\\":\\\"dataAdmissao\\\"}]} → tempoEmpresa (meses); {\\\"daysSince\\\":[{\\\"var\\\":\\\"dataCadastro\\\"}]} → dias desde cadastro; {\\\"+\\\":[{\\\"coalesce\\\":[{\\\"var\\\":\\\"bonus\\\"},0]},{\\\"var\\\":\\\"salario\\\"}]} → total com fallback.\",\n \"### DATA ARCHETYPE TO VISUAL STRATEGY\",\n \"Apply these patterns based on the SEMANTIC NATURE of the column data:\",\n \"- STATUS/STATE (e.g., phase, stage, is_active, priority):\",\n \" -> Use \\\"badge\\\" or \\\"chip\\\" with conditional colors (success/warn/error/info).\",\n \" -> Use \\\"valueMapping\\\" to convert codes (1, \\\"A\\\") to labels (\\\"Active\\\", \\\"Approved\\\").\",\n \"- METRICS/KPI (e.g., progress, score, rating, completion):\",\n \" -> Use \\\"progress\\\" (bars), \\\"rating\\\" (stars), or \\\"percentage\\\" type.\",\n \" -> Align \\\"right\\\".\",\n \"- FINANCIAL (e.g., price, cost, balance, total):\",\n \" -> Use type \\\"currency\\\" and format \\\"BRL|symbol|2\\\" (or per locale).\",\n \" -> Align \\\"right\\\". Style: \\\"font-variant-numeric: tabular-nums\\\".\",\n \"- ENTITIES (e.g., user, product, thumb):\",\n \" -> Use \\\"avatar\\\" (for people/users) or \\\"image\\\" (for products/files).\",\n \" -> Combine with \\\"link\\\" or \\\"compose\\\" for title+subtitle layouts.\",\n \"- INTERACTIVE/NAV (e.g., details, website, download):\",\n \" -> Use \\\"button\\\" (actions), \\\"link\\\" (navigation) or \\\"icon\\\" (simple triggers).\",\n \"- BOOLEAN (e.g., has_tax, is_valid):\",\n \" -> Use \\\"toggle\\\" (if editable) or \\\"icon\\\" (check/close) or \\\"badge\\\" (Yes/No).\",\n \"- IDENTIFIERS (e.g., uuid, sku, order_id, cpf):\",\n \" -> Style: \\\"font-family: monospace\\\".\",\n \" -> CRITICAL: Do NOT use numeric formatting (like \\\"1.0-0\\\") for IDs. Treat them as strings.\",\n \" -> Consider adding a \\\"copy\\\" context action.\",\n \"- GROUPING (e.g., category, department):\",\n \" -> If the user asks to \\\"group by X\\\", use the ENABLE_GROUPING action with target=X.\",\n \"- TEMPORAL (e.g., created_at, deadline):\",\n \" -> Use type \\\"date\\\". Prefer \\\"short\\\" or \\\"shortDate\\\" for compact views.\",\n \" -> Use standard format (dd/MM/yyyy) for strict records.\"\n ]\n },\n \"aiConcepts\": {\n \"authoring-envelope\": {\n \"id\": \"authoring-envelope\",\n \"title\": \"Envelope de Autoria\",\n \"description\": \"Contrato primário de autoria usado por editor visual, editor JSON, playground e IA.\",\n \"rules\": [\n \"O JSON primário de autoria é TableAuthoringDocument com kind \\\"praxis.table.editor\\\".\",\n \"bindings.resourcePath e bindings.horizontalScroll não devem ser embutidos diretamente no TableConfig.\",\n \"meta.idField pertence ao TableConfig canônico e deve ser editado como metadado da configuração.\",\n \"TableConfig representa a projeção canônica de runtime, não o envelope completo de autoria.\",\n \"meta.schemaId e meta.serverHash são snapshots persistidos de reconciliação, não fonte primária do runtime.\"\n ],\n \"examples\": [\n \"{ kind: \\\"praxis.table.editor\\\", version: 1, config: { meta: { idField: \\\"employeeId\\\" }, columns: [{ field: \\\"name\\\", header: \\\"Nome\\\" }] }, bindings: { resourcePath: \\\"employees\\\", horizontalScroll: \\\"auto\\\" } }\"\n ],\n \"antiPatterns\": [\n \"{ columns: [{ field: \\\"name\\\", header: \\\"Nome\\\" }], __resourcePath__: \\\"employees\\\" }\",\n \"{ config: { columns: [] }, bindings: { idField: \\\"employeeId\\\" } }\"\n ]\n },\n \"meta-identity\": {\n \"id\": \"meta-identity\",\n \"title\": \"Identidade e Metadados\",\n \"description\": \"Regras para meta.* persistível (nome, descrição, tags, schemaId).\",\n \"rules\": [\n \"meta.idField deve apontar para o campo único das linhas quando configurado.\",\n \"Alterar meta.idField exige confirmação pois impacta seleção e ações por linha.\",\n \"meta.tags deve ser uma lista de strings curtas e sem espaços extras.\",\n \"meta.schemaId é referência de origem; use apenas valores conhecidos.\"\n ],\n \"examples\": [\n \"meta.name = \\\"Funcionários ativos\\\"\",\n \"meta.description = \\\"Visão de colaboradores ativos com filtros por status.\\\"\",\n \"meta.tags = [\\\"financeiro\\\", \\\"demo\\\"]\",\n \"meta.idField = \\\"employeeId\\\"\"\n ],\n \"antiPatterns\": [\n \"meta.idField = \\\"id\\\" (sem validar se existe no dataset)\",\n \"meta.tags = \\\"financeiro\\\"\"\n ]\n },\n \"columns-core\": {\n \"id\": \"columns-core\",\n \"title\": \"Colunas Básicas\",\n \"description\": \"Definições essenciais de colunas (field, header, visible, order, width).\",\n \"rules\": [\n \"columns[].field deve ser único e existir no dataset.\",\n \"Não reutilize o mesmo field em duas colunas.\",\n \"Use order para posicionar colunas; menor valor = mais à esquerda.\",\n \"width aceita valores CSS (ex.: \\\"120px\\\", \\\"10%\\\", \\\"auto\\\").\"\n ],\n \"examples\": [\n \"{ field: \\\"status\\\", header: \\\"Status\\\", visible: true, order: 2 }\",\n \"{ field: \\\"createdAt\\\", header: \\\"Criado em\\\", width: \\\"140px\\\" }\"\n ],\n \"antiPatterns\": [\n \"{ field: \\\"status\\\", header: \\\"Status\\\" } e outra coluna com field \\\"status\\\"\",\n \"{ field: \\\"price\\\", width: 120 }\"\n ]\n },\n \"columns-behavior\": {\n \"id\": \"columns-behavior\",\n \"title\": \"Comportamento de Coluna\",\n \"description\": \"Configura sortable, filterable, resizable, align e sticky.\",\n \"rules\": [\n \"sortable e filterable devem refletir o comportamento real do backend.\",\n \"resizable depende de behavior.resizing.enabled quando disponível.\",\n \"align deve ser left/center/right.\",\n \"sticky aceita true, \\\"start\\\" ou \\\"end\\\".\"\n ],\n \"examples\": [\n \"{ field: \\\"amount\\\", sortable: true, filterable: true, align: \\\"right\\\" }\",\n \"{ field: \\\"id\\\", sticky: \\\"start\\\" }\"\n ],\n \"antiPatterns\": [\n \"{ align: \\\"middle\\\" }\",\n \"{ sticky: \\\"left\\\" }\"\n ]\n },\n \"columns-styles\": {\n \"id\": \"columns-styles\",\n \"title\": \"Estilos de Coluna\",\n \"description\": \"CSS inline e classes para células e cabeçalho.\",\n \"rules\": [\n \"cssClass/headerCssClass devem ser nomes de classe válidos.\",\n \"style/headerStyle são CSS inline curtos e seguros.\",\n \"Evite !important e regras muito longas.\"\n ],\n \"examples\": [\n \"{ field: \\\"status\\\", cssClass: \\\"col-status\\\" }\",\n \"{ field: \\\"name\\\", headerStyle: \\\"text-transform: uppercase;\\\" }\"\n ],\n \"antiPatterns\": [\n \"{ headerCssClass: \\\"header title\\\" }\",\n \"{ style: \\\"background: url(javascript:...)\\\" }\"\n ]\n },\n \"columns-types\": {\n \"id\": \"columns-types\",\n \"title\": \"Tipos e Formatos de Coluna\",\n \"description\": \"Regras de type/format por tipo de dado.\",\n \"rules\": [\n \"type deve ser um dos tipos suportados (string/number/date/boolean/currency/percentage/custom).\",\n \"format deve ser compatível com type e presets do sistema.\",\n \"Para currency, use formato \\\"BRL|symbol|2\\\" ou semelhante.\",\n \"Para date, use DatePipe ou presets existentes.\"\n ],\n \"examples\": [\n \"{ field: \\\"createdAt\\\", type: \\\"date\\\", format: \\\"dd/MM/yyyy\\\" }\",\n \"{ field: \\\"amount\\\", type: \\\"currency\\\", format: \\\"BRL|symbol|2\\\" }\"\n ],\n \"antiPatterns\": [\n \"{ type: \\\"money\\\" }\",\n \"{ format: \\\"money()\\\" }\"\n ]\n },\n \"columns-formatting\": {\n \"id\": \"columns-formatting\",\n \"title\": \"Mapeamento e Formatação Avançada\",\n \"description\": \"valueMapping, format e estilos adicionais.\",\n \"rules\": [\n \"valueMapping deve usar chaves de string para mapear valores crus.\",\n \"Use format presets quando disponíveis; evite formatos inventados.\"\n ],\n \"syntax\": \"format: \\\"BRL|symbol|2\\\"\",\n \"examples\": [\n \"{ field: \\\"active\\\", valueMapping: { \\\"1\\\": \\\"Ativo\\\", \\\"0\\\": \\\"Inativo\\\" } }\"\n ],\n \"antiPatterns\": [\n \"{ valueMapping: { 1: \\\"Ativo\\\" } }\"\n ]\n },\n \"columns-internals\": {\n \"id\": \"columns-internals\",\n \"title\": \"Campos Internos de Coluna\",\n \"description\": \"Campos reservados usados por fluxos internos e importação.\",\n \"rules\": [\n \"Evite setar _styleRulesState, _generatedValueGetter, _originalApiType e _isApiField manualmente.\",\n \"Use apenas em fluxos de migração ou importação controlada.\"\n ],\n \"examples\": [\n \"(_isApiField true só quando coluna veio da API)\"\n ],\n \"antiPatterns\": [\n \"{ _generatedValueGetter: \\\"row => row.value\\\" }\"\n ]\n },\n \"computed-logic\": {\n \"id\": \"computed-logic\",\n \"title\": \"Lógica de Colunas Calculadas\",\n \"description\": \"Regras matemáticas e de sintaxe para colunas computed.\",\n \"rules\": [\n \"Use AST Json Logic canônico em columns[].computed.expression.\",\n \"Acesse campos da linha com {\\\"var\\\":\\\"field\\\"} e dependências anteriores com {\\\"var\\\":\\\"computed.total\\\"}.\",\n \"Operadores/funções disponíveis incluem +, -, *, /, %, min, max, cat, substr, round, floor, ceil, abs, coalesce, now, date, yearsSince, monthsSince, daysSince, len, toNumber e stringify.\",\n \"NÃO use prefixos como \\\"row.\\\", \\\"this.\\\" ou \\\"item.\\\", nem strings DSL.\",\n \"O resultado deve ser compatível com o outputType (number, currency, percentage, string).\"\n ],\n \"syntax\": \"{\\\"*\\\":[{\\\"var\\\":\\\"fieldA\\\"},{\\\"var\\\":\\\"fieldB\\\"}]}\",\n \"examples\": [\n \"{\\\"*\\\":[{\\\"var\\\":\\\"quantity\\\"},{\\\"var\\\":\\\"unitPrice\\\"}]}\",\n \"{\\\"/\\\":[{\\\"-\\\":[{\\\"var\\\":\\\"total\\\"},{\\\"var\\\":\\\"cost\\\"}]},{\\\"var\\\":\\\"total\\\"}]}\",\n \"{\\\"min\\\":[{\\\"var\\\":\\\"stock\\\"},100]}\",\n \"{\\\"abs\\\":[{\\\"var\\\":\\\"balance\\\"}]}\"\n ],\n \"antiPatterns\": [\n \"\\\"quantity * price\\\"\",\n \"row.quantity * row.price\",\n \"Math.max(price, 0)\",\n \"return quantity * price;\"\n ]\n },\n \"renderers-core\": {\n \"id\": \"renderers-core\",\n \"title\": \"Renderers de Coluna\",\n \"description\": \"Regras para columns[].renderer.* e tipos suportados.\",\n \"rules\": [\n \"Defina columns[].renderer.type antes de configurar detalhes.\",\n \"Para renderers interativos (button, toggle, menu), configure action.\",\n \"renderer.html deve usar template com placeholders [[field]].\",\n \"renderer.link deve preferir hrefField/textField quando o valor vem do dataset.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"badge\\\", badge: { textField: \\\"status\\\", color: \\\"success\\\" } } }\",\n \"{ renderer: { type: \\\"button\\\", button: { label: \\\"Editar\\\", action: { id: \\\"edit-row\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ renderer: { badge: { text: \\\"Ativo\\\" } } }\",\n \"{ renderer: { type: \\\"button\\\", button: { label: \\\"Editar\\\" } } }\"\n ]\n },\n \"renderer-icon\": {\n \"id\": \"renderer-icon\",\n \"title\": \"Renderer Icon\",\n \"description\": \"Configuração de renderer.icon.*\",\n \"rules\": [\n \"Use icon.name para ícone fixo ou icon.nameField para dinâmico.\",\n \"icon.size é em px.\",\n \"ariaLabel deve ser descritivo.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"icon\\\", icon: { name: \\\"check_circle\\\", color: \\\"success\\\", size: 18 } } }\"\n ],\n \"antiPatterns\": [\n \"{ icon: { name: \\\"check\\\" } } sem renderer.type\"\n ]\n },\n \"renderer-image\": {\n \"id\": \"renderer-image\",\n \"title\": \"Renderer Image\",\n \"description\": \"Configuração de renderer.image.*\",\n \"rules\": [\n \"Use srcField quando a URL vem do dataset.\",\n \"Defina alt/altField para acessibilidade.\",\n \"width/height são em px.\",\n \"shape deve ser square/rounded/circle.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"image\\\", image: { srcField: \\\"avatarUrl\\\", shape: \\\"circle\\\", width: 32, height: 32 } } }\"\n ],\n \"antiPatterns\": [\n \"{ renderer: { type: \\\"image\\\", image: { src: \\\"\\\" } } }\"\n ]\n },\n \"renderer-badge\": {\n \"id\": \"renderer-badge\",\n \"title\": \"Renderer Badge\",\n \"description\": \"Configuração de renderer.badge.*\",\n \"rules\": [\n \"Badge requer text ou textField.\",\n \"variant deve ser filled/outlined/soft.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"badge\\\", badge: { textField: \\\"status\\\", variant: \\\"filled\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ badge: {} }\"\n ]\n },\n \"renderer-link\": {\n \"id\": \"renderer-link\",\n \"title\": \"Renderer Link\",\n \"description\": \"Configuração de renderer.link.*\",\n \"rules\": [\n \"Use hrefField quando URL vem do dataset.\",\n \"target deve ser _blank/_self/_parent/_top.\",\n \"rel deve ser usado com target _blank (ex.: noopener).\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"link\\\", link: { textField: \\\"name\\\", hrefField: \\\"profileUrl\\\", target: \\\"_blank\\\", rel: \\\"noopener\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ link: { href: \\\"javascript:alert(1)\\\" } }\"\n ]\n },\n \"renderer-button\": {\n \"id\": \"renderer-button\",\n \"title\": \"Renderer Button\",\n \"description\": \"Configuração de renderer.button.*\",\n \"rules\": [\n \"button.action.id é obrigatório para ações interativas.\",\n \"disabledCondition usa expressao condicional canonica em JSON Logic.\",\n \"variant deve ser filled/outlined/text.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"button\\\", button: { label: \\\"Editar\\\", action: { id: \\\"edit-row\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ button: { label: \\\"Editar\\\" } }\"\n ]\n },\n \"renderer-chip\": {\n \"id\": \"renderer-chip\",\n \"title\": \"Renderer Chip\",\n \"description\": \"Configuração de renderer.chip.*\",\n \"rules\": [\n \"Chip requer text ou textField.\",\n \"variant deve ser filled/outlined/soft.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"chip\\\", chip: { text: \\\"Ativo\\\", variant: \\\"filled\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ chip: { variant: \\\"ghost\\\" } }\"\n ]\n },\n \"renderer-progress\": {\n \"id\": \"renderer-progress\",\n \"title\": \"Renderer Progress\",\n \"description\": \"Configuração de renderer.progress.*\",\n \"rules\": [\n \"valueExpr deve retornar 0-100.\",\n \"showLabel controla exibição do valor.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"progress\\\", progress: { valueExpr: \\\"progress\\\", showLabel: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ progress: { valueExpr: \\\"progress/100\\\" } } sem garantir 0-100\"\n ]\n },\n \"renderer-avatar\": {\n \"id\": \"renderer-avatar\",\n \"title\": \"Renderer Avatar\",\n \"description\": \"Configuração de renderer.avatar.*\",\n \"rules\": [\n \"Use srcField para imagem dinâmica.\",\n \"initialsField deriva iniciais automaticamente a partir de um campo textual.\",\n \"initialsExpr é fallback quando não há imagem e deve retornar as iniciais prontas; não use JS arbitrário para split/map/trim.\",\n \"Use backgroundColor e textColor para colorir o círculo do avatar; para variar por linha, aplique esses campos em conditionalRenderers.\",\n \"shape deve ser circle/square/rounded.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"avatar\\\", avatar: { srcField: \\\"avatarUrl\\\", initialsField: \\\"name\\\" } } }\",\n \"{ renderer: { type: \\\"avatar\\\", avatar: { initialsExpr: \\\"initials\\\" } } }\",\n \"{ conditionalRenderers: [{ condition: { \\\">\\\": [{ \\\"var\\\": \\\"salary\\\" }, 30000] }, renderer: { type: \\\"avatar\\\", avatar: { initialsField: \\\"name\\\", backgroundColor: \\\"#D32F2F\\\", textColor: \\\"#FFFFFF\\\" } } }] }\"\n ],\n \"antiPatterns\": [\n \"{ avatar: { initialsExpr: \\\"name\\\" } }\",\n \"{ avatar: { shape: \\\"round\\\" } }\"\n ]\n },\n \"renderer-toggle\": {\n \"id\": \"renderer-toggle\",\n \"title\": \"Renderer Toggle\",\n \"description\": \"Configuração de renderer.toggle.*\",\n \"rules\": [\n \"toggle.action.id é obrigatório para persistir mudança.\",\n \"disabledCondition usa expressao condicional canonica em JSON Logic.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"toggle\\\", toggle: { stateExpr: \\\"active\\\", action: { id: \\\"toggle-active\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ toggle: { stateExpr: \\\"active\\\" } } sem action\"\n ]\n },\n \"renderer-menu\": {\n \"id\": \"renderer-menu\",\n \"title\": \"Renderer Menu\",\n \"description\": \"Configuração de renderer.menu.*\",\n \"rules\": [\n \"itemsExpr deve produzir lista de ações válidas.\",\n \"ariaLabel deve descrever o menu.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"menu\\\", menu: { itemsExpr: \\\"row.menuItems\\\", ariaLabel: \\\"Ações\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ menu: { itemsExpr: \\\"row => row.items\\\" } }\"\n ]\n },\n \"renderer-rating\": {\n \"id\": \"renderer-rating\",\n \"title\": \"Renderer Rating\",\n \"description\": \"Configuração de renderer.rating.*\",\n \"rules\": [\n \"valueExpr deve retornar numero dentro do max.\",\n \"O renderer é somente leitura por padrão; não use readonly no schema funcional.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"rating\\\", rating: { valueExpr: \\\"score\\\", max: 5, ariaLabel: \\\"Nota {value} de {max}\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ rating: { max: 0 } }\"\n ]\n },\n \"renderer-html\": {\n \"id\": \"renderer-html\",\n \"title\": \"Renderer HTML\",\n \"description\": \"Configuração de renderer.html.*\",\n \"rules\": [\n \"template deve usar placeholders [[field]].\",\n \"sanitize deve ser strict ou basic, preferindo strict.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"html\\\", html: { template: \\\"<strong>[[name]]</strong>\\\", sanitize: \\\"strict\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ html: { template: \\\"<script>alert(1)</script>\\\" } }\"\n ]\n },\n \"renderer-compose\": {\n \"id\": \"renderer-compose\",\n \"title\": \"Renderer Compose\",\n \"description\": \"Composição de múltiplos renderers na mesma célula.\",\n \"rules\": [\n \"columns[].renderer.compose.items deve ser uma lista de renderers válidos.\",\n \"Defina layout (direction, gap, align) para evitar overflow.\",\n \"Evite mixar elementos interativos sem espaço suficiente.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"compose\\\", compose: { items: [{ type: \\\"icon\\\", icon: { name: \\\"check\\\" } }, { type: \\\"text\\\", textField: \\\"status\\\" }], layout: { direction: \\\"row\\\", gap: 8 } } } }\"\n ],\n \"antiPatterns\": [\n \"{ renderer: { type: \\\"compose\\\", compose: { items: [] } } }\"\n ]\n },\n \"conditional-json-logic\": {\n \"id\": \"conditional-json-logic\",\n \"title\": \"Expressoes Condicionais\",\n \"description\": \"Sintaxe de condições para conditionalRenderers e filtros de estilo.\",\n \"rules\": [\n \"Use nomes de fields diretamente (ex: status == \\\"Ativo\\\").\",\n \"Operadores suportados: ==, !=, >, <, >=, <=, and, or, not.\",\n \"Funções comuns: contains(field, \\\"texto\\\").\",\n \"Pode referenciar computed.<field> quando existir.\",\n \"NÃO use JavaScript (row., this., Math., ternário, eval).\"\n ],\n \"syntax\": \"{\\\"and\\\":[{\\\"contains\\\":[{\\\"var\\\":\\\"status\\\"},\\\"Ativo\\\"]},{\\\">=\\\":[{\\\"var\\\":\\\"price\\\"},100]}]}\",\n \"examples\": [\n \"{\\\"===\\\":[{\\\"var\\\":\\\"status\\\"},\\\"Ativo\\\"]}\",\n \"contains(name, \\\"Silva\\\")\",\n \"{\\\">\\\":[{\\\"var\\\":\\\"computed.total\\\"},1000]}\"\n ],\n \"antiPatterns\": [\n \"row.status == \\\"Ativo\\\"\",\n \"Math.max(price, 0) > 10\",\n \"status ? \\\"A\\\" : \\\"B\\\"\"\n ]\n },\n \"conditional-renderers\": {\n \"id\": \"conditional-renderers\",\n \"title\": \"Renderers Condicionais\",\n \"description\": \"Configura conditionalRenderers por coluna.\",\n \"rules\": [\n \"condition usa expressao condicional canonica em JSON Logic.\",\n \"renderer interno segue as mesmas regras dos renderers padrão.\",\n \"Para animar apenas uma célula/coluna quando a condição for verdadeira, use columns[].conditionalRenderers[].animation.\",\n \"enabled controla ativacao da regra.\"\n ],\n \"examples\": [\n \"{ conditionalRenderers: [{ condition: { \\\"===\\\": [{ \\\"var\\\": \\\"status\\\" }, \\\"Ativo\\\"] }, renderer: { type: \\\"badge\\\", badge: { text: \\\"Ativo\\\" } } }] }\",\n \"{ conditionalRenderers: [{ condition: { \\\">\\\": [{ \\\"var\\\": \\\"salario\\\" }, 30000] }, animation: { preset: \\\"pulse-soft\\\", trigger: \\\"onAppear\\\", intensity: \\\"subtle\\\", repeat: \\\"once\\\" } }] }\"\n ],\n \"antiPatterns\": [\n \"{ conditionalRenderers: [{ condition: \\\"row.status == \\\"Ativo\\\"\\\" }] }\",\n \"{ conditionalStyles: [{ style: { animation: \\\"pulse 1s infinite\\\" } }] }\"\n ]\n },\n \"conditional-animations\": {\n \"id\": \"conditional-animations\",\n \"title\": \"Animações Condicionais\",\n \"description\": \"Animações condicionais de linha e célula na tabela.\",\n \"rules\": [\n \"Use rowConditionalRenderers[].animation para animar a linha inteira.\",\n \"Use columns[].conditionalRenderers[].animation para animar somente o conteúdo de uma célula/coluna.\",\n \"Prefira preset semântico antes de type bruto: info-soft, success-confirm, warning-attention, critical-alert, audit-review, sync-pending, pulse-soft, fade-soft, sla-warning, sla-breach, risk-elevated, risk-critical, audit-warning ou sync-warning.\",\n \"condition sempre usa JSON Logic; não use JS, row.status ou strings de expressão.\",\n \"appearance.animations.enabled=false desativa animações; appearance.animations.specific.row/cell=false desativa o escopo correspondente.\",\n \"onConditionEnter, onConditionExit e onDataRefresh são aceitos no contrato de autoria e normalizados para gatilho de mudança no runtime.\"\n ],\n \"examples\": [\n \"{ rowConditionalRenderers: [{ id: \\\"salary-high-pulse\\\", condition: { \\\">\\\": [{ \\\"var\\\": \\\"salario\\\" }, 30000] }, animation: { preset: \\\"pulse-soft\\\", trigger: \\\"onAppear\\\", intensity: \\\"subtle\\\", repeat: \\\"once\\\", durationMs: 1200 }, enabled: true }] }\",\n \"{ columns: [{ field: \\\"status\\\", conditionalRenderers: [{ id: \\\"status-critical-alert\\\", condition: { \\\"===\\\": [{ \\\"var\\\": \\\"status\\\" }, \\\"Critico\\\"] }, animation: { preset: \\\"critical-alert\\\", trigger: \\\"onChange\\\", repeat: \\\"loop\\\", intensity: \\\"strong\\\" }, enabled: true }] }] }\"\n ],\n \"antiPatterns\": [\n \"{ rowConditionalStyles: [{ style: { animation: \\\"pulse 1s infinite\\\" } }] }\",\n \"{ rowConditionalRenderers: [{ condition: \\\"row.salario > 30000\\\", animation: { name: \\\"pulse\\\" } }] }\",\n \"{ columns: [{ conditionalStyles: [{ condition: { \\\">\\\": [{ \\\"var\\\": \\\"salario\\\" }, 30000] }, style: { animationName: \\\"pulse\\\" } }] }] }\"\n ]\n },\n \"conditional-styles\": {\n \"id\": \"conditional-styles\",\n \"title\": \"Estilos Condicionais por Coluna\",\n \"description\": \"Configura conditionalStyles.*\",\n \"rules\": [\n \"condition usa expressao condicional canonica em JSON Logic.\",\n \"cssClass define classe e style aplica inline.\",\n \"description deve ser texto curto.\"\n ],\n \"examples\": [\n \"{ conditionalStyles: [{ condition: { \\\"<\\\": [{ \\\"var\\\": \\\"amount\\\" }, 0] }, cssClass: \\\"col-negative\\\" }] }\"\n ],\n \"antiPatterns\": [\n \"{ conditionalStyles: [{ condition: \\\"row.amount < 0\\\" }] }\"\n ]\n },\n \"row-conditional-styles\": {\n \"id\": \"row-conditional-styles\",\n \"title\": \"Estilos Condicionais de Linha\",\n \"description\": \"Configura rowConditionalStyles.*\",\n \"rules\": [\n \"condition usa expressao condicional canonica em JSON Logic.\",\n \"cssClass define classe e style aplica inline.\",\n \"description deve ser texto curto.\"\n ],\n \"examples\": [\n \"{ rowConditionalStyles: [{ condition: { \\\"<\\\": [{ \\\"var\\\": \\\"amount\\\" }, 0] }, cssClass: \\\"row-negative\\\" }] }\"\n ],\n \"antiPatterns\": [\n \"{ rowConditionalStyles: [{ condition: \\\"row.amount < 0\\\" }] }\"\n ]\n },\n \"behavior-pagination\": {\n \"id\": \"behavior-pagination\",\n \"title\": \"Paginação (Behavior)\",\n \"description\": \"Configuração de behavior.pagination.*\",\n \"rules\": [\n \"strategy deve ser client ou server.\",\n \"pageSizeOptions deve incluir pageSize.\",\n \"advanced.maxPageSize limita pageSize customizado.\"\n ],\n \"examples\": [\n \"{ behavior: { pagination: { enabled: true, strategy: \\\"server\\\", pageSize: 25, pageSizeOptions: [10, 25, 50] } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { pagination: { strategy: \\\"server\\\" } } } sem totalItems\"\n ]\n },\n \"behavior-sorting\": {\n \"id\": \"behavior-sorting\",\n \"title\": \"Ordenação (Behavior)\",\n \"description\": \"Configuração de behavior.sorting.*\",\n \"rules\": [\n \"defaultSort pode ser objeto unico ou lista.\",\n \"multiSort true permite multiplos campos.\",\n \"allowClearSort habilita terceiro clique.\"\n ],\n \"examples\": [\n \"{ behavior: { sorting: { enabled: true, strategy: \\\"client\\\", defaultSort: { column: \\\"createdAt\\\", direction: \\\"desc\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { sorting: { defaultSort: { column: \\\"\\\", direction: \\\"asc\\\" } } } }\"\n ]\n },\n \"behavior-filtering\": {\n \"id\": \"behavior-filtering\",\n \"title\": \"Filtros (Behavior)\",\n \"description\": \"Configuração de behavior.filtering.*\",\n \"rules\": [\n \"columnFilters.position deve ser header/subheader/sidebar.\",\n \"advancedFilters.settings controla o painel avançado.\",\n \"strategy deve refletir suporte do backend.\"\n ],\n \"examples\": [\n \"{ behavior: { filtering: { enabled: true, columnFilters: { enabled: true, position: \\\"header\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { filtering: { enabled: true } } } sem strategy\"\n ]\n },\n \"behavior-selection\": {\n \"id\": \"behavior-selection\",\n \"title\": \"Selecao (Behavior)\",\n \"description\": \"Configuração de behavior.selection.*\",\n \"rules\": [\n \"type define single/multiple e mode define checkbox/row/both.\",\n \"persistSelection mantem selecao entre paginas.\",\n \"visual.highlightSelected define destaque da linha.\"\n ],\n \"examples\": [\n \"{ behavior: { selection: { enabled: true, type: \\\"multiple\\\", mode: \\\"checkbox\\\", persistSelection: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { selection: { type: \\\"multi\\\" } } }\"\n ]\n },\n \"behavior-interaction\": {\n \"id\": \"behavior-interaction\",\n \"title\": \"Interacao (Behavior)\",\n \"description\": \"Configuração de behavior.interaction.*\",\n \"rules\": [\n \"rowClick/rowDoubleClick.action devem ser ids conhecidos.\",\n \"customAction deve referenciar handler registrado.\",\n \"keyboard.customShortcuts mapeia teclas para ações.\"\n ],\n \"examples\": [\n \"{ behavior: { interaction: { rowClick: { enabled: true, action: \\\"view\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { interaction: { rowClick: { customAction: \\\"row => fn(row)\\\" } } } }\"\n ]\n },\n \"behavior-loading\": {\n \"id\": \"behavior-loading\",\n \"title\": \"Loading (Behavior)\",\n \"description\": \"Configuração de behavior.loading.*\",\n \"rules\": [\n \"type deve ser spinner/skeleton/progress/custom.\",\n \"delay evita flicker.\",\n \"skeleton.rows deve ser numero positivo.\"\n ],\n \"examples\": [\n \"{ behavior: { loading: { type: \\\"skeleton\\\", position: \\\"replace\\\", delay: 200, skeleton: { rows: 6, animated: true } } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { loading: { delay: 0 } } }\"\n ]\n },\n \"behavior-empty-state\": {\n \"id\": \"behavior-empty-state\",\n \"title\": \"Estado Vazio (Behavior)\",\n \"description\": \"Configuração de behavior.emptyState.*\",\n \"rules\": [\n \"message deve ser texto curto.\",\n \"actions[].action deve ser string de acao.\",\n \"contexts permite variações por cenário.\"\n ],\n \"examples\": [\n \"{ behavior: { emptyState: { message: \\\"Sem dados\\\", actions: [{ label: \\\"Adicionar\\\", action: \\\"create\\\" }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { emptyState: { message: \\\"\\\" } } }\"\n ]\n },\n \"behavior-virtualization\": {\n \"id\": \"behavior-virtualization\",\n \"title\": \"Virtualizacao (Behavior)\",\n \"description\": \"Configuração de behavior.virtualization.*\",\n \"rules\": [\n \"itemHeight deve ser informado quando enabled.\",\n \"strategy deve ser fixed ou dynamic.\"\n ],\n \"examples\": [\n \"{ behavior: { virtualization: { enabled: true, itemHeight: 48, strategy: \\\"fixed\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { virtualization: { enabled: true } } }\"\n ]\n },\n \"behavior-resizing\": {\n \"id\": \"behavior-resizing\",\n \"title\": \"Resize (Behavior)\",\n \"description\": \"Configuração de behavior.resizing.*\",\n \"rules\": [\n \"minColumnWidth deve ser positivo.\",\n \"persistWidths salva ajustes do usuario.\"\n ],\n \"examples\": [\n \"{ behavior: { resizing: { enabled: true, minColumnWidth: 80, autoFit: false, persistWidths: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { resizing: { minColumnWidth: 0 } } }\"\n ]\n },\n \"behavior-dragging\": {\n \"id\": \"behavior-dragging\",\n \"title\": \"Drag & Drop (Behavior)\",\n \"description\": \"Configuração de behavior.dragging.*\",\n \"rules\": [\n \"columns/rows controla reordenacao.\",\n \"columnDropZones deve listar zonas validas.\"\n ],\n \"examples\": [\n \"{ behavior: { dragging: { columns: true, rows: false, showDragIndicator: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { dragging: { columns: \\\"yes\\\" } } }\"\n ]\n },\n \"behavior-expansion\": {\n \"id\": \"behavior-expansion\",\n \"title\": \"Expansion (Behavior)\",\n \"description\": \"Configuração de behavior.expansion.* para detail rows schema-driven.\",\n \"rules\": [\n \"detail é sempre schema-driven; varie source.mode (inline/resource/resourcePath), não detail.type.\",\n \"detail.schemaContract.kind/version deve ser informado para validação e migração.\",\n \"Em virtualização, prefira detail.height.mode=fixed com virtualization.policy=fixed-height-only.\",\n \"Use eventExposureDefault hashed/redacted por padrão em ambiente corporativo.\"\n ],\n \"examples\": [\n \"{ behavior: { expansion: { enabled: true, state: { mode: \\\"controlled\\\" }, detail: { schemaContract: { kind: \\\"praxis.detail.schema\\\", version: \\\"1.0.0\\\" }, source: { mode: \\\"resource\\\", resource: { kind: \\\"ui-composition\\\", id: \\\"customer-detail-v2\\\", version: \\\"2.1.0\\\" } }, rendering: { strategy: \\\"registry\\\", registryId: \\\"praxis.detail.default\\\" } } } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { expansion: { detail: { type: \\\"template\\\", templateId: \\\"legacy-id\\\" } } } }\"\n ]\n },\n \"appearance\": {\n \"id\": \"appearance\",\n \"title\": \"Aparência e Layout\",\n \"description\": \"Densidade, bordas, cores, tipografia, espaçamento e responsividade.\",\n \"rules\": [\n \"appearance.density deve usar valores compact/comfortable/spacious.\",\n \"Cores devem usar tokens do tema ou hex válido.\",\n \"responsive.mobile.cardMode deve ser combinado com colunas prioritárias.\",\n \"Se animations.enabled for true, respeite reduceMotion.\",\n \"appearance.animations.specific.row e appearance.animations.specific.cell controlam animações condicionais por escopo.\"\n ],\n \"examples\": [\n \"{ appearance: { density: \\\"compact\\\", borders: { showRowBorders: true } } }\",\n \"{ appearance: { typography: { fontSize: \\\"14px\\\" }, spacing: { cellPadding: \\\"8px 16px\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ appearance: { density: \\\"tiny\\\" } }\"\n ]\n },\n \"appearance-details\": {\n \"id\": \"appearance-details\",\n \"title\": \"Detalhes de Aparência\",\n \"description\": \"Bordas, cores, tipografia, spacing, elevation e responsive autoAdjust.\",\n \"rules\": [\n \"borders.style deve ser solid/dashed/dotted quando aplicável.\",\n \"typography.headerFontWeight deve ser string numerica ou token.\",\n \"responsive.autoAdjust controla ajustes automáticos em telas menores.\"\n ],\n \"examples\": [\n \"{ appearance: { borders: { showOuterBorder: true, style: \\\"solid\\\" }, colors: { alternateRowBackground: \\\"#f7f9fc\\\" } } }\",\n \"{ appearance: { responsive: { mobile: { cardMode: true, priorityColumns: [\\\"name\\\", \\\"status\\\"] } } } }\"\n ],\n \"antiPatterns\": [\n \"{ appearance: { borders: { style: \\\"double\\\" } } }\"\n ]\n },\n \"toolbar\": {\n \"id\": \"toolbar\",\n \"title\": \"Toolbar\",\n \"description\": \"Configurações gerais da toolbar.\",\n \"rules\": [\n \"toolbar.visible controla exibição global da barra.\",\n \"Use toolbar.layout.alignment para ajustar distribuição.\",\n \"toolbar.filters.enabled depende de filtering.enabled.\",\n \"settingsMenu.enabled expõe opções de densidade e colunas.\"\n ],\n \"examples\": [\n \"{ toolbar: { visible: true, position: \\\"top\\\", title: \\\"Pedidos\\\" } }\"\n ],\n \"antiPatterns\": [\n \"{ toolbar: { position: \\\"left\\\" } }\"\n ]\n },\n \"toolbar-layout\": {\n \"id\": \"toolbar-layout\",\n \"title\": \"Layout da Toolbar\",\n \"description\": \"Configuração de toolbar.layout.*\",\n \"rules\": [\n \"alignment deve ser start/center/end/space-between.\",\n \"height e padding devem ser coerentes com o tema.\"\n ],\n \"examples\": [\n \"{ toolbar: { layout: { alignment: \\\"space-between\\\", height: 56, showSeparator: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ toolbar: { layout: { alignment: \\\"between\\\" } } }\"\n ]\n },\n \"toolbar-actions\": {\n \"id\": \"toolbar-actions\",\n \"title\": \"Ações da Toolbar\",\n \"description\": \"Definições de toolbar.actions[].\",\n \"rules\": [\n \"toolbar.actions[].id deve ser único.\",\n \"action deve ser string, não função JS.\",\n \"type deve ser button/icon/fab/menu.\",\n \"visibleWhen usa expressao condicional canonica em JSON Logic.\"\n ],\n \"examples\": [\n \"{ toolbar: { actions: [{ id: \\\"add\\\", label: \\\"Adicionar\\\", type: \\\"button\\\", action: \\\"create\\\", position: \\\"end\\\" }] } }\",\n \"{ toolbar: { actions: [{ id: \\\"more\\\", label: \\\"Mais\\\", type: \\\"menu\\\", action: \\\"noop\\\", children: [{ id: \\\"export\\\", label: \\\"Exportar\\\", type: \\\"button\\\", action: \\\"export\\\" }] }] } }\"\n ],\n \"antiPatterns\": [\n \"{ actions: [{ action: \\\"() => doSomething()\\\" }] }\"\n ]\n },\n \"toolbar-filters\": {\n \"id\": \"toolbar-filters\",\n \"title\": \"Filtros da Toolbar\",\n \"description\": \"Configuração de toolbar.filters.* e quickFilters.\",\n \"rules\": [\n \"quickFilters[].filter deve seguir a estrutura do filtro suportado.\",\n \"enabled depende de behavior.filtering.enabled.\"\n ],\n \"examples\": [\n \"{ toolbar: { filters: { enabled: true, quickFilters: [{ id: \\\"active\\\", label: \\\"Ativos\\\", filter: { status: \\\"active\\\" } }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ toolbar: { filters: { quickFilters: [{ filter: \\\"status=active\\\" }] } } }\"\n ]\n },\n \"toolbar-settings\": {\n \"id\": \"toolbar-settings\",\n \"title\": \"Menu de Configuracoes\",\n \"description\": \"Configuração de toolbar.settingsMenu.*\",\n \"rules\": [\n \"settingsMenu.options[].type deve ser toggle/select/action.\",\n \"options deve listar valores validos quando type for select.\"\n ],\n \"examples\": [\n \"{ toolbar: { settingsMenu: { enabled: true, options: [{ id: \\\"density\\\", label: \\\"Densidade\\\", type: \\\"select\\\", options: [\\\"compact\\\", \\\"comfortable\\\", \\\"spacious\\\"] }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ settingsMenu: { options: [{ type: \\\"dropdown\\\" }] } }\"\n ]\n },\n \"row-actions\": {\n \"id\": \"row-actions\",\n \"title\": \"Acoes por Linha\",\n \"description\": \"Configuração de actions.row.*\",\n \"rules\": [\n \"enabled deve estar true para mostrar coluna de ações.\",\n \"display deve ser menu/buttons/icons.\",\n \"trigger deve ser hover/always/click.\",\n \"actions[].action deve ser string.\"\n ],\n \"examples\": [\n \"{ actions: { row: { enabled: true, display: \\\"menu\\\", trigger: \\\"hover\\\", actions: [{ id: \\\"edit\\\", label: \\\"Editar\\\", action: \\\"edit\\\" }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ actions: { row: { display: \\\"dropdown\\\" } } }\"\n ]\n },\n \"row-actions-advanced\": {\n \"id\": \"row-actions-advanced\",\n \"title\": \"Acoes por Linha Avancadas\",\n \"description\": \"Header, overflow, menu e comportamento avançado.\",\n \"rules\": [\n \"header.align deve ser start/center/end.\",\n \"behavior.maxInline deve ser numero ou objeto de breakpoints.\",\n \"menuIcon e menuButtonColor devem ser valores suportados.\",\n \"discovery.enabled=false mantem apenas as actions configuradas e bloqueia a descoberta contextual por HATEOAS/capabilities.\"\n ],\n \"examples\": [\n \"{ actions: { row: { header: { label: \\\"Ações\\\", align: \\\"end\\\" }, maxVisibleActions: 3, behavior: { enabled: true, maxInline: 2 } } } }\",\n \"{ actions: { row: { enabled: true, display: \\\"buttons\\\", discovery: { enabled: false }, actions: [{ id: \\\"briefing\\\", label: \\\"Briefing\\\", action: \\\"inspect-surfaces\\\" }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ row: { header: { align: \\\"middle\\\" } } }\"\n ]\n },\n \"bulk-actions\": {\n \"id\": \"bulk-actions\",\n \"title\": \"Acoes em Lote\",\n \"description\": \"Configuração de actions.bulk.*\",\n \"rules\": [\n \"bulk.enabled exige selection.enabled.\",\n \"floating.position deve ser bottom-right/bottom-left/top-right/top-left.\",\n \"hideWhenEmpty evita botão flutuante quando nada selecionado.\"\n ],\n \"examples\": [\n \"{ actions: { bulk: { enabled: true, position: \\\"toolbar\\\", actions: [{ id: \\\"delete\\\", label: \\\"Excluir\\\", action: \\\"bulk-delete\\\", requiresConfirmation: true }], floating: { position: \\\"bottom-right\\\", hideWhenEmpty: true } } } }\"\n ],\n \"antiPatterns\": [\n \"{ actions: { bulk: { enabled: true } } } sem selection.enabled\"\n ]\n },\n \"context-actions\": {\n \"id\": \"context-actions\",\n \"title\": \"Menu de Contexto\",\n \"description\": \"Configuração de actions.context.*\",\n \"rules\": [\n \"trigger deve ser right-click/long-press/both.\",\n \"actions[].action deve ser string.\"\n ],\n \"examples\": [\n \"{ actions: { context: { enabled: true, trigger: \\\"right-click\\\", actions: [{ id: \\\"copy\\\", label: \\\"Copiar\\\", action: \\\"copy\\\" }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ context: { trigger: \\\"click\\\" } }\"\n ]\n },\n \"actions-confirmations\": {\n \"id\": \"actions-confirmations\",\n \"title\": \"Confirmacoes de Acoes\",\n \"description\": \"Configuração de actions.confirmations.*\",\n \"rules\": [\n \"default deve conter title, message, confirmText e cancelText.\",\n \"specific usa actionId como chave.\"\n ],\n \"examples\": [\n \"{ actions: { confirmations: { default: { title: \\\"Confirmar\\\", message: \\\"Deseja continuar?\\\", confirmText: \\\"Sim\\\", cancelText: \\\"Nao\\\" }, specific: { \\\"delete\\\": { message: \\\"Excluir item?\\\" } } } } }\"\n ],\n \"antiPatterns\": [\n \"{ actions: { confirmations: { default: { title: \\\"\\\" } } } }\"\n ]\n },\n \"export-general\": {\n \"id\": \"export-general\",\n \"title\": \"Exportacao Geral\",\n \"description\": \"Configuração de export.general.*\",\n \"rules\": [\n \"includeHeaders deve ser boolean.\",\n \"scope deve ser auto, selected, filtered, currentPage ou all.\",\n \"maxRows deve limitar volume.\",\n \"includeColumns deve ser all/visible ou lista de fields.\"\n ],\n \"examples\": [\n \"{ export: { enabled: true, formats: [\\\"csv\\\"], general: { includeHeaders: true, scope: \\\"auto\\\", maxRows: 5000, includeColumns: \\\"visible\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ export: { general: { maxRows: 0 } } }\"\n ]\n },\n \"export-excel\": {\n \"id\": \"export-excel\",\n \"title\": \"Exportacao Excel\",\n \"description\": \"Configuração de export.excel.*\",\n \"rules\": [\n \"sheetName deve ser curto e sem caracteres invalidos.\",\n \"autoFitColumns melhora legibilidade.\",\n \"styling.headerStyle e cellStyle devem ser simples.\"\n ],\n \"examples\": [\n \"{ export: { excel: { sheetName: \\\"Dados\\\", autoFitColumns: true, freezeHeaders: true, styling: { headerStyle: { fontWeight: \\\"bold\\\" } } } } }\"\n ],\n \"antiPatterns\": [\n \"{ excel: { sheetName: \\\"\\\" } }\"\n ]\n },\n \"export-pdf\": {\n \"id\": \"export-pdf\",\n \"title\": \"Exportacao PDF\",\n \"description\": \"Configuração de export.pdf.*\",\n \"rules\": [\n \"orientation deve ser portrait/landscape.\",\n \"pageSize deve ser A4/A3/Letter/Legal.\",\n \"margins devem conter top/right/bottom/left.\"\n ],\n \"examples\": [\n \"{ export: { pdf: { orientation: \\\"landscape\\\", pageSize: \\\"A4\\\", margins: { top: 10, right: 10, bottom: 10, left: 10 }, autoPageBreak: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ pdf: { pageSize: \\\"A5\\\" } }\"\n ]\n },\n \"export-csv\": {\n \"id\": \"export-csv\",\n \"title\": \"Exportacao CSV\",\n \"description\": \"Configuração de export.csv.*\",\n \"rules\": [\n \"delimiter deve ser \\\",\\\", \\\";\\\", \\\"|\\\" ou \\\"\\\\t\\\".\",\n \"encoding deve ser utf-8/utf-16/iso-8859-1.\",\n \"escapeChar deve ser um caractere.\"\n ],\n \"examples\": [\n \"{ export: { csv: { delimiter: \\\";\\\", encoding: \\\"utf-8\\\", escapeChar: \\\"\\\\\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ csv: { delimiter: \\\":\\\" } }\"\n ]\n },\n \"export-json\": {\n \"id\": \"export-json\",\n \"title\": \"Exportacao JSON\",\n \"description\": \"Configuração de export.json.*\",\n \"rules\": [\n \"format deve ser pretty ou compact.\",\n \"structure deve ser array ou object.\"\n ],\n \"examples\": [\n \"{ export: { json: { format: \\\"pretty\\\", includeMetadata: true, structure: \\\"array\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ json: { format: \\\"full\\\" } }\"\n ]\n },\n \"export-templates\": {\n \"id\": \"export-templates\",\n \"title\": \"Templates de Exportacao\",\n \"description\": \"Configuração de export.templates[]\",\n \"rules\": [\n \"templates devem ter id, name e format válidos.\",\n \"config deve seguir o formato correspondente.\"\n ],\n \"examples\": [\n \"{ export: { templates: [{ id: \\\"resumo\\\", name: \\\"Resumo\\\", format: \\\"pdf\\\", config: {}, isDefault: false }] } }\"\n ],\n \"antiPatterns\": [\n \"{ templates: [{ id: \\\"\\\", format: \\\"xls\\\" }] }\"\n ]\n },\n \"messages\": {\n \"id\": \"messages\",\n \"title\": \"Mensagens\",\n \"description\": \"Mensagens de estados, ações, validação e exportação.\",\n \"rules\": [\n \"Mensagens devem ser curtas e claras.\",\n \"Não defina funções inline (use templates ou strings simples).\"\n ],\n \"examples\": [\n \"{ messages: { states: { empty: \\\"Sem registros.\\\" }, actions: { confirmations: { delete: \\\"Excluir?\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ messages: { states: { loadingWithCount: \\\"(n) => ...\\\" } } }\"\n ]\n },\n \"messages-advanced\": {\n \"id\": \"messages-advanced\",\n \"title\": \"Mensagens Avancadas\",\n \"description\": \"custom, templates e formatos por tipo.\",\n \"rules\": [\n \"templates[].template deve usar placeholders simples.\",\n \"custom é um mapa chave -> mensagem.\",\n \"formats deve seguir excel/pdf/csv/json.\"\n ],\n \"examples\": [\n \"{ messages: { export: { formats: { excel: \\\"Excel pronto\\\" } }, templates: [{ id: \\\"t1\\\", template: \\\"Exportado {count} itens\\\" }] } }\"\n ],\n \"antiPatterns\": [\n \"{ messages: { templates: [{ id: \\\"t1\\\" }] } }\"\n ]\n },\n \"localization-date-time\": {\n \"id\": \"localization-date-time\",\n \"title\": \"Localizacao de Datas\",\n \"description\": \"Configuração de localization.dateTime.*\",\n \"rules\": [\n \"dateFormat/timeFormat devem seguir DatePipe.\",\n \"firstDayOfWeek deve ser 0-6.\",\n \"monthNames e dayNames devem ter 12 e 7 entradas.\"\n ],\n \"examples\": [\n \"{ localization: { dateTime: { dateFormat: \\\"dd/MM/yyyy\\\", timeFormat: \\\"HH:mm\\\", firstDayOfWeek: 0 } } }\"\n ],\n \"antiPatterns\": [\n \"{ localization: { dateTime: { firstDayOfWeek: 7 } } }\"\n ]\n },\n \"localization-number-currency\": {\n \"id\": \"localization-number-currency\",\n \"title\": \"Localizacao de Numeros e Moeda\",\n \"description\": \"Configuração de localization.number.* e localization.currency.*\",\n \"rules\": [\n \"decimalSeparator e thousandsSeparator devem ser 1 caractere.\",\n \"negativeSignPosition deve ser before/after.\",\n \"currency.code deve ser ISO 4217.\"\n ],\n \"examples\": [\n \"{ localization: { number: { decimalSeparator: \\\",\\\", thousandsSeparator: \\\".\\\", negativeSign: \\\"-\\\", negativeSignPosition: \\\"before\\\" }, currency: { code: \\\"BRL\\\", symbol: \\\"R$\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ localization: { currency: { code: \\\"REAL\\\" } } }\"\n ]\n },\n \"localization-formatting\": {\n \"id\": \"localization-formatting\",\n \"title\": \"Formatos Locais\",\n \"description\": \"Configuração de localization.formatting.*\",\n \"rules\": [\n \"percentageFormat e fileSizeFormat devem seguir padrao esperado.\",\n \"units deve mapear tipo -> unidade -> label.\"\n ],\n \"examples\": [\n \"{ localization: { formatting: { percentageFormat: \\\"#0.00%\\\", fileSizeFormat: \\\"decimal\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ localization: { formatting: { percentageFormat: \\\"percent\\\" } } }\"\n ]\n },\n \"localization-translations\": {\n \"id\": \"localization-translations\",\n \"title\": \"Traducoes\",\n \"description\": \"Configuração de localization.availableLocales e translations.*\",\n \"rules\": [\n \"availableLocales deve listar locales conhecidos.\",\n \"translations deve mapear locale -> chaves de texto.\"\n ],\n \"examples\": [\n \"{ localization: { availableLocales: [\\\"pt-BR\\\", \\\"en-US\\\"], translations: { \\\"pt-BR\\\": { \\\"table.title\\\": \\\"Pedidos\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ translations: \\\"pt-BR\\\" }\"\n ]\n },\n \"data-cache\": {\n \"id\": \"data-cache\",\n \"title\": \"Cache de Dados\",\n \"description\": \"Configuração de data.cache.*\",\n \"rules\": [\n \"ttl e maxSize devem ser positivos.\",\n \"invalidationStrategy deve ser ttl/manual/on-update.\"\n ],\n \"examples\": [\n \"{ data: { cache: { enabled: true, ttl: 600000, maxSize: 1000, invalidationStrategy: \\\"ttl\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ cache: { ttl: 0 } }\"\n ]\n },\n \"data-sync\": {\n \"id\": \"data-sync\",\n \"title\": \"Sincronizacao\",\n \"description\": \"Configuração de data.sync.*\",\n \"rules\": [\n \"interval deve ser em ms.\",\n \"deltaSync e autoSync devem ser boolean.\",\n \"conflictResolution deve ser client/server/manual.\"\n ],\n \"examples\": [\n \"{ data: { sync: { autoSync: true, interval: 30000, deltaSync: true, conflictResolution: \\\"server\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ sync: { interval: -1 } }\"\n ]\n },\n \"data-validation\": {\n \"id\": \"data-validation\",\n \"title\": \"Validacao de Dados\",\n \"description\": \"Configuração de data.validation.* e rules[]\",\n \"rules\": [\n \"rules[].type deve ser required/format/range/custom.\",\n \"params deve conter dados compatíveis com o tipo.\",\n \"showInlineErrors deve ser boolean.\"\n ],\n \"examples\": [\n \"{ data: { validation: { clientSide: true, serverSide: false, showInlineErrors: true, rules: [{ field: \\\"email\\\", type: \\\"format\\\", params: { format: \\\"email\\\" }, message: \\\"Email invalido\\\" }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ validation: { rules: [{ type: \\\"regex\\\" }] } }\"\n ]\n },\n \"data-transformations\": {\n \"id\": \"data-transformations\",\n \"title\": \"Transformacoes de Dados\",\n \"description\": \"Configuração de data.transformations[]\",\n \"rules\": [\n \"transform deve ser uma string suportada pelo sistema, não funcao JS.\",\n \"applyTo deve ser display/data/both.\"\n ],\n \"examples\": [\n \"{ data: { transformations: [{ id: \\\"t1\\\", field: \\\"amount\\\", type: \\\"format\\\", transform: \\\"currency\\\", applyTo: \\\"display\\\" }] } }\"\n ],\n \"antiPatterns\": [\n \"{ transformations: [{ transform: \\\"row => row.amount\\\" }] }\"\n ]\n },\n \"data-polling\": {\n \"id\": \"data-polling\",\n \"title\": \"Polling\",\n \"description\": \"Configuração de data.polling.*\",\n \"rules\": [\n \"interval deve ser em ms e razoavel.\",\n \"exponentialBackoff deve ser boolean.\"\n ],\n \"examples\": [\n \"{ data: { polling: { enabled: true, interval: 30000, onlyWhenActive: true, exponentialBackoff: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ polling: { interval: 100 } }\"\n ]\n },\n \"performance-virtualization\": {\n \"id\": \"performance-virtualization\",\n \"title\": \"Performance Virtualization\",\n \"description\": \"Configuração de performance.virtualization.*\",\n \"rules\": [\n \"itemHeight deve ser informado quando enabled.\",\n \"strategy deve ser fixed/dynamic.\"\n ],\n \"examples\": [\n \"{ performance: { virtualization: { enabled: true, itemHeight: 48 } } }\"\n ],\n \"antiPatterns\": [\n \"{ performance: { virtualization: { enabled: true } } }\"\n ]\n },\n \"performance-debounce\": {\n \"id\": \"performance-debounce\",\n \"title\": \"Performance Debounce\",\n \"description\": \"Configuração de performance.debounce.*\",\n \"rules\": [\n \"valores devem estar em ms (ex.: 200-500).\"\n ],\n \"examples\": [\n \"{ performance: { debounce: { search: 300, filter: 300, resize: 200, scroll: 200 } } }\"\n ],\n \"antiPatterns\": [\n \"{ debounce: { search: -1 } }\"\n ]\n },\n \"performance-memory\": {\n \"id\": \"performance-memory\",\n \"title\": \"Performance Memory\",\n \"description\": \"Configuração de performance.memory.*\",\n \"rules\": [\n \"maxRows deve limitar o volume em memoria.\",\n \"cleanupInterval deve ser em ms.\"\n ],\n \"examples\": [\n \"{ performance: { memory: { maxRows: 5000, autoCleanup: true, cleanupInterval: 60000 } } }\"\n ],\n \"antiPatterns\": [\n \"{ memory: { maxRows: 0 } }\"\n ]\n },\n \"performance-rendering\": {\n \"id\": \"performance-rendering\",\n \"title\": \"Performance Rendering\",\n \"description\": \"Configuração de performance.rendering.*\",\n \"rules\": [\n \"batchUpdates true requer batchSize coerente.\",\n \"optimizeReRenders melhora atualizações frequentes.\"\n ],\n \"examples\": [\n \"{ performance: { rendering: { useRAF: true, batchUpdates: true, batchSize: 50, optimizeReRenders: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ rendering: { batchSize: 0 } }\"\n ]\n },\n \"performance-lazy-loading\": {\n \"id\": \"performance-lazy-loading\",\n \"title\": \"Performance Lazy Loading\",\n \"description\": \"Configuração de performance.lazyLoading.*\",\n \"rules\": [\n \"threshold deve ser numero positivo.\",\n \"components e images devem ser boolean.\"\n ],\n \"examples\": [\n \"{ performance: { lazyLoading: { images: true, components: true, threshold: 200 } } }\"\n ],\n \"antiPatterns\": [\n \"{ lazyLoading: { threshold: -1 } }\"\n ]\n },\n \"accessibility-core\": {\n \"id\": \"accessibility-core\",\n \"title\": \"Acessibilidade\",\n \"description\": \"Configuração base de accessibility.*\",\n \"rules\": [\n \"enabled deve ser true em apps com requisitos a11y.\",\n \"reduceMotion deve desativar animacoes nao essenciais.\"\n ],\n \"examples\": [\n \"{ accessibility: { enabled: true, reduceMotion: true } }\"\n ],\n \"antiPatterns\": [\n \"{ accessibility: { enabled: true, reduceMotion: \\\"yes\\\" } }\"\n ]\n },\n \"accessibility-announcements\": {\n \"id\": \"accessibility-announcements\",\n \"title\": \"Acessibilidade Anuncios\",\n \"description\": \"Configuração de accessibility.announcements.*\",\n \"rules\": [\n \"dataChanges, userActions e loadingStates devem ser boolean.\",\n \"liveRegion deve ser polite ou assertive.\"\n ],\n \"examples\": [\n \"{ accessibility: { announcements: { dataChanges: true, userActions: true, loadingStates: true, liveRegion: \\\"polite\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ announcements: { liveRegion: \\\"loud\\\" } }\"\n ]\n },\n \"accessibility-keyboard\": {\n \"id\": \"accessibility-keyboard\",\n \"title\": \"Acessibilidade Teclado\",\n \"description\": \"Configuração de accessibility.keyboard.*\",\n \"rules\": [\n \"tabNavigation e arrowNavigation devem ser boolean.\",\n \"shortcuts e skipLinks devem ser boolean.\",\n \"focusTrap deve ser boolean.\"\n ],\n \"examples\": [\n \"{ accessibility: { keyboard: { tabNavigation: true, arrowNavigation: true, shortcuts: true, skipLinks: true, focusTrap: false } } }\"\n ],\n \"antiPatterns\": [\n \"{ keyboard: { tabNavigation: \\\"yes\\\" } }\"\n ]\n },\n \"accessibility-aria-labels\": {\n \"id\": \"accessibility-aria-labels\",\n \"title\": \"Acessibilidade ARIA\",\n \"description\": \"Configuração de accessibility.ariaLabels.*\",\n \"rules\": [\n \"ariaLabels deve mapear chaves conhecidas para textos curtos.\"\n ],\n \"examples\": [\n \"{ accessibility: { ariaLabels: { table: \\\"Tabela de pedidos\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ ariaLabels: { table: \\\"\\\" } }\"\n ]\n },\n \"theme-core\": {\n \"id\": \"theme-core\",\n \"title\": \"Tema Base\",\n \"description\": \"Configuração de theme.primary/secondary/darkMode.\",\n \"rules\": [\n \"primary e secondary devem ser cores validas (hex ou token).\",\n \"darkMode deve ser boolean.\"\n ],\n \"examples\": [\n \"{ theme: { primary: \\\"#1976d2\\\", secondary: \\\"#ff9800\\\" } }\"\n ],\n \"antiPatterns\": [\n \"{ theme: { primary: \\\"blue\\\" } }\"\n ]\n },\n \"theme-custom\": {\n \"id\": \"theme-custom\",\n \"title\": \"Tema Customizado\",\n \"description\": \"Configuração de theme.custom e theme.cssVariables.\",\n \"rules\": [\n \"cssVariables deve usar nomes CSS validos (ex.: --table-bg).\",\n \"custom deve ser mapa simples de tokens.\"\n ],\n \"examples\": [\n \"{ theme: { custom: { headerBg: \\\"var(--md-sys-color-surface-container)\\\" }, cssVariables: { \\\"--table-bg\\\": \\\"var(--md-sys-color-surface)\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ theme: { cssVariables: { \\\"table-bg\\\": \\\"var(--md-sys-color-surface)\\\" } } }\"\n ]\n },\n \"plugins\": {\n \"id\": \"plugins\",\n \"title\": \"Plugins\",\n \"description\": \"Configuração de plugins[].\",\n \"rules\": [\n \"plugins[].id, name e version sao obrigatorios.\",\n \"hooks deve mapear eventos para handlers conhecidos.\"\n ],\n \"examples\": [\n \"{ plugins: [{ id: \\\"audit\\\", name: \\\"Audit Logger\\\", version: \\\"1.2.0\\\", enabled: true }] }\"\n ],\n \"antiPatterns\": [\n \"{ plugins: [{ name: \\\"Audit\\\" }] }\"\n ]\n },\n \"editor-extras\": {\n \"id\": \"editor-extras\",\n \"title\": \"Extras do Editor\",\n \"description\": \"Envelope de autoria usado pelo editor e pelo playground.\",\n \"rules\": [\n \"bindings.resourcePath deve ser path valido da API quando presente.\",\n \"config.meta.idField deve refletir a chave primaria quando configurado.\",\n \"bindings.horizontalScroll deve ser auto/wrap/none.\"\n ],\n \"examples\": [\n \"{ kind: \\\"praxis.table.editor\\\", version: 1, config: { meta: { idField: \\\"employeeId\\\" }, columns: [] }, bindings: { resourcePath: \\\"/api/employees\\\", horizontalScroll: \\\"auto\\\" } }\"\n ],\n \"antiPatterns\": [\n \"{ kind: \\\"praxis.table.editor\\\", version: 1, config: { columns: [] }, bindings: { horizontalScroll: \\\"left\\\" } }\"\n ]\n }\n }\n}",
21596
+ "content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"optionsByPath\": {\n \"appearance.density\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"comfortable\",\n \"label\": \"Comfortable\"\n },\n {\n \"value\": \"spacious\",\n \"label\": \"Spacious\"\n }\n ]\n },\n \"export.formats\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"excel\",\n \"label\": \"Excel\"\n },\n {\n \"value\": \"pdf\",\n \"label\": \"PDF\"\n },\n {\n \"value\": \"csv\",\n \"label\": \"CSV\"\n },\n {\n \"value\": \"json\",\n \"label\": \"JSON\"\n },\n {\n \"value\": \"print\",\n \"label\": \"Print\"\n }\n ]\n },\n \"columns[].type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"string\",\n \"label\": \"String\"\n },\n {\n \"value\": \"number\",\n \"label\": \"Number\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"percentage\",\n \"label\": \"Percentage\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date\"\n },\n {\n \"value\": \"boolean\",\n \"label\": \"Boolean\"\n },\n {\n \"value\": \"custom\",\n \"label\": \"Custom\"\n }\n ]\n },\n \"columns[].format\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"shortDate\",\n \"label\": \"Date short\",\n \"example\": \"01/12/2023\"\n },\n {\n \"value\": \"mediumDate\",\n \"label\": \"Date medium\",\n \"example\": \"01 Dec 2023\"\n },\n {\n \"value\": \"longDate\",\n \"label\": \"Date long\",\n \"example\": \"01 December 2023\"\n },\n {\n \"value\": \"fullDate\",\n \"label\": \"Date full\",\n \"example\": \"Friday, 01 December 2023\"\n },\n {\n \"value\": \"MMM/yyyy\",\n \"label\": \"Month/Year\",\n \"example\": \"Dec/2023\"\n },\n {\n \"value\": \"shortTime\",\n \"label\": \"Time short\",\n \"example\": \"14:30\"\n },\n {\n \"value\": \"short\",\n \"label\": \"Date+Time short\",\n \"example\": \"01/12/2023 14:30\"\n },\n {\n \"value\": \"yyyy-MM-dd\",\n \"label\": \"ISO 8601\",\n \"example\": \"2023-12-01\"\n },\n {\n \"value\": \"dd/MM/yyyy\",\n \"label\": \"Date dd/MM/yyyy\",\n \"example\": \"01/12/2023\"\n },\n {\n \"value\": \"yyyy-MM-dd HH:mm\",\n \"label\": \"DateTime yyyy-MM-dd HH:mm\",\n \"example\": \"2023-12-01 14:30\"\n },\n {\n \"value\": \"1.0-0\",\n \"label\": \"Number integer\",\n \"example\": \"1,234\"\n },\n {\n \"value\": \"1.1-1\",\n \"label\": \"Number 1 decimal\",\n \"example\": \"1,234.5\"\n },\n {\n \"value\": \"1.2-2\",\n \"label\": \"Number 2 decimals\",\n \"example\": \"1,234.56\"\n },\n {\n \"value\": \"1.0-3\",\n \"label\": \"Number up to 3 decimals\",\n \"example\": \"1,234.567\"\n },\n {\n \"value\": \"1.0-0|nosep\",\n \"label\": \"Number no grouping\",\n \"example\": \"1234\"\n },\n {\n \"value\": \"BRL|symbol|2\",\n \"label\": \"Currency BRL symbol\",\n \"example\": \"R$ 1.234,56\"\n },\n {\n \"value\": \"BRL|symbol|2|nosep\",\n \"label\": \"Currency BRL symbol (no grouping)\",\n \"example\": \"R$ 1234,56\"\n },\n {\n \"value\": \"USD|symbol|2\",\n \"label\": \"Currency USD symbol\",\n \"example\": \"US$ 1,234.56\"\n },\n {\n \"value\": \"EUR|symbol|2\",\n \"label\": \"Currency EUR symbol\",\n \"example\": \"EUR 1,234.56\"\n },\n {\n \"value\": \"BRL|code|2\",\n \"label\": \"Currency code\",\n \"example\": \"1,234.56 BRL\"\n },\n {\n \"value\": \"USD|code|0\",\n \"label\": \"Currency USD code (0 decimals)\",\n \"example\": \"1234 USD\"\n },\n {\n \"value\": \"EUR|symbol|2|nosep\",\n \"label\": \"Currency EUR symbol (no grouping)\",\n \"example\": \"EUR 1234,56\"\n },\n {\n \"value\": \"1.0-0\",\n \"label\": \"Percent 0 decimals\",\n \"example\": \"12%\"\n },\n {\n \"value\": \"1.1-1\",\n \"label\": \"Percent 1 decimal\",\n \"example\": \"12.3%\"\n },\n {\n \"value\": \"1.2-2\",\n \"label\": \"Percent 2 decimals\",\n \"example\": \"12.34%\"\n },\n {\n \"value\": \"1.0-0|x100\",\n \"label\": \"Percent 0 decimals (x100)\",\n \"example\": \"12%\"\n },\n {\n \"value\": \"1.1-1|x100\",\n \"label\": \"Percent 1 decimal (x100)\",\n \"example\": \"12.3%\"\n },\n {\n \"value\": \"1.2-2|x100\",\n \"label\": \"Percent 2 decimals (x100)\",\n \"example\": \"12.34%\"\n },\n {\n \"value\": \"none\",\n \"label\": \"String none\",\n \"example\": \"Sample\"\n },\n {\n \"value\": \"uppercase\",\n \"label\": \"String uppercase\",\n \"example\": \"SAMPLE\"\n },\n {\n \"value\": \"lowercase\",\n \"label\": \"String lowercase\",\n \"example\": \"sample\"\n },\n {\n \"value\": \"titlecase\",\n \"label\": \"String titlecase\",\n \"example\": \"Sample Text\"\n },\n {\n \"value\": \"capitalize\",\n \"label\": \"String capitalize\",\n \"example\": \"Sample\"\n },\n {\n \"value\": \"uppercase|truncate|50|...\",\n \"label\": \"String uppercase + truncate 50\",\n \"example\": \"SAMPLE...\"\n },\n {\n \"value\": \"true-false\",\n \"label\": \"Boolean true/false\",\n \"example\": \"True / False\"\n },\n {\n \"value\": \"yes-no\",\n \"label\": \"Boolean yes/no\",\n \"example\": \"Yes / No\"\n },\n {\n \"value\": \"active-inactive\",\n \"label\": \"Boolean active/inactive\",\n \"example\": \"Active / Inactive\"\n },\n {\n \"value\": \"on-off\",\n \"label\": \"Boolean on/off\",\n \"example\": \"On / Off\"\n },\n {\n \"value\": \"enabled-disabled\",\n \"label\": \"Boolean enabled/disabled\",\n \"example\": \"Enabled / Disabled\"\n },\n {\n \"value\": \"custom|Sim|Nao\",\n \"label\": \"Boolean custom (Sim/Nao)\",\n \"example\": \"Sim / Nao\"\n }\n ]\n },\n \"columns[].computed.outputType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"string\",\n \"label\": \"String\"\n },\n {\n \"value\": \"number\",\n \"label\": \"Number\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"percentage\",\n \"label\": \"Percentage\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date\"\n },\n {\n \"value\": \"boolean\",\n \"label\": \"Boolean\"\n },\n {\n \"value\": \"custom\",\n \"label\": \"Custom\"\n }\n ]\n },\n \"columns[].computed.format\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"shortDate\",\n \"label\": \"Date short\",\n \"example\": \"01/12/2023\"\n },\n {\n \"value\": \"mediumDate\",\n \"label\": \"Date medium\",\n \"example\": \"01 Dec 2023\"\n },\n {\n \"value\": \"longDate\",\n \"label\": \"Date long\",\n \"example\": \"01 December 2023\"\n },\n {\n \"value\": \"fullDate\",\n \"label\": \"Date full\",\n \"example\": \"Friday, 01 December 2023\"\n },\n {\n \"value\": \"MMM/yyyy\",\n \"label\": \"Month/Year\",\n \"example\": \"Dec/2023\"\n },\n {\n \"value\": \"shortTime\",\n \"label\": \"Time short\",\n \"example\": \"14:30\"\n },\n {\n \"value\": \"short\",\n \"label\": \"Date+Time short\",\n \"example\": \"01/12/2023 14:30\"\n },\n {\n \"value\": \"yyyy-MM-dd\",\n \"label\": \"ISO 8601\",\n \"example\": \"2023-12-01\"\n },\n {\n \"value\": \"dd/MM/yyyy\",\n \"label\": \"Date dd/MM/yyyy\",\n \"example\": \"01/12/2023\"\n },\n {\n \"value\": \"yyyy-MM-dd HH:mm\",\n \"label\": \"DateTime yyyy-MM-dd HH:mm\",\n \"example\": \"2023-12-01 14:30\"\n },\n {\n \"value\": \"1.0-0\",\n \"label\": \"Number integer\",\n \"example\": \"1,234\"\n },\n {\n \"value\": \"1.1-1\",\n \"label\": \"Number 1 decimal\",\n \"example\": \"1,234.5\"\n },\n {\n \"value\": \"1.2-2\",\n \"label\": \"Number 2 decimals\",\n \"example\": \"1,234.56\"\n },\n {\n \"value\": \"1.0-3\",\n \"label\": \"Number up to 3 decimals\",\n \"example\": \"1,234.567\"\n },\n {\n \"value\": \"1.0-0|nosep\",\n \"label\": \"Number no grouping\",\n \"example\": \"1234\"\n },\n {\n \"value\": \"BRL|symbol|2\",\n \"label\": \"Currency BRL symbol\",\n \"example\": \"R$ 1.234,56\"\n },\n {\n \"value\": \"BRL|symbol|2|nosep\",\n \"label\": \"Currency BRL symbol (no grouping)\",\n \"example\": \"R$ 1234,56\"\n },\n {\n \"value\": \"USD|symbol|2\",\n \"label\": \"Currency USD symbol\",\n \"example\": \"US$ 1,234.56\"\n },\n {\n \"value\": \"EUR|symbol|2\",\n \"label\": \"Currency EUR symbol\",\n \"example\": \"EUR 1,234.56\"\n },\n {\n \"value\": \"BRL|code|2\",\n \"label\": \"Currency code\",\n \"example\": \"1,234.56 BRL\"\n },\n {\n \"value\": \"USD|code|0\",\n \"label\": \"Currency USD code (0 decimals)\",\n \"example\": \"1234 USD\"\n },\n {\n \"value\": \"EUR|symbol|2|nosep\",\n \"label\": \"Currency EUR symbol (no grouping)\",\n \"example\": \"EUR 1234,56\"\n },\n {\n \"value\": \"1.0-0\",\n \"label\": \"Percent 0 decimals\",\n \"example\": \"12%\"\n },\n {\n \"value\": \"1.1-1\",\n \"label\": \"Percent 1 decimal\",\n \"example\": \"12.3%\"\n },\n {\n \"value\": \"1.2-2\",\n \"label\": \"Percent 2 decimals\",\n \"example\": \"12.34%\"\n },\n {\n \"value\": \"1.0-0|x100\",\n \"label\": \"Percent 0 decimals (x100)\",\n \"example\": \"12%\"\n },\n {\n \"value\": \"1.1-1|x100\",\n \"label\": \"Percent 1 decimal (x100)\",\n \"example\": \"12.3%\"\n },\n {\n \"value\": \"1.2-2|x100\",\n \"label\": \"Percent 2 decimals (x100)\",\n \"example\": \"12.34%\"\n },\n {\n \"value\": \"none\",\n \"label\": \"String none\",\n \"example\": \"Sample\"\n },\n {\n \"value\": \"uppercase\",\n \"label\": \"String uppercase\",\n \"example\": \"SAMPLE\"\n },\n {\n \"value\": \"lowercase\",\n \"label\": \"String lowercase\",\n \"example\": \"sample\"\n },\n {\n \"value\": \"titlecase\",\n \"label\": \"String titlecase\",\n \"example\": \"Sample Text\"\n },\n {\n \"value\": \"capitalize\",\n \"label\": \"String capitalize\",\n \"example\": \"Sample\"\n },\n {\n \"value\": \"uppercase|truncate|50|...\",\n \"label\": \"String uppercase + truncate 50\",\n \"example\": \"SAMPLE...\"\n },\n {\n \"value\": \"true-false\",\n \"label\": \"Boolean true/false\",\n \"example\": \"True / False\"\n },\n {\n \"value\": \"yes-no\",\n \"label\": \"Boolean yes/no\",\n \"example\": \"Yes / No\"\n },\n {\n \"value\": \"active-inactive\",\n \"label\": \"Boolean active/inactive\",\n \"example\": \"Active / Inactive\"\n },\n {\n \"value\": \"on-off\",\n \"label\": \"Boolean on/off\",\n \"example\": \"On / Off\"\n },\n {\n \"value\": \"enabled-disabled\",\n \"label\": \"Boolean enabled/disabled\",\n \"example\": \"Enabled / Disabled\"\n },\n {\n \"value\": \"custom|Sim|Nao\",\n \"label\": \"Boolean custom (Sim/Nao)\",\n \"example\": \"Sim / Nao\"\n }\n ]\n },\n \"behavior.filtering.advancedFilters.settings.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filter\",\n \"label\": \"Filter\"\n }\n ]\n },\n \"behavior.expansion.state.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"controlled\",\n \"label\": \"Controlled\"\n },\n {\n \"value\": \"uncontrolled\",\n \"label\": \"Uncontrolled\"\n }\n ]\n },\n \"behavior.expansion.interaction.trigger\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"row\",\n \"label\": \"Row\"\n },\n {\n \"value\": \"both\",\n \"label\": \"Both\"\n }\n ]\n },\n \"behavior.expansion.interaction.keyboard.profile\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"disclosure\",\n \"label\": \"Disclosure\"\n },\n {\n \"value\": \"grid\",\n \"label\": \"Grid\"\n }\n ]\n },\n \"behavior.expansion.limits.onOverflow\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"collapseOldest\",\n \"label\": \"Collapse Oldest\"\n },\n {\n \"value\": \"denyNew\",\n \"label\": \"Deny New\"\n },\n {\n \"value\": \"collapseAll\",\n \"label\": \"Collapse All\"\n }\n ]\n },\n \"behavior.expansion.collapseOn.sortChange\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"true\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"false\",\n \"label\": \"Disabled\"\n }\n ]\n },\n \"behavior.expansion.collapseOn.pageChange\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"true\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"false\",\n \"label\": \"Disabled\"\n }\n ]\n },\n \"behavior.expansion.collapseOn.filterChange\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"true\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"false\",\n \"label\": \"Disabled\"\n }\n ]\n },\n \"behavior.expansion.collapseOn.dataRefresh\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"true\",\n \"label\": \"Enabled\"\n },\n {\n \"value\": \"false\",\n \"label\": \"Disabled\"\n }\n ]\n },\n \"behavior.expansion.detail.source.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"inline\",\n \"label\": \"Inline\"\n },\n {\n \"value\": \"resource\",\n \"label\": \"Resource\"\n },\n {\n \"value\": \"resourcePath\",\n \"label\": \"Resource Path\"\n }\n ]\n },\n \"behavior.expansion.detail.source.resource.kind\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"ui-composition\",\n \"label\": \"UI Composition\"\n },\n {\n \"value\": \"form-schema\",\n \"label\": \"Form Schema\"\n },\n {\n \"value\": \"table-schema\",\n \"label\": \"Table Schema\"\n },\n {\n \"value\": \"dashboard-schema\",\n \"label\": \"Dashboard Schema\"\n }\n ]\n },\n \"behavior.expansion.detail.source.resourcePath.method\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"GET\",\n \"label\": \"GET\"\n },\n {\n \"value\": \"POST\",\n \"label\": \"POST\"\n }\n ]\n },\n \"behavior.expansion.detail.source.resourcePath.paramsMap\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"{\\\"id\\\":\\\"$row.id\\\"}\",\n \"label\": \"Row ID\"\n },\n {\n \"value\": \"{\\\"id\\\":\\\"$row.id\\\",\\\"table\\\":\\\"$ctx.tableId\\\"}\",\n \"label\": \"Row + Table\"\n }\n ]\n },\n \"behavior.expansion.detail.source.resourceAllowList[]\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"api/orders/*/detail-schema\",\n \"label\": \"Orders detail schema\"\n },\n {\n \"value\": \"api/customers/*/detail-schema\",\n \"label\": \"Customers detail schema\"\n }\n ]\n },\n \"behavior.expansion.detail.rendering.strategy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"registry\",\n \"label\": \"Registry\"\n }\n ]\n },\n \"behavior.expansion.detail.rendering.hostLayout\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n },\n {\n \"value\": \"stack\",\n \"label\": \"Stack\"\n },\n {\n \"value\": \"tabs\",\n \"label\": \"Tabs\"\n }\n ]\n },\n \"behavior.expansion.detail.rendering.fallbackNodePolicy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"failClosed\",\n \"label\": \"Fail Closed\"\n },\n {\n \"value\": \"renderPlaceholder\",\n \"label\": \"Render Placeholder\"\n }\n ]\n },\n \"behavior.expansion.detail.height.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"fixed\",\n \"label\": \"Fixed\"\n },\n {\n \"value\": \"dynamic\",\n \"label\": \"Dynamic\"\n }\n ]\n },\n \"behavior.expansion.virtualization.policy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"fixed-height-only\",\n \"label\": \"Fixed Height Only\"\n },\n {\n \"value\": \"allow-dynamic-under-flag\",\n \"label\": \"Allow Dynamic Under Flag\"\n }\n ]\n },\n \"behavior.expansion.security.eventExposureDefault.rowId\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"redacted\",\n \"label\": \"Redacted\"\n },\n {\n \"value\": \"hashed\",\n \"label\": \"Hashed\"\n },\n {\n \"value\": \"raw\",\n \"label\": \"Raw\"\n }\n ]\n },\n \"behavior.expansion.security.eventExposureDefault.expandedKeys\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"none\",\n \"label\": \"None\"\n },\n {\n \"value\": \"hashed\",\n \"label\": \"Hashed\"\n },\n {\n \"value\": \"raw\",\n \"label\": \"Raw\"\n }\n ]\n },\n \"behavior.expansion.deepLink.encoding\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"csv\",\n \"label\": \"CSV\"\n }\n ]\n },\n \"behavior.expansion.deepLink.parsing.duplicateParams\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"firstWins\",\n \"label\": \"First Wins\"\n },\n {\n \"value\": \"reject\",\n \"label\": \"Reject\"\n }\n ]\n },\n \"behavior.expansion.deepLink.integrity.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"opaqueToken\",\n \"label\": \"Opaque Token\"\n }\n ]\n },\n \"behavior.expansion.deepLink.privacy.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"denyByDefault\",\n \"label\": \"Deny By Default\"\n },\n {\n \"value\": \"allowByDefault\",\n \"label\": \"Allow By Default\"\n }\n ]\n },\n \"columns[].renderer.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"image\",\n \"label\": \"Image\"\n },\n {\n \"value\": \"badge\",\n \"label\": \"Badge\"\n },\n {\n \"value\": \"link\",\n \"label\": \"Link\"\n },\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"chip\",\n \"label\": \"Chip\"\n },\n {\n \"value\": \"progress\",\n \"label\": \"Progress\"\n },\n {\n \"value\": \"avatar\",\n \"label\": \"Avatar\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"menu\",\n \"label\": \"Menu\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n },\n {\n \"value\": \"microVisualization\",\n \"label\": \"Micro visualization\"\n },\n {\n \"value\": \"compose\",\n \"label\": \"Compose\"\n }\n ]\n },\n \"columns[].renderer.image.shape\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"square\",\n \"label\": \"Square\"\n },\n {\n \"value\": \"rounded\",\n \"label\": \"Rounded\"\n },\n {\n \"value\": \"circle\",\n \"label\": \"Circle\"\n }\n ]\n },\n \"columns[].renderer.image.fit\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"cover\",\n \"label\": \"Cover\"\n },\n {\n \"value\": \"contain\",\n \"label\": \"Contain\"\n }\n ]\n },\n \"columns[].renderer.link.target\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"_blank\",\n \"label\": \"New tab\"\n },\n {\n \"value\": \"_self\",\n \"label\": \"Same tab\"\n },\n {\n \"value\": \"_parent\",\n \"label\": \"Parent frame\"\n },\n {\n \"value\": \"_top\",\n \"label\": \"Top frame\"\n }\n ]\n },\n \"columns[].renderer.button.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n },\n {\n \"value\": \"text\",\n \"label\": \"Text\"\n }\n ]\n },\n \"columns[].renderer.button.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"columns[].renderer.button.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"sm\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"md\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"lg\",\n \"label\": \"Large\"\n }\n ]\n },\n \"columns[].renderer.badge.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n },\n {\n \"value\": \"soft\",\n \"label\": \"Soft\"\n }\n ]\n },\n \"columns[].renderer.chip.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n },\n {\n \"value\": \"soft\",\n \"label\": \"Soft\"\n }\n ]\n },\n \"columns[].renderer.rating.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"small\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"medium\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"large\",\n \"label\": \"Large\"\n }\n ]\n },\n \"columns[].renderer.compose.items[].type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"image\",\n \"label\": \"Image\"\n },\n {\n \"value\": \"badge\",\n \"label\": \"Badge\"\n },\n {\n \"value\": \"link\",\n \"label\": \"Link\"\n },\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"chip\",\n \"label\": \"Chip\"\n },\n {\n \"value\": \"progress\",\n \"label\": \"Progress\"\n },\n {\n \"value\": \"avatar\",\n \"label\": \"Avatar\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"menu\",\n \"label\": \"Menu\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n },\n {\n \"value\": \"microVisualization\",\n \"label\": \"Micro visualization\"\n }\n ]\n },\n \"columns[].renderer.microVisualization.visualization.valueExpr\": {},\n \"columns[].renderer.microVisualization.visualization.targetExpr\": {},\n \"columns[].renderer.microVisualization.visualization.segmentsExpr\": {},\n \"columns[].renderer.microVisualization.visualization.pointsExpr\": {},\n \"columns[].renderer.microVisualization.visualization.toneExpr\": {},\n \"columns[].renderer.microVisualization.visualization.fallbackTextExpr\": {},\n \"columns[].conditionalRenderers[].renderer.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"image\",\n \"label\": \"Image\"\n },\n {\n \"value\": \"badge\",\n \"label\": \"Badge\"\n },\n {\n \"value\": \"link\",\n \"label\": \"Link\"\n },\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"chip\",\n \"label\": \"Chip\"\n },\n {\n \"value\": \"progress\",\n \"label\": \"Progress\"\n },\n {\n \"value\": \"avatar\",\n \"label\": \"Avatar\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"menu\",\n \"label\": \"Menu\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n },\n {\n \"value\": \"microVisualization\",\n \"label\": \"Micro visualization\"\n },\n {\n \"value\": \"compose\",\n \"label\": \"Compose\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.image.shape\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"square\",\n \"label\": \"Square\"\n },\n {\n \"value\": \"rounded\",\n \"label\": \"Rounded\"\n },\n {\n \"value\": \"circle\",\n \"label\": \"Circle\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.image.fit\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"cover\",\n \"label\": \"Cover\"\n },\n {\n \"value\": \"contain\",\n \"label\": \"Contain\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.link.target\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"_blank\",\n \"label\": \"New tab\"\n },\n {\n \"value\": \"_self\",\n \"label\": \"Same tab\"\n },\n {\n \"value\": \"_parent\",\n \"label\": \"Parent frame\"\n },\n {\n \"value\": \"_top\",\n \"label\": \"Top frame\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.button.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n },\n {\n \"value\": \"text\",\n \"label\": \"Text\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.button.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.button.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"sm\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"md\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"lg\",\n \"label\": \"Large\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.badge.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n },\n {\n \"value\": \"soft\",\n \"label\": \"Soft\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.chip.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"filled\",\n \"label\": \"Filled\"\n },\n {\n \"value\": \"outlined\",\n \"label\": \"Outlined\"\n },\n {\n \"value\": \"soft\",\n \"label\": \"Soft\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.rating.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"small\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"medium\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"large\",\n \"label\": \"Large\"\n }\n ]\n },\n \"columns[].conditionalRenderers[].renderer.compose.items[].type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"image\",\n \"label\": \"Image\"\n },\n {\n \"value\": \"badge\",\n \"label\": \"Badge\"\n },\n {\n \"value\": \"link\",\n \"label\": \"Link\"\n },\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"chip\",\n \"label\": \"Chip\"\n },\n {\n \"value\": \"progress\",\n \"label\": \"Progress\"\n },\n {\n \"value\": \"avatar\",\n \"label\": \"Avatar\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"menu\",\n \"label\": \"Menu\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"html\",\n \"label\": \"HTML\"\n },\n {\n \"value\": \"microVisualization\",\n \"label\": \"Micro visualization\"\n }\n ]\n },\n \"actions.row.actions[].color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"actions.row.actions[].icon\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"edit\",\n \"label\": \"Edit\"\n },\n {\n \"value\": \"delete\",\n \"label\": \"Delete\"\n },\n {\n \"value\": \"visibility\",\n \"label\": \"View\"\n },\n {\n \"value\": \"more_vert\",\n \"label\": \"More\"\n },\n {\n \"value\": \"check\",\n \"label\": \"Approve\"\n },\n {\n \"value\": \"close\",\n \"label\": \"Reject\"\n },\n {\n \"value\": \"download\",\n \"label\": \"Download\"\n }\n ]\n },\n \"actions.row.actions[].globalAction.[actionId]\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"toast.success\",\n \"label\": \"Toast success\"\n },\n {\n \"value\": \"toast.error\",\n \"label\": \"Toast error\"\n },\n {\n \"value\": \"dialog.alert\",\n \"label\": \"Dialog alert\"\n },\n {\n \"value\": \"dialog.open\",\n \"label\": \"Dialog open\"\n },\n {\n \"value\": \"navigation.openExternal\",\n \"label\": \"Open external URL\"\n },\n {\n \"value\": \"navigation.openRoute\",\n \"label\": \"Open internal route\"\n },\n {\n \"value\": \"api.post\",\n \"label\": \"API POST\"\n },\n {\n \"value\": \"api.patch\",\n \"label\": \"API PATCH\"\n }\n ]\n },\n \"rowConditionalStyles[].condition\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"status == \\\"active\\\"\",\n \"label\": \"Status Active\"\n },\n {\n \"value\": \"amount < 0\",\n \"label\": \"Negative Amount\"\n },\n {\n \"value\": \"priority == \\\"high\\\"\",\n \"label\": \"High Priority\"\n }\n ]\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"ADD_COLUMN\",\n \"intentExamples\": [\n \"add column\",\n \"nova coluna\",\n \"criar coluna\",\n \"insert column\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": false,\n \"params\": [\n {\n \"name\": \"field\",\n \"type\": \"STRING\",\n \"description\": \"Nome técnico da nova coluna\"\n },\n {\n \"name\": \"header\",\n \"type\": \"STRING\",\n \"description\": \"Título da coluna\"\n }\n ],\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{params.field}}\",\n \"header\": \"{{params.header}}\",\n \"visible\": true\n }\n ]\n }\n },\n {\n \"id\": \"ADD_COLUMN_COMPUTED\",\n \"intentExamples\": [\n \"calculated column\",\n \"coluna calculada\",\n \"compute\",\n \"formula\",\n \"expression\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": false,\n \"params\": [\n {\n \"name\": \"field\",\n \"type\": \"STRING\",\n \"description\": \"Nome técnico da nova coluna (ex: total)\"\n },\n {\n \"name\": \"header\",\n \"type\": \"STRING\",\n \"description\": \"Título da coluna\"\n },\n {\n \"name\": \"expression\",\n \"type\": \"STRING\",\n \"description\": \"AST Json Logic canônico serializado em JSON para derived values (ex: { \\\"*\\\": [{ \\\"var\\\": \\\"quantity\\\" }, { \\\"var\\\": \\\"price\\\" }] })\"\n },\n {\n \"name\": \"type\",\n \"type\": \"ENUM\",\n \"options\": [\n \"number\",\n \"currency\",\n \"percentage\",\n \"string\",\n \"boolean\"\n ],\n \"description\": \"Tipo de dado resultante\"\n }\n ],\n \"relatedConcepts\": [\n \"computed-logic\"\n ],\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{params.field}}\",\n \"header\": \"{{params.header}}\",\n \"visible\": true,\n \"computed\": {\n \"expression\": \"{{params.expression}}\",\n \"outputType\": \"{{params.type}}\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"HIDE_COLUMN\",\n \"intentExamples\": [\n \"hide column\",\n \"ocultar coluna\",\n \"esconder coluna\",\n \"invisible\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"visible\": false\n }\n ]\n }\n },\n {\n \"id\": \"SHOW_COLUMN\",\n \"intentExamples\": [\n \"show column\",\n \"mostrar coluna\",\n \"exibir coluna\",\n \"visible\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"visible\": true\n }\n ]\n }\n },\n {\n \"id\": \"RENAME_COLUMN\",\n \"intentExamples\": [\n \"rename column\",\n \"renomear coluna\",\n \"titulo\",\n \"cabecalho\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"header\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"column.format.set\",\n \"intentExamples\": [\n \"format\",\n \"formatar\",\n \"date format\",\n \"number format\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"format\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"column.type.set\",\n \"intentExamples\": [\n \"type\",\n \"tipo\",\n \"data type\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"type\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"DISABLE_SORT\",\n \"intentExamples\": [\n \"disable sort\",\n \"desativar ordenacao\",\n \"sem ordenacao\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"sortable\": false\n }\n ]\n }\n },\n {\n \"id\": \"ENABLE_SORT\",\n \"intentExamples\": [\n \"enable sort\",\n \"ativar ordenacao\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"sortable\": true\n }\n ]\n }\n },\n {\n \"id\": \"column.width.set\",\n \"intentExamples\": [\n \"width\",\n \"largura\",\n \"col width\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"width\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"column.order.set\",\n \"intentExamples\": [\n \"ordem visual\",\n \"mover coluna\",\n \"colocar depois de\",\n \"colocar antes de\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"NUMBER\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"order\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"column.align.set\",\n \"intentExamples\": [\n \"align\",\n \"alinhamento\",\n \"left\",\n \"center\",\n \"right\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"align\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"column.sticky.set\",\n \"intentExamples\": [\n \"sticky\",\n \"fixar coluna\",\n \"pin column\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"sticky\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"column.renderer.type.set\",\n \"intentExamples\": [\n \"renderer\",\n \"render\",\n \"cell type\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"{{value}}\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"column.renderer.image.shape.set\",\n \"intentExamples\": [\n \"image shape\",\n \"avatar shape\",\n \"imagem recorte\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"image\",\n \"image\": {\n \"shape\": \"{{value}}\"\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"column.renderer.link.target.set\",\n \"intentExamples\": [\n \"link target\",\n \"abrir em nova aba\",\n \"target blank\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"link\",\n \"link\": {\n \"target\": \"{{value}}\"\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"column.renderer.button.style.set\",\n \"intentExamples\": [\n \"button style\",\n \"botao estilo\",\n \"variant\",\n \"color\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"button\",\n \"button\": {\n \"variant\": \"{{params.variant}}\",\n \"color\": \"{{params.color}}\"\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"SET_RENDERER_BADGE\",\n \"intentExamples\": [\n \"render badge\",\n \"exibir como badge\",\n \"status badge\",\n \"etiqueta\",\n \"tag\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"params\": [\n {\n \"name\": \"variant\",\n \"type\": \"ENUM\",\n \"options\": [\n \"filled\",\n \"outlined\",\n \"soft\"\n ],\n \"description\": \"Estilo visual do badge\"\n },\n {\n \"name\": \"color\",\n \"type\": \"ENUM\",\n \"options\": [\n \"primary\",\n \"accent\",\n \"warn\",\n \"success\",\n \"info\"\n ],\n \"description\": \"Cor semântica do badge\"\n }\n ],\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"badge\",\n \"badge\": {\n \"text\": \"{{target}}\",\n \"textField\": \"{{target}}\",\n \"color\": \"{{params.color}}\",\n \"variant\": \"{{params.variant}}\"\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"SET_RENDERER_CHIP\",\n \"intentExamples\": [\n \"render chip\",\n \"exibir como chip\",\n \"chip\",\n \"pilula\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"chip\",\n \"chip\": {\n \"textField\": \"{{target}}\",\n \"color\": \"{{params.color}}\",\n \"variant\": \"{{params.variant}}\"\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"SET_RENDERER_ICON\",\n \"intentExamples\": [\n \"render icon\",\n \"exibir como icone\",\n \"icone\",\n \"icon\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"icon\",\n \"icon\": {\n \"name\": \"{{value}}\",\n \"color\": \"{{params.color}}\",\n \"size\": 18\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"SET_RENDERER_COMPOSE_TITLE_SUBTITLE\",\n \"intentExamples\": [\n \"compose title subtitle\",\n \"titulo e subtitulo\",\n \"two lines\",\n \"duas linhas\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"compose\",\n \"compose\": {\n \"layout\": {\n \"direction\": \"column\",\n \"gap\": 4\n },\n \"items\": [\n {\n \"type\": \"value\",\n \"style\": \"font-weight: 500;\"\n },\n {\n \"type\": \"value\",\n \"textField\": \"{{params.subtitleField}}\",\n \"style\": \"font-size: 0.85em; color: var(--text-secondary);\"\n }\n ]\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"SET_RENDERER_COMPOSE_AVATAR_TEXT\",\n \"intentExamples\": [\n \"compose avatar text\",\n \"avatar e texto\",\n \"user card\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"renderer\": {\n \"type\": \"compose\",\n \"compose\": {\n \"layout\": {\n \"direction\": \"row\",\n \"gap\": 12,\n \"align\": \"center\"\n },\n \"items\": [\n {\n \"type\": \"avatar\",\n \"avatar\": {\n \"srcField\": \"{{params.imageField}}\",\n \"initialsField\": \"{{target}}\",\n \"shape\": \"circle\"\n }\n },\n {\n \"type\": \"compose\",\n \"compose\": {\n \"layout\": {\n \"direction\": \"column\",\n \"gap\": 2\n },\n \"items\": [\n {\n \"type\": \"value\",\n \"style\": \"font-weight: 500;\"\n },\n {\n \"type\": \"value\",\n \"textField\": \"{{params.subtitleField}}\",\n \"style\": \"font-size: 0.85em; opacity: 0.7;\"\n }\n ]\n }\n }\n ]\n }\n }\n }\n ]\n }\n },\n {\n \"id\": \"ENABLE_PAGINATION\",\n \"intentExamples\": [\n \"enable pagination\",\n \"paginar\",\n \"paginação\",\n \"pagination\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"pagination\": {\n \"enabled\": true,\n \"pageSize\": \"{{params.pageSize}}\"\n }\n }\n }\n },\n {\n \"id\": \"DISABLE_PAGINATION\",\n \"intentExamples\": [\n \"disable pagination\",\n \"remover paginacao\",\n \"lista infinita\",\n \"no pagination\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"pagination\": {\n \"enabled\": false\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_FILTERING\",\n \"intentExamples\": [\n \"enable filtering\",\n \"ligar filtros\",\n \"filtrar\",\n \"searchable\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"filtering\": {\n \"enabled\": true\n }\n }\n }\n },\n {\n \"id\": \"DISABLE_FILTERING\",\n \"intentExamples\": [\n \"disable filtering\",\n \"desligar filtros\",\n \"no filter\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"filtering\": {\n \"enabled\": false\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_ADVANCED_FILTERS\",\n \"intentExamples\": [\n \"advanced filters\",\n \"filtros avancados\",\n \"filtro complexo\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"filtering\": {\n \"advancedFilters\": {\n \"enabled\": true\n }\n }\n }\n }\n },\n {\n \"id\": \"SET_FILTER_MODE\",\n \"intentExamples\": [\n \"filter mode\",\n \"modo de filtro\",\n \"modo unico do filtro\",\n \"painel de filtro\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"filtering\": {\n \"advancedFilters\": {\n \"settings\": {\n \"mode\": \"{{value}}\"\n }\n }\n }\n }\n }\n },\n {\n \"id\": \"SET_ALWAYS_VISIBLE_FILTERS\",\n \"intentExamples\": [\n \"always visible filter\",\n \"filtro fixo\",\n \"fixar filtro\",\n \"pin filter\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"filtering\": {\n \"advancedFilters\": {\n \"settings\": {\n \"alwaysVisibleFields\": [\n \"{{target}}\"\n ]\n }\n }\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_FILTER_SAVING\",\n \"intentExamples\": [\n \"save filters\",\n \"salvar filtros\",\n \"filter tags\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"filtering\": {\n \"advancedFilters\": {\n \"settings\": {\n \"allowSaveTags\": true\n }\n }\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_SORTING\",\n \"intentExamples\": [\n \"enable sorting\",\n \"ligar ordenacao\",\n \"ordenar\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"sorting\": {\n \"enabled\": true\n }\n }\n }\n },\n {\n \"id\": \"DISABLE_SORTING\",\n \"intentExamples\": [\n \"disable sorting\",\n \"desligar ordenacao\",\n \"no sort\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"sorting\": {\n \"enabled\": false\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_SELECTION\",\n \"intentExamples\": [\n \"enable selection\",\n \"ativar selecao\",\n \"selecionavel\",\n \"selectable\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"selection\": {\n \"enabled\": true\n }\n }\n }\n },\n {\n \"id\": \"DISABLE_SELECTION\",\n \"intentExamples\": [\n \"disable selection\",\n \"remover selecao\",\n \"not selectable\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"selection\": {\n \"enabled\": false\n }\n }\n }\n },\n {\n \"id\": \"SET_SELECTION_SINGLE\",\n \"intentExamples\": [\n \"single selection\",\n \"selecao unica\",\n \"selecionar um\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": \"single\",\n \"patchTemplate\": {\n \"behavior\": {\n \"selection\": {\n \"type\": \"single\"\n }\n }\n }\n },\n {\n \"id\": \"SET_SELECTION_MULTIPLE\",\n \"intentExamples\": [\n \"multiple selection\",\n \"selecao multipla\",\n \"selecionar varios\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": \"multiple\",\n \"patchTemplate\": {\n \"behavior\": {\n \"selection\": {\n \"type\": \"multiple\"\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_EXPORT\",\n \"intentExamples\": [\n \"enable export\",\n \"ativar exportacao\",\n \"botão exportar\",\n \"excel\",\n \"pdf\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"export\": {\n \"enabled\": true\n },\n \"toolbar\": {\n \"visible\": true\n }\n }\n },\n {\n \"id\": \"DISABLE_EXPORT\",\n \"intentExamples\": [\n \"disable export\",\n \"remover exportacao\",\n \"esconder exportar\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"export\": {\n \"enabled\": false\n }\n }\n },\n {\n \"id\": \"SET_DENSITY\",\n \"intentExamples\": [\n \"set density\",\n \"mudar densidade\",\n \"compacto\",\n \"confortavel\",\n \"espacoso\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"appearance\": {\n \"density\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"SHOW_BORDERS\",\n \"intentExamples\": [\n \"show borders\",\n \"mostrar bordas\",\n \"com bordas\",\n \"grid lines\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"appearance\": {\n \"borders\": {\n \"showRowBorders\": true,\n \"showColumnBorders\": true\n }\n }\n }\n },\n {\n \"id\": \"HIDE_BORDERS\",\n \"intentExamples\": [\n \"hide borders\",\n \"ocultar bordas\",\n \"sem bordas\",\n \"clean look\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"appearance\": {\n \"borders\": {\n \"showRowBorders\": false,\n \"showColumnBorders\": false,\n \"showOuterBorder\": false\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_STRIPED_ROWS\",\n \"intentExamples\": [\n \"striped rows\",\n \"zebrado\",\n \"linhas alternadas\",\n \"zebra\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"appearance\": {\n \"colors\": {\n \"alternateRowBackground\": \"#f7f9fc\"\n }\n }\n }\n },\n {\n \"id\": \"DISABLE_STRIPED_ROWS\",\n \"intentExamples\": [\n \"disable striped\",\n \"remover zebrado\",\n \"fundo solido\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"appearance\": {\n \"colors\": {}\n }\n }\n },\n {\n \"id\": \"SHOW_TOOLBAR\",\n \"intentExamples\": [\n \"show toolbar\",\n \"mostrar toolbar\",\n \"barra de ferramentas\",\n \"titulo da tabela\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"toolbar\": {\n \"visible\": true\n }\n }\n },\n {\n \"id\": \"HIDE_TOOLBAR\",\n \"intentExamples\": [\n \"hide toolbar\",\n \"esconder toolbar\",\n \"remover titulo\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"toolbar\": {\n \"visible\": false\n }\n }\n },\n {\n \"id\": \"SET_TOOLBAR_POSITION\",\n \"intentExamples\": [\n \"toolbar position\",\n \"posicao da toolbar\",\n \"toolbar no topo\",\n \"toolbar embaixo\",\n \"toolbar em cima\",\n \"toolbar ambos\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"toolbar\": {\n \"position\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"SET_TOOLBAR_ACTIONS_POSITION\",\n \"intentExamples\": [\n \"acoes da toolbar\",\n \"barra de acoes\",\n \"acoes no topo\",\n \"acoes embaixo\",\n \"acoes em cima\",\n \"acoes em ambos\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"toolbar\": {\n \"actionsPosition\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"SET_TOOLBAR_ACTIONS_BG\",\n \"intentExamples\": [\n \"cor barra de acoes\",\n \"fundo da barra de acoes\",\n \"background acoes\",\n \"acoes com cor\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"toolbar\": {\n \"actionsBackgroundColor\": \"{{value}}\"\n }\n }\n },\n {\n \"id\": \"ENABLE_VIRTUALIZATION\",\n \"intentExamples\": [\n \"enable virtualization\",\n \"virtualizar\",\n \"scroll infinito\",\n \"performance\",\n \"large dataset\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"virtualization\": {\n \"enabled\": true,\n \"itemHeight\": 48\n }\n },\n \"performance\": {\n \"virtualization\": {\n \"enabled\": true,\n \"itemHeight\": 48\n }\n }\n }\n },\n {\n \"id\": \"DISABLE_VIRTUALIZATION\",\n \"intentExamples\": [\n \"disable virtualization\",\n \"desativar virtualizacao\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"virtualization\": {\n \"enabled\": false\n }\n },\n \"performance\": {\n \"virtualization\": {\n \"enabled\": false\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_ROW_EXPANSION\",\n \"intentExamples\": [\n \"expand row\",\n \"expandir linha\",\n \"detalhe expansivel\",\n \"row details\",\n \"master detail\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"expansion\": {\n \"enabled\": true,\n \"contractVersion\": \"1.0.0\",\n \"interaction\": {\n \"trigger\": \"icon\",\n \"keyboard\": {\n \"profile\": \"disclosure\"\n }\n },\n \"limits\": {\n \"allowMultiple\": false,\n \"maxExpandedRows\": 1,\n \"onOverflow\": \"collapseOldest\"\n },\n \"detail\": {\n \"schemaContract\": {\n \"kind\": \"praxis.detail.schema\",\n \"version\": \"1.0.0\"\n },\n \"source\": {\n \"mode\": \"inline\",\n \"inlineSchema\": {\n \"layout\": \"stack\",\n \"items\": []\n }\n },\n \"rendering\": {\n \"strategy\": \"registry\",\n \"registryId\": \"praxis.detail.default\"\n }\n }\n }\n }\n }\n },\n {\n \"id\": \"SET_EXPANSION_SOURCE_MODE\",\n \"intentExamples\": [\n \"expansion source\",\n \"detail source\",\n \"schema source\",\n \"resource detail\",\n \"resourcePath detail\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"expansion\": {\n \"detail\": {\n \"source\": {\n \"mode\": \"{{value}}\"\n }\n }\n }\n }\n }\n },\n {\n \"id\": \"SET_EXPANSION_RESOURCE\",\n \"intentExamples\": [\n \"detail resource id\",\n \"resource detail id\",\n \"ui composition detail\",\n \"schema detail resource\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"behavior\": {\n \"expansion\": {\n \"detail\": {\n \"source\": {\n \"mode\": \"resource\",\n \"resource\": {\n \"kind\": \"{{params.kind}}\",\n \"id\": \"{{params.id}}\",\n \"version\": \"{{params.version}}\"\n }\n }\n }\n }\n }\n }\n },\n {\n \"id\": \"SET_COLUMN_BOLD\",\n \"intentExamples\": [\n \"column bold\",\n \"coluna negrito\",\n \"destacar coluna\",\n \"bold text\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"style\": \"font-weight: 600;\"\n }\n ]\n }\n },\n {\n \"id\": \"SET_COLUMN_COLOR\",\n \"intentExamples\": [\n \"column color\",\n \"cor da coluna\",\n \"pintar coluna\",\n \"text color\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"style\": \"color: {{value}};\"\n }\n ]\n }\n },\n {\n \"id\": \"SET_HEADER_UPPERCASE\",\n \"intentExamples\": [\n \"header uppercase\",\n \"cabecalho maiuscula\",\n \"titulo caixa alta\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"headerStyle\": \"text-transform: uppercase;\"\n }\n ]\n }\n },\n {\n \"id\": \"SET_HEADER_BOLD\",\n \"intentExamples\": [\n \"header bold\",\n \"cabecalho negrito\",\n \"titulo forte\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"headerStyle\": \"font-weight: 600;\"\n }\n ]\n }\n },\n {\n \"id\": \"SET_HEADER_BG_COLOR\",\n \"intentExamples\": [\n \"header background\",\n \"fundo cabecalho\",\n \"cor titulo\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"headerStyle\": \"background-color: {{value}};\"\n }\n ]\n }\n },\n {\n \"id\": \"SET_HEADER_TEXT_COLOR\",\n \"intentExamples\": [\n \"header text color\",\n \"cor texto cabecalho\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"headerStyle\": \"color: {{value}};\"\n }\n ]\n }\n },\n {\n \"id\": \"SET_TOOLBAR_ALIGNMENT\",\n \"intentExamples\": [\n \"toolbar align\",\n \"alinhar toolbar\",\n \"alinhamento barra\",\n \"space-between\",\n \"start\",\n \"end\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"ENUM\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"toolbar\": {\n \"layout\": {\n \"alignment\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_GROUPING\",\n \"intentExamples\": [\n \"group by\",\n \"agrupar por\",\n \"agrupamento\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"STRING\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"grouping\": {\n \"enabled\": true,\n \"fields\": [\n \"{{target}}\"\n ],\n \"expanded\": true\n }\n }\n }\n },\n {\n \"id\": \"CLEAR_GROUPING\",\n \"intentExamples\": [\n \"ungroup\",\n \"desagrupar\",\n \"remover agrupamento\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"behavior\": {\n \"grouping\": {\n \"enabled\": false,\n \"fields\": []\n }\n }\n }\n },\n {\n \"id\": \"ENABLE_ROW_ACTIONS\",\n \"intentExamples\": [\n \"enable row actions\",\n \"acoes de linha\",\n \"botoes na linha\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"BOOLEAN\",\n \"operation\": \"update\",\n \"requiresExistingTarget\": false,\n \"defaultValue\": true,\n \"patchTemplate\": {\n \"actions\": {\n \"row\": {\n \"enabled\": true,\n \"sticky\": \"end\"\n }\n }\n }\n },\n {\n \"id\": \"ADD_ROW_ACTION_ICON\",\n \"intentExamples\": [\n \"add row action\",\n \"botao de acao\",\n \"adicionar botao\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"actions\": {\n \"row\": {\n \"actions\": [\n {\n \"id\": \"{{id}}\",\n \"icon\": \"{{icon}}\",\n \"label\": \"{{label}}\",\n \"color\": \"{{params.color}}\",\n \"overflow\": false\n }\n ]\n }\n }\n }\n },\n {\n \"id\": \"ADD_ROW_ACTION_MENU\",\n \"intentExamples\": [\n \"add row menu\",\n \"acao no menu\",\n \"item de menu\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"actions\": {\n \"row\": {\n \"actions\": [\n {\n \"id\": \"{{id}}\",\n \"icon\": \"{{icon}}\",\n \"label\": \"{{label}}\",\n \"overflow\": true\n }\n ]\n }\n }\n }\n },\n {\n \"id\": \"ADD_ROW_STYLE_BG\",\n \"intentExamples\": [\n \"row background condition\",\n \"pintar linha se\",\n \"cor de fundo condicional\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"rowConditionalStyles\": [\n {\n \"condition\": \"{{condition}}\",\n \"style\": {\n \"background-color\": \"{{value}}\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"ADD_ROW_STYLE_COLOR\",\n \"intentExamples\": [\n \"row text color condition\",\n \"cor texto linha se\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": false,\n \"patchTemplate\": {\n \"rowConditionalStyles\": [\n {\n \"condition\": \"{{condition}}\",\n \"style\": {\n \"color\": \"{{value}}\"\n }\n }\n ]\n }\n },\n {\n \"id\": \"ADD_CONDITIONAL_RENDERER\",\n \"intentExamples\": [\n \"conditional renderer\",\n \"renderer condicional\",\n \"badge condicional\",\n \"chip condicional\",\n \"badge se\",\n \"chip se\",\n \"conditional badge\",\n \"conditional chip\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": true,\n \"params\": [\n {\n \"name\": \"condition\",\n \"type\": \"STRING\",\n \"description\": \"Expressao condicional (ex: recompensa > 500000)\"\n },\n {\n \"name\": \"renderer\",\n \"type\": \"STRING\",\n \"description\": \"Renderer completo com type e config (ex: { type: \\\"badge\\\", badge: { textField: \\\"recompensa\\\", color: \\\"#ff69b4\\\", variant: \\\"filled\\\" } })\"\n }\n ],\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"conditionalRenderers\": [\n {\n \"condition\": \"{{params.condition}}\",\n \"renderer\": \"{{params.renderer}}\"\n }\n ]\n }\n ]\n }\n },\n {\n \"id\": \"ADD_CONDITIONAL_ICON\",\n \"intentExamples\": [\n \"conditional icon\",\n \"icone condicional\",\n \"icone se\"\n ],\n \"scope\": \"COLUMN\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"requiresExistingTarget\": true,\n \"patchTemplate\": {\n \"columns\": [\n {\n \"field\": \"{{target}}\",\n \"conditionalRenderers\": [\n {\n \"condition\": \"{{condition}}\",\n \"renderer\": {\n \"type\": \"icon\",\n \"icon\": {\n \"name\": \"{{value}}\",\n \"color\": \"{{params.color}}\"\n }\n }\n }\n ]\n }\n ]\n }\n }\n ],\n \"fieldResolvers\": {\n \"columns[].field\": [\n \"field\",\n \"header\"\n ],\n \"actions.row.actions[].id\": [\n \"id\",\n \"label\"\n ],\n \"rowConditionalStyles[].condition\": [\n \"condition\"\n ]\n },\n \"hints\": [\n \"Use semantic patches with columns[] and field, not JSON Patch or column indexes.\",\n \"Set columns[].type before choosing columns[].format presets to avoid mismatched formatting.\",\n \"Renderer config overrides format/valueMapping; avoid mixing unless required.\",\n \"Use ADD_CONDITIONAL_RENDERER with renderer.type + renderer.<type> config for conditional badges/chips.\",\n \"When the table already shows a status/boolean column as valueMapping or chip/badge and the user refines colors, variants, icons, animation or tooltip, preserve the target column and create conditionalRenderers per semantic value instead of repeating the same valueMapping.\",\n \"For boolean chips/badges, model true/false branches explicitly: condition {\\\"==\\\":[{\\\"var\\\":\\\"<field>\\\"},true]} for the positive label and {\\\"==\\\":[{\\\"var\\\":\\\"<field>\\\"},false]} for the negative label; use renderer.type \\\"chip\\\" or \\\"badge\\\" with text, color and variant.\",\n \"DOC: Widget purpose: data table with sorting, filtering, pagination, and actions.\",\n \"DOC: Host inputs: tableId (required), resourcePath (optional), config (optional).\",\n \"DOC: config defaults to createDefaultTableConfig(); columns may start empty.\",\n \"DOC: behavior.expansion.detail é schema-driven; altere source.mode (inline/resource/resourcePath), não use detail.type.\",\n \"DOC: Para detail.source.mode=resource, sempre informar resource.kind + resource.id + resource.version.\",\n \"DOC: Para detail.source.mode=resourcePath, sempre informar resourcePath.paramsMap + resourceAllowList[]; URL absoluta/scheme (http:, https:, data:, javascript:) é bloqueada e o runtime aplica fail-closed.\",\n \"DOC: collapseOn ativo no runtime P0A: sortChange, pageChange, filterChange e dataRefresh.\",\n \"DOC: When resourcePath is available, the table can load schema and data; ask the user to pick an API resource when missing.\",\n \"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\",\n \"DOC: columns[].computed.expression agora usa AST Json Logic canônico para derived values; não use fórmulas string.\",\n \"DOC: Operadores/funções canônicos úteis: +, -, *, /, %, min, max, cat, substr, round, ceil, floor, abs, coalesce, now, date, yearsSince, monthsSince, daysSince, len, toNumber e stringify.\",\n \"DOC: Examples: {\\\"yearsSince\\\":[{\\\"var\\\":\\\"dataNascimento\\\"}]} → idade; {\\\"yearsSince\\\":[{\\\"var\\\":\\\"dataAdmissao\\\"}]} → tempoEmpresa (anos); {\\\"monthsSince\\\":[{\\\"var\\\":\\\"dataAdmissao\\\"}]} → tempoEmpresa (meses); {\\\"daysSince\\\":[{\\\"var\\\":\\\"dataCadastro\\\"}]} → dias desde cadastro; {\\\"+\\\":[{\\\"coalesce\\\":[{\\\"var\\\":\\\"bonus\\\"},0]},{\\\"var\\\":\\\"salario\\\"}]} → total com fallback.\",\n \"### DATA ARCHETYPE TO VISUAL STRATEGY\",\n \"Apply these patterns based on the SEMANTIC NATURE of the column data:\",\n \"- STATUS/STATE (e.g., phase, stage, is_active, priority):\",\n \" -> Use \\\"badge\\\" or \\\"chip\\\" with conditional colors (success/warn/error/info).\",\n \" -> Use \\\"valueMapping\\\" to convert codes (1, \\\"A\\\") to labels (\\\"Active\\\", \\\"Approved\\\").\",\n \"- METRICS/KPI (e.g., progress, score, rating, completion):\",\n \" -> Use \\\"progress\\\" (bars), \\\"rating\\\" (stars), or \\\"percentage\\\" type.\",\n \" -> Align \\\"right\\\".\",\n \"- FINANCIAL (e.g., price, cost, balance, total):\",\n \" -> Use type \\\"currency\\\" and format \\\"BRL|symbol|2\\\" (or per locale).\",\n \" -> Align \\\"right\\\". Style: \\\"font-variant-numeric: tabular-nums\\\".\",\n \"- ENTITIES (e.g., user, product, thumb):\",\n \" -> Use \\\"avatar\\\" (for people/users) or \\\"image\\\" (for products/files).\",\n \" -> Combine with \\\"link\\\" or \\\"compose\\\" for title+subtitle layouts.\",\n \"- INTERACTIVE/NAV (e.g., details, website, download):\",\n \" -> Use \\\"button\\\" (actions), \\\"link\\\" (navigation) or \\\"icon\\\" (simple triggers).\",\n \"- BOOLEAN (e.g., has_tax, is_valid):\",\n \" -> Use \\\"toggle\\\" (if editable) or \\\"icon\\\" (check/close) or \\\"badge\\\" (Yes/No).\",\n \"- IDENTIFIERS (e.g., uuid, sku, order_id, cpf):\",\n \" -> Style: \\\"font-family: monospace\\\".\",\n \" -> CRITICAL: Do NOT use numeric formatting (like \\\"1.0-0\\\") for IDs. Treat them as strings.\",\n \" -> Consider adding a \\\"copy\\\" context action.\",\n \"- GROUPING (e.g., category, department):\",\n \" -> If the user asks to \\\"group by X\\\", use the ENABLE_GROUPING action with target=X.\",\n \"- TEMPORAL (e.g., created_at, deadline):\",\n \" -> Use type \\\"date\\\". Prefer \\\"short\\\" or \\\"shortDate\\\" for compact views.\",\n \" -> Use standard format (dd/MM/yyyy) for strict records.\"\n ]\n },\n \"aiConcepts\": {\n \"authoring-envelope\": {\n \"id\": \"authoring-envelope\",\n \"title\": \"Envelope de Autoria\",\n \"description\": \"Contrato primário de autoria usado por editor visual, editor JSON, playground e IA.\",\n \"rules\": [\n \"O JSON primário de autoria é TableAuthoringDocument com kind \\\"praxis.table.editor\\\".\",\n \"bindings.resourcePath e bindings.horizontalScroll não devem ser embutidos diretamente no TableConfig.\",\n \"meta.idField pertence ao TableConfig canônico e deve ser editado como metadado da configuração.\",\n \"TableConfig representa a projeção canônica de runtime, não o envelope completo de autoria.\",\n \"meta.schemaId e meta.serverHash são snapshots persistidos de reconciliação, não fonte primária do runtime.\"\n ],\n \"examples\": [\n \"{ kind: \\\"praxis.table.editor\\\", version: 1, config: { meta: { idField: \\\"employeeId\\\" }, columns: [{ field: \\\"name\\\", header: \\\"Nome\\\" }] }, bindings: { resourcePath: \\\"employees\\\", horizontalScroll: \\\"auto\\\" } }\"\n ],\n \"antiPatterns\": [\n \"{ columns: [{ field: \\\"name\\\", header: \\\"Nome\\\" }], __resourcePath__: \\\"employees\\\" }\",\n \"{ config: { columns: [] }, bindings: { idField: \\\"employeeId\\\" } }\"\n ]\n },\n \"meta-identity\": {\n \"id\": \"meta-identity\",\n \"title\": \"Identidade e Metadados\",\n \"description\": \"Regras para meta.* persistível (nome, descrição, tags, schemaId).\",\n \"rules\": [\n \"meta.idField deve apontar para o campo único das linhas quando configurado.\",\n \"Alterar meta.idField exige confirmação pois impacta seleção e ações por linha.\",\n \"meta.tags deve ser uma lista de strings curtas e sem espaços extras.\",\n \"meta.schemaId é referência de origem; use apenas valores conhecidos.\"\n ],\n \"examples\": [\n \"meta.name = \\\"Funcionários ativos\\\"\",\n \"meta.description = \\\"Visão de colaboradores ativos com filtros por status.\\\"\",\n \"meta.tags = [\\\"financeiro\\\", \\\"demo\\\"]\",\n \"meta.idField = \\\"employeeId\\\"\"\n ],\n \"antiPatterns\": [\n \"meta.idField = \\\"id\\\" (sem validar se existe no dataset)\",\n \"meta.tags = \\\"financeiro\\\"\"\n ]\n },\n \"columns-core\": {\n \"id\": \"columns-core\",\n \"title\": \"Colunas Básicas\",\n \"description\": \"Definições essenciais de colunas (field, header, visible, order, width).\",\n \"rules\": [\n \"columns[].field deve ser único e existir no dataset.\",\n \"Não reutilize o mesmo field em duas colunas.\",\n \"Use order para posicionar colunas; menor valor = mais à esquerda.\",\n \"width aceita valores CSS (ex.: \\\"120px\\\", \\\"10%\\\", \\\"auto\\\").\"\n ],\n \"examples\": [\n \"{ field: \\\"status\\\", header: \\\"Status\\\", visible: true, order: 2 }\",\n \"{ field: \\\"createdAt\\\", header: \\\"Criado em\\\", width: \\\"140px\\\" }\"\n ],\n \"antiPatterns\": [\n \"{ field: \\\"status\\\", header: \\\"Status\\\" } e outra coluna com field \\\"status\\\"\",\n \"{ field: \\\"price\\\", width: 120 }\"\n ]\n },\n \"columns-behavior\": {\n \"id\": \"columns-behavior\",\n \"title\": \"Comportamento de Coluna\",\n \"description\": \"Configura sortable, filterable, resizable, align e sticky.\",\n \"rules\": [\n \"sortable e filterable devem refletir o comportamento real do backend.\",\n \"resizable depende de behavior.resizing.enabled quando disponível.\",\n \"align deve ser left/center/right.\",\n \"sticky aceita true, \\\"start\\\" ou \\\"end\\\".\"\n ],\n \"examples\": [\n \"{ field: \\\"amount\\\", sortable: true, filterable: true, align: \\\"right\\\" }\",\n \"{ field: \\\"id\\\", sticky: \\\"start\\\" }\"\n ],\n \"antiPatterns\": [\n \"{ align: \\\"middle\\\" }\",\n \"{ sticky: \\\"left\\\" }\"\n ]\n },\n \"columns-styles\": {\n \"id\": \"columns-styles\",\n \"title\": \"Estilos de Coluna\",\n \"description\": \"CSS inline e classes para células e cabeçalho.\",\n \"rules\": [\n \"cssClass/headerCssClass devem ser nomes de classe válidos.\",\n \"style/headerStyle são CSS inline curtos e seguros.\",\n \"Evite !important e regras muito longas.\"\n ],\n \"examples\": [\n \"{ field: \\\"status\\\", cssClass: \\\"col-status\\\" }\",\n \"{ field: \\\"name\\\", headerStyle: \\\"text-transform: uppercase;\\\" }\"\n ],\n \"antiPatterns\": [\n \"{ headerCssClass: \\\"header title\\\" }\",\n \"{ style: \\\"background: url(javascript:...)\\\" }\"\n ]\n },\n \"columns-types\": {\n \"id\": \"columns-types\",\n \"title\": \"Tipos e Formatos de Coluna\",\n \"description\": \"Regras de type/format por tipo de dado.\",\n \"rules\": [\n \"type deve ser um dos tipos suportados (string/number/date/boolean/currency/percentage/custom).\",\n \"format deve ser compatível com type e presets do sistema.\",\n \"Para currency, use formato \\\"BRL|symbol|2\\\" ou semelhante.\",\n \"Para date, use DatePipe ou presets existentes.\"\n ],\n \"examples\": [\n \"{ field: \\\"createdAt\\\", type: \\\"date\\\", format: \\\"dd/MM/yyyy\\\" }\",\n \"{ field: \\\"amount\\\", type: \\\"currency\\\", format: \\\"BRL|symbol|2\\\" }\"\n ],\n \"antiPatterns\": [\n \"{ type: \\\"money\\\" }\",\n \"{ format: \\\"money()\\\" }\"\n ]\n },\n \"columns-formatting\": {\n \"id\": \"columns-formatting\",\n \"title\": \"Mapeamento e Formatação Avançada\",\n \"description\": \"valueMapping, format e estilos adicionais.\",\n \"rules\": [\n \"valueMapping deve usar chaves de string para mapear valores crus.\",\n \"Use format presets quando disponíveis; evite formatos inventados.\"\n ],\n \"syntax\": \"format: \\\"BRL|symbol|2\\\"\",\n \"examples\": [\n \"{ field: \\\"active\\\", valueMapping: { \\\"1\\\": \\\"Ativo\\\", \\\"0\\\": \\\"Inativo\\\" } }\"\n ],\n \"antiPatterns\": [\n \"{ valueMapping: { 1: \\\"Ativo\\\" } }\"\n ]\n },\n \"columns-internals\": {\n \"id\": \"columns-internals\",\n \"title\": \"Campos Internos de Coluna\",\n \"description\": \"Campos reservados usados por fluxos internos e importação.\",\n \"rules\": [\n \"Evite setar _styleRulesState, _generatedValueGetter, _originalApiType e _isApiField manualmente.\",\n \"Use apenas em fluxos de migração ou importação controlada.\"\n ],\n \"examples\": [\n \"(_isApiField true só quando coluna veio da API)\"\n ],\n \"antiPatterns\": [\n \"{ _generatedValueGetter: \\\"row => row.value\\\" }\"\n ]\n },\n \"computed-logic\": {\n \"id\": \"computed-logic\",\n \"title\": \"Lógica de Colunas Calculadas\",\n \"description\": \"Regras matemáticas e de sintaxe para colunas computed.\",\n \"rules\": [\n \"Use AST Json Logic canônico em columns[].computed.expression.\",\n \"Acesse campos da linha com {\\\"var\\\":\\\"field\\\"} e dependências anteriores com {\\\"var\\\":\\\"computed.total\\\"}.\",\n \"Operadores/funções disponíveis incluem +, -, *, /, %, min, max, cat, substr, round, floor, ceil, abs, coalesce, now, date, yearsSince, monthsSince, daysSince, len, toNumber e stringify.\",\n \"NÃO use prefixos como \\\"row.\\\", \\\"this.\\\" ou \\\"item.\\\", nem strings DSL.\",\n \"O resultado deve ser compatível com o outputType (number, currency, percentage, string).\"\n ],\n \"syntax\": \"{\\\"*\\\":[{\\\"var\\\":\\\"fieldA\\\"},{\\\"var\\\":\\\"fieldB\\\"}]}\",\n \"examples\": [\n \"{\\\"*\\\":[{\\\"var\\\":\\\"quantity\\\"},{\\\"var\\\":\\\"unitPrice\\\"}]}\",\n \"{\\\"/\\\":[{\\\"-\\\":[{\\\"var\\\":\\\"total\\\"},{\\\"var\\\":\\\"cost\\\"}]},{\\\"var\\\":\\\"total\\\"}]}\",\n \"{\\\"min\\\":[{\\\"var\\\":\\\"stock\\\"},100]}\",\n \"{\\\"abs\\\":[{\\\"var\\\":\\\"balance\\\"}]}\"\n ],\n \"antiPatterns\": [\n \"\\\"quantity * price\\\"\",\n \"row.quantity * row.price\",\n \"Math.max(price, 0)\",\n \"return quantity * price;\"\n ]\n },\n \"renderers-core\": {\n \"id\": \"renderers-core\",\n \"title\": \"Renderers de Coluna\",\n \"description\": \"Regras para columns[].renderer.* e tipos suportados.\",\n \"rules\": [\n \"Defina columns[].renderer.type antes de configurar detalhes.\",\n \"Para renderers interativos (button, toggle, menu), configure action.\",\n \"renderer.html deve usar template com placeholders [[field]].\",\n \"renderer.link deve preferir hrefField/textField quando o valor vem do dataset.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"badge\\\", badge: { textField: \\\"status\\\", color: \\\"success\\\" } } }\",\n \"{ renderer: { type: \\\"button\\\", button: { label: \\\"Editar\\\", action: { id: \\\"edit-row\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ renderer: { badge: { text: \\\"Ativo\\\" } } }\",\n \"{ renderer: { type: \\\"button\\\", button: { label: \\\"Editar\\\" } } }\"\n ]\n },\n \"renderer-icon\": {\n \"id\": \"renderer-icon\",\n \"title\": \"Renderer Icon\",\n \"description\": \"Configuração de renderer.icon.*\",\n \"rules\": [\n \"Use icon.name para ícone fixo ou icon.nameField para dinâmico.\",\n \"icon.size é em px.\",\n \"ariaLabel deve ser descritivo.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"icon\\\", icon: { name: \\\"check_circle\\\", color: \\\"success\\\", size: 18 } } }\"\n ],\n \"antiPatterns\": [\n \"{ icon: { name: \\\"check\\\" } } sem renderer.type\"\n ]\n },\n \"renderer-image\": {\n \"id\": \"renderer-image\",\n \"title\": \"Renderer Image\",\n \"description\": \"Configuração de renderer.image.*\",\n \"rules\": [\n \"Use srcField quando a URL vem do dataset.\",\n \"Defina alt/altField para acessibilidade.\",\n \"width/height são em px.\",\n \"shape deve ser square/rounded/circle.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"image\\\", image: { srcField: \\\"avatarUrl\\\", shape: \\\"circle\\\", width: 32, height: 32 } } }\"\n ],\n \"antiPatterns\": [\n \"{ renderer: { type: \\\"image\\\", image: { src: \\\"\\\" } } }\"\n ]\n },\n \"renderer-badge\": {\n \"id\": \"renderer-badge\",\n \"title\": \"Renderer Badge\",\n \"description\": \"Configuração de renderer.badge.*\",\n \"rules\": [\n \"Badge requer text ou textField.\",\n \"variant deve ser filled/outlined/soft.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"badge\\\", badge: { textField: \\\"status\\\", variant: \\\"filled\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ badge: {} }\"\n ]\n },\n \"renderer-link\": {\n \"id\": \"renderer-link\",\n \"title\": \"Renderer Link\",\n \"description\": \"Configuração de renderer.link.*\",\n \"rules\": [\n \"Use hrefField quando URL vem do dataset.\",\n \"target deve ser _blank/_self/_parent/_top.\",\n \"rel deve ser usado com target _blank (ex.: noopener).\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"link\\\", link: { textField: \\\"name\\\", hrefField: \\\"profileUrl\\\", target: \\\"_blank\\\", rel: \\\"noopener\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ link: { href: \\\"javascript:alert(1)\\\" } }\"\n ]\n },\n \"renderer-button\": {\n \"id\": \"renderer-button\",\n \"title\": \"Renderer Button\",\n \"description\": \"Configuração de renderer.button.*\",\n \"rules\": [\n \"button.action.id é obrigatório para ações interativas.\",\n \"disabledCondition usa expressao condicional canonica em JSON Logic.\",\n \"variant deve ser filled/outlined/text.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"button\\\", button: { label: \\\"Editar\\\", action: { id: \\\"edit-row\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ button: { label: \\\"Editar\\\" } }\"\n ]\n },\n \"renderer-chip\": {\n \"id\": \"renderer-chip\",\n \"title\": \"Renderer Chip\",\n \"description\": \"Configuração de renderer.chip.*\",\n \"rules\": [\n \"Chip requer text ou textField.\",\n \"variant deve ser filled/outlined/soft.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"chip\\\", chip: { text: \\\"Ativo\\\", variant: \\\"filled\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ chip: { variant: \\\"ghost\\\" } }\"\n ]\n },\n \"renderer-progress\": {\n \"id\": \"renderer-progress\",\n \"title\": \"Renderer Progress\",\n \"description\": \"Configuração de renderer.progress.*\",\n \"rules\": [\n \"valueExpr deve retornar 0-100.\",\n \"showLabel controla exibição do valor.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"progress\\\", progress: { valueExpr: \\\"progress\\\", showLabel: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ progress: { valueExpr: \\\"progress/100\\\" } } sem garantir 0-100\"\n ]\n },\n \"renderer-avatar\": {\n \"id\": \"renderer-avatar\",\n \"title\": \"Renderer Avatar\",\n \"description\": \"Configuração de renderer.avatar.*\",\n \"rules\": [\n \"Use srcField para imagem dinâmica.\",\n \"initialsField deriva iniciais automaticamente a partir de um campo textual.\",\n \"initialsExpr é fallback quando não há imagem e deve retornar as iniciais prontas; não use JS arbitrário para split/map/trim.\",\n \"Use backgroundColor e textColor para colorir o círculo do avatar; para variar por linha, aplique esses campos em conditionalRenderers.\",\n \"shape deve ser circle/square/rounded.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"avatar\\\", avatar: { srcField: \\\"avatarUrl\\\", initialsField: \\\"name\\\" } } }\",\n \"{ renderer: { type: \\\"avatar\\\", avatar: { initialsExpr: \\\"initials\\\" } } }\",\n \"{ conditionalRenderers: [{ condition: { \\\">\\\": [{ \\\"var\\\": \\\"salary\\\" }, 30000] }, renderer: { type: \\\"avatar\\\", avatar: { initialsField: \\\"name\\\", backgroundColor: \\\"#D32F2F\\\", textColor: \\\"#FFFFFF\\\" } } }] }\"\n ],\n \"antiPatterns\": [\n \"{ avatar: { initialsExpr: \\\"name\\\" } }\",\n \"{ avatar: { shape: \\\"round\\\" } }\"\n ]\n },\n \"renderer-toggle\": {\n \"id\": \"renderer-toggle\",\n \"title\": \"Renderer Toggle\",\n \"description\": \"Configuração de renderer.toggle.*\",\n \"rules\": [\n \"toggle.action.id é obrigatório para persistir mudança.\",\n \"disabledCondition usa expressao condicional canonica em JSON Logic.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"toggle\\\", toggle: { stateExpr: \\\"active\\\", action: { id: \\\"toggle-active\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ toggle: { stateExpr: \\\"active\\\" } } sem action\"\n ]\n },\n \"renderer-menu\": {\n \"id\": \"renderer-menu\",\n \"title\": \"Renderer Menu\",\n \"description\": \"Configuração de renderer.menu.*\",\n \"rules\": [\n \"itemsExpr deve produzir lista de ações válidas.\",\n \"ariaLabel deve descrever o menu.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"menu\\\", menu: { itemsExpr: \\\"row.menuItems\\\", ariaLabel: \\\"Ações\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ menu: { itemsExpr: \\\"row => row.items\\\" } }\"\n ]\n },\n \"renderer-rating\": {\n \"id\": \"renderer-rating\",\n \"title\": \"Renderer Rating\",\n \"description\": \"Configuração de renderer.rating.*\",\n \"rules\": [\n \"valueExpr deve retornar numero dentro do max.\",\n \"O renderer é somente leitura por padrão; não use readonly no schema funcional.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"rating\\\", rating: { valueExpr: \\\"score\\\", max: 5, ariaLabel: \\\"Nota {value} de {max}\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ rating: { max: 0 } }\"\n ]\n },\n \"renderer-html\": {\n \"id\": \"renderer-html\",\n \"title\": \"Renderer HTML\",\n \"description\": \"Configuração de renderer.html.*\",\n \"rules\": [\n \"template deve usar placeholders [[field]].\",\n \"sanitize deve ser strict ou basic, preferindo strict.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"html\\\", html: { template: \\\"<strong>[[name]]</strong>\\\", sanitize: \\\"strict\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ html: { template: \\\"<script>alert(1)</script>\\\" } }\"\n ]\n },\n \"renderer-compose\": {\n \"id\": \"renderer-compose\",\n \"title\": \"Renderer Compose\",\n \"description\": \"Composição de múltiplos renderers na mesma célula.\",\n \"rules\": [\n \"columns[].renderer.compose.items deve ser uma lista de renderers válidos.\",\n \"Defina layout (direction, gap, align) para evitar overflow.\",\n \"Evite mixar elementos interativos sem espaço suficiente.\"\n ],\n \"examples\": [\n \"{ renderer: { type: \\\"compose\\\", compose: { items: [{ type: \\\"icon\\\", icon: { name: \\\"check\\\" } }, { type: \\\"text\\\", textField: \\\"status\\\" }], layout: { direction: \\\"row\\\", gap: 8 } } } }\"\n ],\n \"antiPatterns\": [\n \"{ renderer: { type: \\\"compose\\\", compose: { items: [] } } }\"\n ]\n },\n \"conditional-json-logic\": {\n \"id\": \"conditional-json-logic\",\n \"title\": \"Expressoes Condicionais\",\n \"description\": \"Sintaxe de condições para conditionalRenderers e filtros de estilo.\",\n \"rules\": [\n \"Use nomes de fields diretamente (ex: status == \\\"Ativo\\\").\",\n \"Operadores suportados: ==, !=, >, <, >=, <=, and, or, not.\",\n \"Funções comuns: contains(field, \\\"texto\\\").\",\n \"Pode referenciar computed.<field> quando existir.\",\n \"NÃO use JavaScript (row., this., Math., ternário, eval).\"\n ],\n \"syntax\": \"{\\\"and\\\":[{\\\"contains\\\":[{\\\"var\\\":\\\"status\\\"},\\\"Ativo\\\"]},{\\\">=\\\":[{\\\"var\\\":\\\"price\\\"},100]}]}\",\n \"examples\": [\n \"{\\\"===\\\":[{\\\"var\\\":\\\"status\\\"},\\\"Ativo\\\"]}\",\n \"contains(name, \\\"Silva\\\")\",\n \"{\\\">\\\":[{\\\"var\\\":\\\"computed.total\\\"},1000]}\"\n ],\n \"antiPatterns\": [\n \"row.status == \\\"Ativo\\\"\",\n \"Math.max(price, 0) > 10\",\n \"status ? \\\"A\\\" : \\\"B\\\"\"\n ]\n },\n \"conditional-renderers\": {\n \"id\": \"conditional-renderers\",\n \"title\": \"Renderers Condicionais\",\n \"description\": \"Configura conditionalRenderers por coluna.\",\n \"rules\": [\n \"condition usa expressao condicional canonica em JSON Logic.\",\n \"renderer interno segue as mesmas regras dos renderers padrão.\",\n \"Para animar apenas uma célula/coluna quando a condição for verdadeira, use columns[].conditionalRenderers[].animation.\",\n \"enabled controla ativacao da regra.\"\n ],\n \"examples\": [\n \"{ conditionalRenderers: [{ condition: { \\\"===\\\": [{ \\\"var\\\": \\\"status\\\" }, \\\"Ativo\\\"] }, renderer: { type: \\\"badge\\\", badge: { text: \\\"Ativo\\\" } } }] }\",\n \"{ conditionalRenderers: [{ condition: { \\\">\\\": [{ \\\"var\\\": \\\"salario\\\" }, 30000] }, animation: { preset: \\\"pulse-soft\\\", trigger: \\\"onAppear\\\", intensity: \\\"subtle\\\", repeat: \\\"once\\\" } }] }\"\n ],\n \"antiPatterns\": [\n \"{ conditionalRenderers: [{ condition: \\\"row.status == \\\"Ativo\\\"\\\" }] }\",\n \"{ conditionalStyles: [{ style: { animation: \\\"pulse 1s infinite\\\" } }] }\"\n ]\n },\n \"conditional-animations\": {\n \"id\": \"conditional-animations\",\n \"title\": \"Animações Condicionais\",\n \"description\": \"Animações condicionais de linha e célula na tabela.\",\n \"rules\": [\n \"Use rowConditionalRenderers[].animation para animar a linha inteira.\",\n \"Use columns[].conditionalRenderers[].animation para animar somente o conteúdo de uma célula/coluna.\",\n \"Prefira preset semântico antes de type bruto: info-soft, success-confirm, warning-attention, critical-alert, audit-review, sync-pending, pulse-soft, fade-soft, sla-warning, sla-breach, risk-elevated, risk-critical, audit-warning ou sync-warning.\",\n \"condition sempre usa JSON Logic; não use JS, row.status ou strings de expressão.\",\n \"appearance.animations.enabled=false desativa animações; appearance.animations.specific.row/cell=false desativa o escopo correspondente.\",\n \"onConditionEnter, onConditionExit e onDataRefresh são aceitos no contrato de autoria e normalizados para gatilho de mudança no runtime.\"\n ],\n \"examples\": [\n \"{ rowConditionalRenderers: [{ id: \\\"salary-high-pulse\\\", condition: { \\\">\\\": [{ \\\"var\\\": \\\"salario\\\" }, 30000] }, animation: { preset: \\\"pulse-soft\\\", trigger: \\\"onAppear\\\", intensity: \\\"subtle\\\", repeat: \\\"once\\\", durationMs: 1200 }, enabled: true }] }\",\n \"{ columns: [{ field: \\\"status\\\", conditionalRenderers: [{ id: \\\"status-critical-alert\\\", condition: { \\\"===\\\": [{ \\\"var\\\": \\\"status\\\" }, \\\"Critico\\\"] }, animation: { preset: \\\"critical-alert\\\", trigger: \\\"onChange\\\", repeat: \\\"loop\\\", intensity: \\\"strong\\\" }, enabled: true }] }] }\"\n ],\n \"antiPatterns\": [\n \"{ rowConditionalStyles: [{ style: { animation: \\\"pulse 1s infinite\\\" } }] }\",\n \"{ rowConditionalRenderers: [{ condition: \\\"row.salario > 30000\\\", animation: { name: \\\"pulse\\\" } }] }\",\n \"{ columns: [{ conditionalStyles: [{ condition: { \\\">\\\": [{ \\\"var\\\": \\\"salario\\\" }, 30000] }, style: { animationName: \\\"pulse\\\" } }] }] }\"\n ]\n },\n \"conditional-styles\": {\n \"id\": \"conditional-styles\",\n \"title\": \"Estilos Condicionais por Coluna\",\n \"description\": \"Configura conditionalStyles.*\",\n \"rules\": [\n \"condition usa expressao condicional canonica em JSON Logic.\",\n \"cssClass define classe e style aplica inline.\",\n \"description deve ser texto curto.\"\n ],\n \"examples\": [\n \"{ conditionalStyles: [{ condition: { \\\"<\\\": [{ \\\"var\\\": \\\"amount\\\" }, 0] }, cssClass: \\\"col-negative\\\" }] }\"\n ],\n \"antiPatterns\": [\n \"{ conditionalStyles: [{ condition: \\\"row.amount < 0\\\" }] }\"\n ]\n },\n \"row-conditional-styles\": {\n \"id\": \"row-conditional-styles\",\n \"title\": \"Estilos Condicionais de Linha\",\n \"description\": \"Configura rowConditionalStyles.*\",\n \"rules\": [\n \"condition usa expressao condicional canonica em JSON Logic.\",\n \"cssClass define classe e style aplica inline.\",\n \"description deve ser texto curto.\"\n ],\n \"examples\": [\n \"{ rowConditionalStyles: [{ condition: { \\\"<\\\": [{ \\\"var\\\": \\\"amount\\\" }, 0] }, cssClass: \\\"row-negative\\\" }] }\"\n ],\n \"antiPatterns\": [\n \"{ rowConditionalStyles: [{ condition: \\\"row.amount < 0\\\" }] }\"\n ]\n },\n \"behavior-pagination\": {\n \"id\": \"behavior-pagination\",\n \"title\": \"Paginação (Behavior)\",\n \"description\": \"Configuração de behavior.pagination.*\",\n \"rules\": [\n \"strategy deve ser client ou server.\",\n \"pageSizeOptions deve incluir pageSize.\",\n \"advanced.maxPageSize limita pageSize customizado.\"\n ],\n \"examples\": [\n \"{ behavior: { pagination: { enabled: true, strategy: \\\"server\\\", pageSize: 25, pageSizeOptions: [10, 25, 50] } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { pagination: { strategy: \\\"server\\\" } } } sem totalItems\"\n ]\n },\n \"behavior-sorting\": {\n \"id\": \"behavior-sorting\",\n \"title\": \"Ordenação (Behavior)\",\n \"description\": \"Configuração de behavior.sorting.*\",\n \"rules\": [\n \"defaultSort pode ser objeto unico ou lista.\",\n \"multiSort true permite multiplos campos.\",\n \"allowClearSort habilita terceiro clique.\"\n ],\n \"examples\": [\n \"{ behavior: { sorting: { enabled: true, strategy: \\\"client\\\", defaultSort: { column: \\\"createdAt\\\", direction: \\\"desc\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { sorting: { defaultSort: { column: \\\"\\\", direction: \\\"asc\\\" } } } }\"\n ]\n },\n \"behavior-filtering\": {\n \"id\": \"behavior-filtering\",\n \"title\": \"Filtros (Behavior)\",\n \"description\": \"Configuração de behavior.filtering.*\",\n \"rules\": [\n \"columnFilters.position deve ser header/subheader/sidebar.\",\n \"advancedFilters.settings controla o painel avançado.\",\n \"strategy deve refletir suporte do backend.\"\n ],\n \"examples\": [\n \"{ behavior: { filtering: { enabled: true, columnFilters: { enabled: true, position: \\\"header\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { filtering: { enabled: true } } } sem strategy\"\n ]\n },\n \"behavior-selection\": {\n \"id\": \"behavior-selection\",\n \"title\": \"Selecao (Behavior)\",\n \"description\": \"Configuração de behavior.selection.*\",\n \"rules\": [\n \"type define single/multiple e mode define checkbox/row/both.\",\n \"persistSelection mantem selecao entre paginas.\",\n \"visual.highlightSelected define destaque da linha.\"\n ],\n \"examples\": [\n \"{ behavior: { selection: { enabled: true, type: \\\"multiple\\\", mode: \\\"checkbox\\\", persistSelection: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { selection: { type: \\\"multi\\\" } } }\"\n ]\n },\n \"behavior-interaction\": {\n \"id\": \"behavior-interaction\",\n \"title\": \"Interacao (Behavior)\",\n \"description\": \"Configuração de behavior.interaction.*\",\n \"rules\": [\n \"rowClick/rowDoubleClick.action devem ser ids conhecidos.\",\n \"customAction deve referenciar handler registrado.\",\n \"keyboard.customShortcuts mapeia teclas para ações.\"\n ],\n \"examples\": [\n \"{ behavior: { interaction: { rowClick: { enabled: true, action: \\\"view\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { interaction: { rowClick: { customAction: \\\"row => fn(row)\\\" } } } }\"\n ]\n },\n \"behavior-loading\": {\n \"id\": \"behavior-loading\",\n \"title\": \"Loading (Behavior)\",\n \"description\": \"Configuração de behavior.loading.*\",\n \"rules\": [\n \"type deve ser spinner/skeleton/progress/custom.\",\n \"delay evita flicker.\",\n \"skeleton.rows deve ser numero positivo.\"\n ],\n \"examples\": [\n \"{ behavior: { loading: { type: \\\"skeleton\\\", position: \\\"replace\\\", delay: 200, skeleton: { rows: 6, animated: true } } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { loading: { delay: 0 } } }\"\n ]\n },\n \"behavior-empty-state\": {\n \"id\": \"behavior-empty-state\",\n \"title\": \"Estado Vazio (Behavior)\",\n \"description\": \"Configuração de behavior.emptyState.*\",\n \"rules\": [\n \"message deve ser texto curto.\",\n \"actions[].action deve ser string de acao.\",\n \"contexts permite variações por cenário.\"\n ],\n \"examples\": [\n \"{ behavior: { emptyState: { message: \\\"Sem dados\\\", actions: [{ label: \\\"Adicionar\\\", action: \\\"create\\\" }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { emptyState: { message: \\\"\\\" } } }\"\n ]\n },\n \"behavior-virtualization\": {\n \"id\": \"behavior-virtualization\",\n \"title\": \"Virtualizacao (Behavior)\",\n \"description\": \"Configuração de behavior.virtualization.*\",\n \"rules\": [\n \"itemHeight deve ser informado quando enabled.\",\n \"strategy deve ser fixed ou dynamic.\"\n ],\n \"examples\": [\n \"{ behavior: { virtualization: { enabled: true, itemHeight: 48, strategy: \\\"fixed\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { virtualization: { enabled: true } } }\"\n ]\n },\n \"behavior-resizing\": {\n \"id\": \"behavior-resizing\",\n \"title\": \"Resize (Behavior)\",\n \"description\": \"Configuração de behavior.resizing.*\",\n \"rules\": [\n \"minColumnWidth deve ser positivo.\",\n \"persistWidths salva ajustes do usuario.\"\n ],\n \"examples\": [\n \"{ behavior: { resizing: { enabled: true, minColumnWidth: 80, autoFit: false, persistWidths: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { resizing: { minColumnWidth: 0 } } }\"\n ]\n },\n \"behavior-dragging\": {\n \"id\": \"behavior-dragging\",\n \"title\": \"Drag & Drop (Behavior)\",\n \"description\": \"Configuração de behavior.dragging.*\",\n \"rules\": [\n \"columns/rows controla reordenacao.\",\n \"columnDropZones deve listar zonas validas.\"\n ],\n \"examples\": [\n \"{ behavior: { dragging: { columns: true, rows: false, showDragIndicator: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { dragging: { columns: \\\"yes\\\" } } }\"\n ]\n },\n \"behavior-expansion\": {\n \"id\": \"behavior-expansion\",\n \"title\": \"Expansion (Behavior)\",\n \"description\": \"Configuração de behavior.expansion.* para detail rows schema-driven.\",\n \"rules\": [\n \"detail é sempre schema-driven; varie source.mode (inline/resource/resourcePath), não detail.type.\",\n \"detail.schemaContract.kind/version deve ser informado para validação e migração.\",\n \"Em virtualização, prefira detail.height.mode=fixed com virtualization.policy=fixed-height-only.\",\n \"Use eventExposureDefault hashed/redacted por padrão em ambiente corporativo.\"\n ],\n \"examples\": [\n \"{ behavior: { expansion: { enabled: true, state: { mode: \\\"controlled\\\" }, detail: { schemaContract: { kind: \\\"praxis.detail.schema\\\", version: \\\"1.0.0\\\" }, source: { mode: \\\"resource\\\", resource: { kind: \\\"ui-composition\\\", id: \\\"customer-detail-v2\\\", version: \\\"2.1.0\\\" } }, rendering: { strategy: \\\"registry\\\", registryId: \\\"praxis.detail.default\\\" } } } } }\"\n ],\n \"antiPatterns\": [\n \"{ behavior: { expansion: { detail: { type: \\\"template\\\", templateId: \\\"legacy-id\\\" } } } }\"\n ]\n },\n \"appearance\": {\n \"id\": \"appearance\",\n \"title\": \"Aparência e Layout\",\n \"description\": \"Densidade, bordas, cores, tipografia, espaçamento e responsividade.\",\n \"rules\": [\n \"appearance.density deve usar valores compact/comfortable/spacious.\",\n \"Cores devem usar tokens do tema ou hex válido.\",\n \"responsive.mobile.cardMode deve ser combinado com colunas prioritárias.\",\n \"Se animations.enabled for true, respeite reduceMotion.\",\n \"appearance.animations.specific.row e appearance.animations.specific.cell controlam animações condicionais por escopo.\"\n ],\n \"examples\": [\n \"{ appearance: { density: \\\"compact\\\", borders: { showRowBorders: true } } }\",\n \"{ appearance: { typography: { fontSize: \\\"14px\\\" }, spacing: { cellPadding: \\\"8px 16px\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ appearance: { density: \\\"tiny\\\" } }\"\n ]\n },\n \"appearance-details\": {\n \"id\": \"appearance-details\",\n \"title\": \"Detalhes de Aparência\",\n \"description\": \"Bordas, cores, tipografia, spacing, elevation e responsive autoAdjust.\",\n \"rules\": [\n \"borders.style deve ser solid/dashed/dotted quando aplicável.\",\n \"typography.headerFontWeight deve ser string numerica ou token.\",\n \"responsive.autoAdjust controla ajustes automáticos em telas menores.\"\n ],\n \"examples\": [\n \"{ appearance: { borders: { showOuterBorder: true, style: \\\"solid\\\" }, colors: { alternateRowBackground: \\\"#f7f9fc\\\" } } }\",\n \"{ appearance: { responsive: { mobile: { cardMode: true, priorityColumns: [\\\"name\\\", \\\"status\\\"] } } } }\"\n ],\n \"antiPatterns\": [\n \"{ appearance: { borders: { style: \\\"double\\\" } } }\"\n ]\n },\n \"toolbar\": {\n \"id\": \"toolbar\",\n \"title\": \"Toolbar\",\n \"description\": \"Configurações gerais da toolbar.\",\n \"rules\": [\n \"toolbar.visible controla exibição global da barra.\",\n \"Use toolbar.layout.alignment para ajustar distribuição.\",\n \"toolbar.filters.enabled depende de filtering.enabled.\",\n \"settingsMenu.enabled expõe opções de densidade e colunas.\"\n ],\n \"examples\": [\n \"{ toolbar: { visible: true, position: \\\"top\\\", title: \\\"Pedidos\\\" } }\"\n ],\n \"antiPatterns\": [\n \"{ toolbar: { position: \\\"left\\\" } }\"\n ]\n },\n \"toolbar-layout\": {\n \"id\": \"toolbar-layout\",\n \"title\": \"Layout da Toolbar\",\n \"description\": \"Configuração de toolbar.layout.*\",\n \"rules\": [\n \"alignment deve ser start/center/end/space-between.\",\n \"height e padding devem ser coerentes com o tema.\"\n ],\n \"examples\": [\n \"{ toolbar: { layout: { alignment: \\\"space-between\\\", height: 56, showSeparator: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ toolbar: { layout: { alignment: \\\"between\\\" } } }\"\n ]\n },\n \"toolbar-actions\": {\n \"id\": \"toolbar-actions\",\n \"title\": \"Ações da Toolbar\",\n \"description\": \"Definições de toolbar.actions[].\",\n \"rules\": [\n \"toolbar.actions[].id deve ser único.\",\n \"action deve ser string, não função JS.\",\n \"type deve ser button/icon/fab/menu.\",\n \"visibleWhen usa expressao condicional canonica em JSON Logic.\"\n ],\n \"examples\": [\n \"{ toolbar: { actions: [{ id: \\\"add\\\", label: \\\"Adicionar\\\", type: \\\"button\\\", action: \\\"create\\\", position: \\\"end\\\" }] } }\",\n \"{ toolbar: { actions: [{ id: \\\"more\\\", label: \\\"Mais\\\", type: \\\"menu\\\", action: \\\"noop\\\", children: [{ id: \\\"export\\\", label: \\\"Exportar\\\", type: \\\"button\\\", action: \\\"export\\\" }] }] } }\"\n ],\n \"antiPatterns\": [\n \"{ actions: [{ action: \\\"() => doSomething()\\\" }] }\"\n ]\n },\n \"toolbar-filters\": {\n \"id\": \"toolbar-filters\",\n \"title\": \"Filtros da Toolbar\",\n \"description\": \"Configuração de toolbar.filters.* e quickFilters.\",\n \"rules\": [\n \"quickFilters[].filter deve seguir a estrutura do filtro suportado.\",\n \"enabled depende de behavior.filtering.enabled.\"\n ],\n \"examples\": [\n \"{ toolbar: { filters: { enabled: true, quickFilters: [{ id: \\\"active\\\", label: \\\"Ativos\\\", filter: { status: \\\"active\\\" } }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ toolbar: { filters: { quickFilters: [{ filter: \\\"status=active\\\" }] } } }\"\n ]\n },\n \"toolbar-settings\": {\n \"id\": \"toolbar-settings\",\n \"title\": \"Menu de Configuracoes\",\n \"description\": \"Configuração de toolbar.settingsMenu.*\",\n \"rules\": [\n \"settingsMenu.options[].type deve ser toggle/select/action.\",\n \"options deve listar valores validos quando type for select.\"\n ],\n \"examples\": [\n \"{ toolbar: { settingsMenu: { enabled: true, options: [{ id: \\\"density\\\", label: \\\"Densidade\\\", type: \\\"select\\\", options: [\\\"compact\\\", \\\"comfortable\\\", \\\"spacious\\\"] }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ settingsMenu: { options: [{ type: \\\"dropdown\\\" }] } }\"\n ]\n },\n \"row-actions\": {\n \"id\": \"row-actions\",\n \"title\": \"Acoes por Linha\",\n \"description\": \"Configuração de actions.row.*\",\n \"rules\": [\n \"enabled deve estar true para mostrar coluna de ações.\",\n \"display deve ser menu/buttons/icons.\",\n \"trigger deve ser hover/always/click.\",\n \"actions[].action deve ser string.\"\n ],\n \"examples\": [\n \"{ actions: { row: { enabled: true, display: \\\"menu\\\", trigger: \\\"hover\\\", actions: [{ id: \\\"edit\\\", label: \\\"Editar\\\", action: \\\"edit\\\" }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ actions: { row: { display: \\\"dropdown\\\" } } }\"\n ]\n },\n \"row-actions-advanced\": {\n \"id\": \"row-actions-advanced\",\n \"title\": \"Acoes por Linha Avancadas\",\n \"description\": \"Header, overflow, menu e comportamento avançado.\",\n \"rules\": [\n \"header.align deve ser start/center/end.\",\n \"behavior.maxInline deve ser numero ou objeto de breakpoints.\",\n \"menuIcon e menuButtonColor devem ser valores suportados.\",\n \"discovery.enabled=false mantem apenas as actions configuradas e bloqueia a descoberta contextual por HATEOAS/capabilities.\"\n ],\n \"examples\": [\n \"{ actions: { row: { header: { label: \\\"Ações\\\", align: \\\"end\\\" }, maxVisibleActions: 3, behavior: { enabled: true, maxInline: 2 } } } }\",\n \"{ actions: { row: { enabled: true, display: \\\"buttons\\\", discovery: { enabled: false }, actions: [{ id: \\\"briefing\\\", label: \\\"Briefing\\\", action: \\\"inspect-surfaces\\\" }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ row: { header: { align: \\\"middle\\\" } } }\"\n ]\n },\n \"bulk-actions\": {\n \"id\": \"bulk-actions\",\n \"title\": \"Acoes em Lote\",\n \"description\": \"Configuração de actions.bulk.*\",\n \"rules\": [\n \"bulk.enabled exige selection.enabled.\",\n \"floating.position deve ser bottom-right/bottom-left/top-right/top-left.\",\n \"hideWhenEmpty evita botão flutuante quando nada selecionado.\"\n ],\n \"examples\": [\n \"{ actions: { bulk: { enabled: true, position: \\\"toolbar\\\", actions: [{ id: \\\"delete\\\", label: \\\"Excluir\\\", action: \\\"bulk-delete\\\", requiresConfirmation: true }], floating: { position: \\\"bottom-right\\\", hideWhenEmpty: true } } } }\"\n ],\n \"antiPatterns\": [\n \"{ actions: { bulk: { enabled: true } } } sem selection.enabled\"\n ]\n },\n \"context-actions\": {\n \"id\": \"context-actions\",\n \"title\": \"Menu de Contexto\",\n \"description\": \"Configuração de actions.context.*\",\n \"rules\": [\n \"trigger deve ser right-click/long-press/both.\",\n \"actions[].action deve ser string.\"\n ],\n \"examples\": [\n \"{ actions: { context: { enabled: true, trigger: \\\"right-click\\\", actions: [{ id: \\\"copy\\\", label: \\\"Copiar\\\", action: \\\"copy\\\" }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ context: { trigger: \\\"click\\\" } }\"\n ]\n },\n \"actions-confirmations\": {\n \"id\": \"actions-confirmations\",\n \"title\": \"Confirmacoes de Acoes\",\n \"description\": \"Configuração de actions.confirmations.*\",\n \"rules\": [\n \"default deve conter title, message, confirmText e cancelText.\",\n \"specific usa actionId como chave.\"\n ],\n \"examples\": [\n \"{ actions: { confirmations: { default: { title: \\\"Confirmar\\\", message: \\\"Deseja continuar?\\\", confirmText: \\\"Sim\\\", cancelText: \\\"Nao\\\" }, specific: { \\\"delete\\\": { message: \\\"Excluir item?\\\" } } } } }\"\n ],\n \"antiPatterns\": [\n \"{ actions: { confirmations: { default: { title: \\\"\\\" } } } }\"\n ]\n },\n \"export-general\": {\n \"id\": \"export-general\",\n \"title\": \"Exportacao Geral\",\n \"description\": \"Configuração de export.general.*\",\n \"rules\": [\n \"includeHeaders deve ser boolean.\",\n \"scope deve ser auto, selected, filtered, currentPage ou all.\",\n \"maxRows deve limitar volume.\",\n \"includeColumns deve ser all/visible ou lista de fields.\"\n ],\n \"examples\": [\n \"{ export: { enabled: true, formats: [\\\"csv\\\"], general: { includeHeaders: true, scope: \\\"auto\\\", maxRows: 5000, includeColumns: \\\"visible\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ export: { general: { maxRows: 0 } } }\"\n ]\n },\n \"export-excel\": {\n \"id\": \"export-excel\",\n \"title\": \"Exportacao Excel\",\n \"description\": \"Configuração de export.excel.*\",\n \"rules\": [\n \"sheetName deve ser curto e sem caracteres invalidos.\",\n \"autoFitColumns melhora legibilidade.\",\n \"styling.headerStyle e cellStyle devem ser simples.\"\n ],\n \"examples\": [\n \"{ export: { excel: { sheetName: \\\"Dados\\\", autoFitColumns: true, freezeHeaders: true, styling: { headerStyle: { fontWeight: \\\"bold\\\" } } } } }\"\n ],\n \"antiPatterns\": [\n \"{ excel: { sheetName: \\\"\\\" } }\"\n ]\n },\n \"export-pdf\": {\n \"id\": \"export-pdf\",\n \"title\": \"Exportacao PDF\",\n \"description\": \"Configuração de export.pdf.*\",\n \"rules\": [\n \"orientation deve ser portrait/landscape.\",\n \"pageSize deve ser A4/A3/Letter/Legal.\",\n \"margins devem conter top/right/bottom/left.\"\n ],\n \"examples\": [\n \"{ export: { pdf: { orientation: \\\"landscape\\\", pageSize: \\\"A4\\\", margins: { top: 10, right: 10, bottom: 10, left: 10 }, autoPageBreak: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ pdf: { pageSize: \\\"A5\\\" } }\"\n ]\n },\n \"export-csv\": {\n \"id\": \"export-csv\",\n \"title\": \"Exportacao CSV\",\n \"description\": \"Configuração de export.csv.*\",\n \"rules\": [\n \"delimiter deve ser \\\",\\\", \\\";\\\", \\\"|\\\" ou \\\"\\\\t\\\".\",\n \"encoding deve ser utf-8/utf-16/iso-8859-1.\",\n \"escapeChar deve ser um caractere.\"\n ],\n \"examples\": [\n \"{ export: { csv: { delimiter: \\\";\\\", encoding: \\\"utf-8\\\", escapeChar: \\\"\\\\\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ csv: { delimiter: \\\":\\\" } }\"\n ]\n },\n \"export-json\": {\n \"id\": \"export-json\",\n \"title\": \"Exportacao JSON\",\n \"description\": \"Configuração de export.json.*\",\n \"rules\": [\n \"format deve ser pretty ou compact.\",\n \"structure deve ser array ou object.\"\n ],\n \"examples\": [\n \"{ export: { json: { format: \\\"pretty\\\", includeMetadata: true, structure: \\\"array\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ json: { format: \\\"full\\\" } }\"\n ]\n },\n \"export-templates\": {\n \"id\": \"export-templates\",\n \"title\": \"Templates de Exportacao\",\n \"description\": \"Configuração de export.templates[]\",\n \"rules\": [\n \"templates devem ter id, name e format válidos.\",\n \"config deve seguir o formato correspondente.\"\n ],\n \"examples\": [\n \"{ export: { templates: [{ id: \\\"resumo\\\", name: \\\"Resumo\\\", format: \\\"pdf\\\", config: {}, isDefault: false }] } }\"\n ],\n \"antiPatterns\": [\n \"{ templates: [{ id: \\\"\\\", format: \\\"xls\\\" }] }\"\n ]\n },\n \"messages\": {\n \"id\": \"messages\",\n \"title\": \"Mensagens\",\n \"description\": \"Mensagens de estados, ações, validação e exportação.\",\n \"rules\": [\n \"Mensagens devem ser curtas e claras.\",\n \"Não defina funções inline (use templates ou strings simples).\"\n ],\n \"examples\": [\n \"{ messages: { states: { empty: \\\"Sem registros.\\\" }, actions: { confirmations: { delete: \\\"Excluir?\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ messages: { states: { loadingWithCount: \\\"(n) => ...\\\" } } }\"\n ]\n },\n \"messages-advanced\": {\n \"id\": \"messages-advanced\",\n \"title\": \"Mensagens Avancadas\",\n \"description\": \"custom, templates e formatos por tipo.\",\n \"rules\": [\n \"templates[].template deve usar placeholders simples.\",\n \"custom é um mapa chave -> mensagem.\",\n \"formats deve seguir excel/pdf/csv/json.\"\n ],\n \"examples\": [\n \"{ messages: { export: { formats: { excel: \\\"Excel pronto\\\" } }, templates: [{ id: \\\"t1\\\", template: \\\"Exportado {count} itens\\\" }] } }\"\n ],\n \"antiPatterns\": [\n \"{ messages: { templates: [{ id: \\\"t1\\\" }] } }\"\n ]\n },\n \"localization-date-time\": {\n \"id\": \"localization-date-time\",\n \"title\": \"Localizacao de Datas\",\n \"description\": \"Configuração de localization.dateTime.*\",\n \"rules\": [\n \"dateFormat/timeFormat devem seguir DatePipe.\",\n \"firstDayOfWeek deve ser 0-6.\",\n \"monthNames e dayNames devem ter 12 e 7 entradas.\"\n ],\n \"examples\": [\n \"{ localization: { dateTime: { dateFormat: \\\"dd/MM/yyyy\\\", timeFormat: \\\"HH:mm\\\", firstDayOfWeek: 0 } } }\"\n ],\n \"antiPatterns\": [\n \"{ localization: { dateTime: { firstDayOfWeek: 7 } } }\"\n ]\n },\n \"localization-number-currency\": {\n \"id\": \"localization-number-currency\",\n \"title\": \"Localizacao de Numeros e Moeda\",\n \"description\": \"Configuração de localization.number.* e localization.currency.*\",\n \"rules\": [\n \"decimalSeparator e thousandsSeparator devem ser 1 caractere.\",\n \"negativeSignPosition deve ser before/after.\",\n \"currency.code deve ser ISO 4217.\"\n ],\n \"examples\": [\n \"{ localization: { number: { decimalSeparator: \\\",\\\", thousandsSeparator: \\\".\\\", negativeSign: \\\"-\\\", negativeSignPosition: \\\"before\\\" }, currency: { code: \\\"BRL\\\", symbol: \\\"R$\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ localization: { currency: { code: \\\"REAL\\\" } } }\"\n ]\n },\n \"localization-formatting\": {\n \"id\": \"localization-formatting\",\n \"title\": \"Formatos Locais\",\n \"description\": \"Configuração de localization.formatting.*\",\n \"rules\": [\n \"percentageFormat e fileSizeFormat devem seguir padrao esperado.\",\n \"units deve mapear tipo -> unidade -> label.\"\n ],\n \"examples\": [\n \"{ localization: { formatting: { percentageFormat: \\\"#0.00%\\\", fileSizeFormat: \\\"decimal\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ localization: { formatting: { percentageFormat: \\\"percent\\\" } } }\"\n ]\n },\n \"localization-translations\": {\n \"id\": \"localization-translations\",\n \"title\": \"Traducoes\",\n \"description\": \"Configuração de localization.availableLocales e translations.*\",\n \"rules\": [\n \"availableLocales deve listar locales conhecidos.\",\n \"translations deve mapear locale -> chaves de texto.\"\n ],\n \"examples\": [\n \"{ localization: { availableLocales: [\\\"pt-BR\\\", \\\"en-US\\\"], translations: { \\\"pt-BR\\\": { \\\"table.title\\\": \\\"Pedidos\\\" } } } }\"\n ],\n \"antiPatterns\": [\n \"{ translations: \\\"pt-BR\\\" }\"\n ]\n },\n \"data-cache\": {\n \"id\": \"data-cache\",\n \"title\": \"Cache de Dados\",\n \"description\": \"Configuração de data.cache.*\",\n \"rules\": [\n \"ttl e maxSize devem ser positivos.\",\n \"invalidationStrategy deve ser ttl/manual/on-update.\"\n ],\n \"examples\": [\n \"{ data: { cache: { enabled: true, ttl: 600000, maxSize: 1000, invalidationStrategy: \\\"ttl\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ cache: { ttl: 0 } }\"\n ]\n },\n \"data-sync\": {\n \"id\": \"data-sync\",\n \"title\": \"Sincronizacao\",\n \"description\": \"Configuração de data.sync.*\",\n \"rules\": [\n \"interval deve ser em ms.\",\n \"deltaSync e autoSync devem ser boolean.\",\n \"conflictResolution deve ser client/server/manual.\"\n ],\n \"examples\": [\n \"{ data: { sync: { autoSync: true, interval: 30000, deltaSync: true, conflictResolution: \\\"server\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ sync: { interval: -1 } }\"\n ]\n },\n \"data-validation\": {\n \"id\": \"data-validation\",\n \"title\": \"Validacao de Dados\",\n \"description\": \"Configuração de data.validation.* e rules[]\",\n \"rules\": [\n \"rules[].type deve ser required/format/range/custom.\",\n \"params deve conter dados compatíveis com o tipo.\",\n \"showInlineErrors deve ser boolean.\"\n ],\n \"examples\": [\n \"{ data: { validation: { clientSide: true, serverSide: false, showInlineErrors: true, rules: [{ field: \\\"email\\\", type: \\\"format\\\", params: { format: \\\"email\\\" }, message: \\\"Email invalido\\\" }] } } }\"\n ],\n \"antiPatterns\": [\n \"{ validation: { rules: [{ type: \\\"regex\\\" }] } }\"\n ]\n },\n \"data-transformations\": {\n \"id\": \"data-transformations\",\n \"title\": \"Transformacoes de Dados\",\n \"description\": \"Configuração de data.transformations[]\",\n \"rules\": [\n \"transform deve ser uma string suportada pelo sistema, não funcao JS.\",\n \"applyTo deve ser display/data/both.\"\n ],\n \"examples\": [\n \"{ data: { transformations: [{ id: \\\"t1\\\", field: \\\"amount\\\", type: \\\"format\\\", transform: \\\"currency\\\", applyTo: \\\"display\\\" }] } }\"\n ],\n \"antiPatterns\": [\n \"{ transformations: [{ transform: \\\"row => row.amount\\\" }] }\"\n ]\n },\n \"data-polling\": {\n \"id\": \"data-polling\",\n \"title\": \"Polling\",\n \"description\": \"Configuração de data.polling.*\",\n \"rules\": [\n \"interval deve ser em ms e razoavel.\",\n \"exponentialBackoff deve ser boolean.\"\n ],\n \"examples\": [\n \"{ data: { polling: { enabled: true, interval: 30000, onlyWhenActive: true, exponentialBackoff: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ polling: { interval: 100 } }\"\n ]\n },\n \"performance-virtualization\": {\n \"id\": \"performance-virtualization\",\n \"title\": \"Performance Virtualization\",\n \"description\": \"Configuração de performance.virtualization.*\",\n \"rules\": [\n \"itemHeight deve ser informado quando enabled.\",\n \"strategy deve ser fixed/dynamic.\"\n ],\n \"examples\": [\n \"{ performance: { virtualization: { enabled: true, itemHeight: 48 } } }\"\n ],\n \"antiPatterns\": [\n \"{ performance: { virtualization: { enabled: true } } }\"\n ]\n },\n \"performance-debounce\": {\n \"id\": \"performance-debounce\",\n \"title\": \"Performance Debounce\",\n \"description\": \"Configuração de performance.debounce.*\",\n \"rules\": [\n \"valores devem estar em ms (ex.: 200-500).\"\n ],\n \"examples\": [\n \"{ performance: { debounce: { search: 300, filter: 300, resize: 200, scroll: 200 } } }\"\n ],\n \"antiPatterns\": [\n \"{ debounce: { search: -1 } }\"\n ]\n },\n \"performance-memory\": {\n \"id\": \"performance-memory\",\n \"title\": \"Performance Memory\",\n \"description\": \"Configuração de performance.memory.*\",\n \"rules\": [\n \"maxRows deve limitar o volume em memoria.\",\n \"cleanupInterval deve ser em ms.\"\n ],\n \"examples\": [\n \"{ performance: { memory: { maxRows: 5000, autoCleanup: true, cleanupInterval: 60000 } } }\"\n ],\n \"antiPatterns\": [\n \"{ memory: { maxRows: 0 } }\"\n ]\n },\n \"performance-rendering\": {\n \"id\": \"performance-rendering\",\n \"title\": \"Performance Rendering\",\n \"description\": \"Configuração de performance.rendering.*\",\n \"rules\": [\n \"batchUpdates true requer batchSize coerente.\",\n \"optimizeReRenders melhora atualizações frequentes.\"\n ],\n \"examples\": [\n \"{ performance: { rendering: { useRAF: true, batchUpdates: true, batchSize: 50, optimizeReRenders: true } } }\"\n ],\n \"antiPatterns\": [\n \"{ rendering: { batchSize: 0 } }\"\n ]\n },\n \"performance-lazy-loading\": {\n \"id\": \"performance-lazy-loading\",\n \"title\": \"Performance Lazy Loading\",\n \"description\": \"Configuração de performance.lazyLoading.*\",\n \"rules\": [\n \"threshold deve ser numero positivo.\",\n \"components e images devem ser boolean.\"\n ],\n \"examples\": [\n \"{ performance: { lazyLoading: { images: true, components: true, threshold: 200 } } }\"\n ],\n \"antiPatterns\": [\n \"{ lazyLoading: { threshold: -1 } }\"\n ]\n },\n \"accessibility-core\": {\n \"id\": \"accessibility-core\",\n \"title\": \"Acessibilidade\",\n \"description\": \"Configuração base de accessibility.*\",\n \"rules\": [\n \"enabled deve ser true em apps com requisitos a11y.\",\n \"reduceMotion deve desativar animacoes nao essenciais.\"\n ],\n \"examples\": [\n \"{ accessibility: { enabled: true, reduceMotion: true } }\"\n ],\n \"antiPatterns\": [\n \"{ accessibility: { enabled: true, reduceMotion: \\\"yes\\\" } }\"\n ]\n },\n \"accessibility-announcements\": {\n \"id\": \"accessibility-announcements\",\n \"title\": \"Acessibilidade Anuncios\",\n \"description\": \"Configuração de accessibility.announcements.*\",\n \"rules\": [\n \"dataChanges, userActions e loadingStates devem ser boolean.\",\n \"liveRegion deve ser polite ou assertive.\"\n ],\n \"examples\": [\n \"{ accessibility: { announcements: { dataChanges: true, userActions: true, loadingStates: true, liveRegion: \\\"polite\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ announcements: { liveRegion: \\\"loud\\\" } }\"\n ]\n },\n \"accessibility-keyboard\": {\n \"id\": \"accessibility-keyboard\",\n \"title\": \"Acessibilidade Teclado\",\n \"description\": \"Configuração de accessibility.keyboard.*\",\n \"rules\": [\n \"tabNavigation e arrowNavigation devem ser boolean.\",\n \"shortcuts e skipLinks devem ser boolean.\",\n \"focusTrap deve ser boolean.\"\n ],\n \"examples\": [\n \"{ accessibility: { keyboard: { tabNavigation: true, arrowNavigation: true, shortcuts: true, skipLinks: true, focusTrap: false } } }\"\n ],\n \"antiPatterns\": [\n \"{ keyboard: { tabNavigation: \\\"yes\\\" } }\"\n ]\n },\n \"accessibility-aria-labels\": {\n \"id\": \"accessibility-aria-labels\",\n \"title\": \"Acessibilidade ARIA\",\n \"description\": \"Configuração de accessibility.ariaLabels.*\",\n \"rules\": [\n \"ariaLabels deve mapear chaves conhecidas para textos curtos.\"\n ],\n \"examples\": [\n \"{ accessibility: { ariaLabels: { table: \\\"Tabela de pedidos\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ ariaLabels: { table: \\\"\\\" } }\"\n ]\n },\n \"theme-core\": {\n \"id\": \"theme-core\",\n \"title\": \"Tema Base\",\n \"description\": \"Configuração de theme.primary/secondary/darkMode.\",\n \"rules\": [\n \"primary e secondary devem ser cores validas (hex ou token).\",\n \"darkMode deve ser boolean.\"\n ],\n \"examples\": [\n \"{ theme: { primary: \\\"#1976d2\\\", secondary: \\\"#ff9800\\\" } }\"\n ],\n \"antiPatterns\": [\n \"{ theme: { primary: \\\"blue\\\" } }\"\n ]\n },\n \"theme-custom\": {\n \"id\": \"theme-custom\",\n \"title\": \"Tema Customizado\",\n \"description\": \"Configuração de theme.custom e theme.cssVariables.\",\n \"rules\": [\n \"cssVariables deve usar nomes CSS validos (ex.: --table-bg).\",\n \"custom deve ser mapa simples de tokens.\"\n ],\n \"examples\": [\n \"{ theme: { custom: { headerBg: \\\"var(--md-sys-color-surface-container)\\\" }, cssVariables: { \\\"--table-bg\\\": \\\"var(--md-sys-color-surface)\\\" } } }\"\n ],\n \"antiPatterns\": [\n \"{ theme: { cssVariables: { \\\"table-bg\\\": \\\"var(--md-sys-color-surface)\\\" } } }\"\n ]\n },\n \"plugins\": {\n \"id\": \"plugins\",\n \"title\": \"Plugins\",\n \"description\": \"Configuração de plugins[].\",\n \"rules\": [\n \"plugins[].id, name e version sao obrigatorios.\",\n \"hooks deve mapear eventos para handlers conhecidos.\"\n ],\n \"examples\": [\n \"{ plugins: [{ id: \\\"audit\\\", name: \\\"Audit Logger\\\", version: \\\"1.2.0\\\", enabled: true }] }\"\n ],\n \"antiPatterns\": [\n \"{ plugins: [{ name: \\\"Audit\\\" }] }\"\n ]\n },\n \"editor-extras\": {\n \"id\": \"editor-extras\",\n \"title\": \"Extras do Editor\",\n \"description\": \"Envelope de autoria usado pelo editor e pelo playground.\",\n \"rules\": [\n \"bindings.resourcePath deve ser path valido da API quando presente.\",\n \"config.meta.idField deve refletir a chave primaria quando configurado.\",\n \"bindings.horizontalScroll deve ser auto/wrap/none.\"\n ],\n \"examples\": [\n \"{ kind: \\\"praxis.table.editor\\\", version: 1, config: { meta: { idField: \\\"employeeId\\\" }, columns: [] }, bindings: { resourcePath: \\\"/api/employees\\\", horizontalScroll: \\\"auto\\\" } }\"\n ],\n \"antiPatterns\": [\n \"{ kind: \\\"praxis.table.editor\\\", version: 1, config: { columns: [] }, bindings: { horizontalScroll: \\\"left\\\" } }\"\n ]\n }\n }\n}",
21114
21597
  "sourcePointer": "praxis-ui-angular/projects/praxis-table/src/lib/ai/table-context-pack.ts",
21115
- "contentHash": "ad879f341ab06786af4f58d4c856367d27eaa829e82bd27f214d53cb393924f6",
21598
+ "contentHash": "c00e02b2c8de4ec2736f14bcbc92f5d39ca49c7eff12f415939b778fff120b66",
21116
21599
  "sourceKind": "component_definition",
21117
21600
  "sourceId": "praxis-table",
21118
21601
  "corpusVersion": "1.0.0"