@praxisui/manual-form 9.0.0-beta.77 → 9.0.0-beta.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai/component-registry.json +152 -12
- package/package.json +6 -6
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-07-
|
|
3
|
+
"generatedAt": "2026-07-19T03:55:15.480Z",
|
|
4
4
|
"packageName": "@praxisui/manual-form",
|
|
5
|
-
"packageVersion": "9.0.0-beta.
|
|
5
|
+
"packageVersion": "9.0.0-beta.78",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -4292,39 +4292,179 @@
|
|
|
4292
4292
|
{
|
|
4293
4293
|
"chunkIndex": 1,
|
|
4294
4294
|
"chunkKind": "capabilities",
|
|
4295
|
-
"content": "Component Capabilities:\n - Path: metadata.version\n Category: metadata\n Kind: string\n Description: Versao da configuracao do formulario.\n - Path: metadata.source\n Category: metadata\n Kind: enum\n Description: Origem da configuracao.\n - Path: metadata.title\n Category: metadata\n Kind: string\n Description: Titulo exibido no cabecalho quando formTitle nao for informado.\n - Path: metadata.description\n Category: metadata\n Kind: string\n Description: Descricao exibida no cabecalho quando formDescription nao for informado.\n - Path: metadata.lastUpdated\n Category: metadata\n Kind: string\n Description: Timestamp da ultima atualizacao.\n - Path: metadata.schemaId\n Category: metadata\n Kind: string\n Description: Identificador do schema usado na composicao.\n - Path: metadata.serverHash\n Category: metadata\n Kind: string\n Description: Hash do schema/servidor para reconciliacao.\n - Path: metadata.schemaContext\n Category: metadata\n Kind: object\n Description: Contexto do schema (path/operation/schemaType).\n - Path: metadata.schemaContext.path\n Category: metadata\n Kind: string\n Description: Path do schema usado para compor o formulario.\n - Path: metadata.schemaContext.operation\n Category: metadata\n Kind: string\n Description: Operacao 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: Marca schema como interno.\n - Path: metadata.schemaContext.tenant\n Category: metadata\n Kind: string\n Description: Tenant do schema.\n - Path: metadata.schemaContext.locale\n Category: metadata\n Kind: string\n Description: Locale do schema.\n - Path: metadata.customizations\n Category: metadata\n Kind: array\n Description: Log de customizacoes.\n - Path: metadata.customizations[]\n Category: metadata\n Kind: object\n Description: Registro de customizacao.\n - Path: metadata.customizations[].fieldName\n Category: metadata\n Kind: string\n Description: Campo customizado.\n - Path: metadata.customizations[].property\n Category: metadata\n Kind: string\n Description: Propriedade alterada.\n - Path: metadata.customizations[].oldValue\n Category: metadata\n Kind: object\n Description: Valor anterior.\n - Path: metadata.customizations[].newValue\n Category: metadata\n Kind: object\n Description: Novo valor.\n - Path: metadata.customizations[].timestamp\n Category: metadata\n Kind: string\n Description: Timestamp da alteracao (ISO).\n - Path: metadata.customizations[].source\n Category: metadata\n Kind: enum\n Description: Origem da alteracao.\n - Path: fieldMetadata\n Category: fields\n Kind: array\n Description: Metadados dos campos (FieldMetadata).\n - Path: fieldMetadata[]\n Category: fields\n Kind: object\n Description: Item de metadados do campo (FieldMetadata).\n - Path: sections[]\n Category: layout\n Kind: object\n Description: Secao do formulario.\n - Path: sections[].id\n Category: layout\n Kind: string\n Description: ID da secao.\n - Path: sections[].title\n Category: layout\n Kind: string\n Description: Titulo da secao.\n - Path: sections[].description\n Category: layout\n Kind: string\n Description: Descricao da secao.\n - Path: sections[].icon\n Category: layout\n Kind: string\n Description: Icone da secao.\n - Path: sections[].collapsible\n Category: layout\n Kind: boolean\n Description: Secao recolhivel.\n - Path: sections[].collapsed\n Category: layout\n Kind: boolean\n Description: Estado inicial recolhido.\n - Path: sections[].gapBottom\n Category: layout\n Kind: number\n Description: Espaco extra apos a secao (px).\n - Path: sections[].titleGapBottom\n Category: layout\n Kind: number\n Description: Espaco abaixo do titulo (px).\n - Path: sections[].descriptionGapBottom\n Category: layout\n Kind: number\n Description: Espaco abaixo da descricao (px).\n - Path: sections[].titleStyle\n Category: layout\n Kind: enum\n Description: Preset tipografico do titulo.\n - Path: sections[].descriptionStyle\n Category: layout\n Kind: enum\n Description: Preset tipografico da descricao.\n - Path: sections[].titleColor\n Category: layout\n Kind: string\n Description: Cor do titulo.\n - Path: sections[].descriptionColor\n Category: layout\n Kind: string\n Description: Cor da descricao.\n - Path: sections[].headerAlign\n Category: layout\n Kind: enum\n Description: Alinhamento do header.\n - Path: sections[].headerTooltip\n Category: layout\n Kind: string\n Description: Tooltip do header da secao.\n - Path: sections[].rows[]\n Category: layout\n Kind: object\n Description: Linha da secao.\n - Path: sections[].rows[].id\n Category: layout\n Kind: string\n Description: ID da linha.\n - Path: sections[].rows[].title\n Category: layout\n Kind: string\n Description: Titulo da linha.\n - Path: sections[].rows[].gap\n Category: layout\n Kind: number\n Description: Espaco horizontal entre colunas (px).\n - Path: sections[].rows[].rowGap\n Category: layout\n Kind: number\n Description: Espaco vertical apos a linha (px).\n - Path: sections[].rows[].columns[]\n Category: layout\n Kind: object\n Description: Coluna da linha.\n - Path: sections[].rows[].columns[].id\n Category: layout\n Kind: string\n Description: ID da coluna.\n - Path: sections[].rows[].columns[].title\n Category: layout\n Kind: string\n Description: Titulo da coluna.\n - Path: sections[].rows[].columns[].fields\n Category: layout\n Kind: array\n Description: Campos associados a coluna.\n - Path: sections[].rows[].columns[].fields[]\n Category: layout\n Kind: string\n Description: Nome do campo na coluna.\n - Path: sections[].rows[].columns[].span\n Category: layout\n Kind: object\n Description: Span responsivo.\n - Path: sections[].rows[].columns[].span.xs\n Category: layout\n Kind: number\n Description: Span xs (1-12).\n - Path: sections[].rows[].columns[].span.sm\n Category: layout\n Kind: number\n Description: Span sm (1-12).\n - Path: sections[].rows[].columns[].span.md\n Category: layout\n Kind: number\n Description: Span md (1-12).\n - Path: sections[].rows[].columns[].span.lg\n Category: layout\n Kind: number\n Description: Span lg (1-12).\n - Path: sections[].rows[].columns[].span.xl\n Category: layout\n Kind: number\n Description: Span xl (1-12).\n - Path: sections[].rows[].columns[].offset\n Category: layout\n Kind: object\n Description: Offset responsivo.\n - Path: sections[].rows[].columns[].offset.xs\n Category: layout\n Kind: number\n Description: Offset xs (1-12).\n - Path: sections[].rows[].columns[].offset.sm\n Category: layout\n Kind: number\n Description: Offset sm (1-12).\n - Path: sections[].rows[].columns[].offset.md\n Category: layout\n Kind: number\n Description: Offset md (1-12).\n - Path: sections[].rows[].columns[].offset.lg\n Category: layout\n Kind: number\n Description: Offset lg (1-12).\n - Path: sections[].rows[].columns[].offset.xl\n Category: layout\n Kind: number\n Description: Offset xl (1-12).\n - Path: sections[].rows[].columns[].order\n Category: layout\n Kind: object\n Description: Order responsivo.\n - Path: sections[].rows[].columns[].order.xs\n Category: layout\n Kind: number\n Description: Order xs.\n - Path: sections[].rows[].columns[].order.sm\n Category: layout\n Kind: number\n Description: Order sm.\n - Path: sections[].rows[].columns[].order.md\n Category: layout\n Kind: number\n Description: Order md.\n - Path: sections[].rows[].columns[].order.lg\n Category: layout\n Kind: number\n Description: Order lg.\n - Path: sections[].rows[].columns[].order.xl\n Category: layout\n Kind: number\n Description: Order xl.\n - Path: sections[].rows[].columns[].hidden\n Category: layout\n Kind: object\n Description: Hidden responsivo.\n - Path: sections[].rows[].columns[].hidden.xs\n Category: layout\n Kind: boolean\n Description: Ocultar no xs.\n - Path: sections[].rows[].columns[].hidden.sm\n Category: layout\n Kind: boolean\n Description: Ocultar no sm.\n - Path: sections[].rows[].columns[].hidden.md\n Category: layout\n Kind: boolean\n Description: Ocultar no md.\n - Path: sections[].rows[].columns[].hidden.lg\n Category: layout\n Kind: boolean\n Description: Ocultar no lg.\n - Path: sections[].rows[].columns[].hidden.xl\n Category: layout\n Kind: boolean\n Description: Ocultar no xl.\n - Path: sections[].rows[].columns[].align\n Category: layout\n Kind: enum\n Description: Alinhamento da coluna.\n - Path: sections[].rows[].columns[].padding\n Category: layout\n Kind: number\n Description: Padding da coluna (px).\n - Path: sections[].rows[].columns[].className\n Category: layout\n Kind: string\n Description: Classe CSS da coluna.\n - Path: sections[].rows[].columns[].testId\n Category: layout\n Kind: string\n Description: Test id da coluna.\n - Path: actions\n Category: actions\n Kind: object\n Description: Layout de acoes do formulario.\n - Path: actions.position\n Category: actions\n Kind: enum\n Description: Posicao das acoes.\n - Path: actions.orientation\n Category: actions\n Kind: enum\n Description: Orientacao das acoes.\n - Path: actions.spacing\n Category: actions\n Kind: enum\n Description: Espacamento das acoes.\n - Path: actions.sticky\n Category: actions\n Kind: boolean\n Description: Fixar barra de acoes.\n - Path: actions.divider\n Category: actions\n Kind: boolean\n Description: Exibir divisor acima das acoes.\n - Path: actions.placement\n Category: actions\n Kind: enum\n Description: Posicionamento estrutural das acoes.\n - Path: actions.containerClassName\n Category: actions\n Kind: string\n Description: Classe CSS do container de acoes.\n - Path: actions.containerStyles\n Category: actions\n Kind: object\n Description: Estilos inline do container.\n - Path: actions.mobile\n Category: actions\n Kind: object\n Description: Config para mobile.\n - Path: actions.mobile.position\n Category: actions\n Kind: enum\n Description: Posicao das acoes no mobile.\n - Path: actions.mobile.orientation\n Category: actions\n Kind: enum\n Description: Orientacao no mobile.\n - Path: actions.mobile.collapseToMenu\n Category: actions\n Kind: boolean\n Description: Colapsar acoes em menu.\n - Path: actions.showSaveButton\n Category: actions\n Kind: boolean\n Description: Legacy: mostrar botao salvar.\n - Path: actions.submitButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: texto do submit.\n - Path: actions.showCancelButton\n Category: actions\n Kind: boolean\n Description: Legacy: mostrar cancelar.\n - Path: actions.cancelButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: texto do cancelar.\n - Path: actions.showResetButton\n Category: actions\n Kind: boolean\n Description: Legacy: mostrar reset.\n - Path: actions.resetButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: texto do reset.\n - Path: actions.submit\n Category: actions\n Kind: object\n Description: Botao submit.\n - Path: actions.cancel\n Category: actions\n Kind: object\n Description: Botao cancelar.\n - Path: actions.reset\n Category: actions\n Kind: object\n Description: Botao reset.\n - Path: actions.custom\n Category: actions\n Kind: array\n Description: Botoes customizados.\n - Path: actions.custom[]\n Category: actions\n Kind: object\n Description: Configuracao de botao customizado.\n - Path: actions.submit.id\n Category: actions\n Kind: string\n Description: ID do botao.\n - Path: actions.submit.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade.\n - Path: actions.submit.label\n Category: actions\n Kind: string\n Description: Label do botao.\n - Path: actions.submit.icon\n Category: actions\n Kind: string\n Description: Icone do botao.\n - Path: actions.submit.className\n Category: actions\n Kind: string\n Description: Classe CSS.\n - Path: actions.submit.style\n Category: actions\n Kind: object\n Description: Estilo inline.\n - Path: actions.submit.color\n Category: actions\n Kind: enum\n Description: Cor do botao.\n - Path: actions.submit.disabled\n Category: actions\n Kind: boolean\n Description: Botao desabilitado.\n - Path: actions.submit.type\n Category: actions\n Kind: enum\n Description: Tipo do botao.\n - Path: actions.submit.action\n Category: actions\n Kind: string\n Description: Evento custom.\n - Path: actions.submit.tooltip\n Category: actions\n Kind: string\n Description: Tooltip.\n - Path: actions.submit.loading\n Category: actions\n Kind: boolean\n Description: Estado loading.\n - Path: actions.submit.size\n Category: actions\n Kind: enum\n Description: Tamanho do botao.\n - Path: actions.submit.variant\n Category: actions\n Kind: enum\n Description: Variante visual.\n - Path: actions.submit.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado.\n - Path: actions.cancel.id\n Category: actions\n Kind: string\n Description: ID do botao cancelar.\n - Path: actions.cancel.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botao cancelar.\n - Path: actions.cancel.label\n Category: actions\n Kind: string\n Description: Label do botao cancelar.\n - Path: actions.cancel.icon\n Category: actions\n Kind: string\n Description: Icone do botao cancelar.\n - Path: actions.cancel.className\n Category: actions\n Kind: string\n Description: Classe CSS do botao cancelar.\n - Path: actions.cancel.style\n Category: actions\n Kind: object\n Description: Estilo inline do botao cancelar.\n - Path: actions.cancel.color\n Category: actions\n Kind: enum\n Description: Cor do botao cancelar.\n - Path: actions.cancel.disabled\n Category: actions\n Kind: boolean\n Description: Estado desabilitado do botao cancelar.\n - Path: actions.cancel.type\n Category: actions\n Kind: enum\n Description: Tipo HTML do botao cancelar.\n - Path: actions.cancel.action\n Category: actions\n Kind: string\n Description: Acao customizada disparada pelo botao cancelar.\n - Path: actions.cancel.tooltip\n Category: actions\n Kind: string\n Description: Tooltip do botao cancelar.\n - Path: actions.cancel.loading\n Category: actions\n Kind: boolean\n Description: Estado de loading do botao cancelar.\n - Path: actions.cancel.size\n Category: actions\n Kind: enum\n Description: Tamanho visual do botao cancelar.\n - Path: actions.cancel.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botao cancelar.\n - Path: actions.cancel.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado do botao cancelar.\n - Path: actions.reset.id\n Category: actions\n Kind: string\n Description: ID do botao reset.\n - Path: actions.reset.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botao reset.\n - Path: actions.reset.label\n Category: actions\n Kind: string\n Description: Label do botao reset.\n - Path: actions.reset.icon\n Category: actions\n Kind: string\n Description: Icone do botao reset.\n - Path: actions.reset.className\n Category: actions\n Kind: string\n Description: Classe CSS do botao reset.\n - Path: actions.reset.style\n Category: actions\n Kind: object\n Description: Estilo inline do botao reset.\n - Path: actions.reset.color\n Category: actions\n Kind: enum\n Description: Cor do botao reset.\n - Path: actions.reset.disabled\n Category: actions\n Kind: boolean\n Description: Estado desabilitado do botao reset.\n - Path: actions.reset.type\n Category: actions\n Kind: enum\n Description: Tipo HTML do botao reset.\n - Path: actions.reset.action\n Category: actions\n Kind: string\n Description: Acao customizada disparada pelo botao reset.\n - Path: actions.reset.tooltip\n Category: actions\n Kind: string\n Description: Tooltip do botao reset.\n - Path: actions.reset.loading\n Category: actions\n Kind: boolean\n Description: Estado de loading do botao reset.\n - Path: actions.reset.size\n Category: actions\n Kind: enum\n Description: Tamanho visual do botao reset.\n - Path: actions.reset.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botao reset.\n - Path: actions.reset.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado do botao reset.\n - Path: actions.custom[].id\n Category: actions\n Kind: string\n Description: ID do botao customizado.\n - Path: actions.custom[].visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botao customizado.\n - Path: actions.custom[].label\n Category: actions\n Kind: string\n Description: Label do botao customizado.\n - Path: actions.custom[].icon\n Category: actions\n Kind: string\n Description: Icone do botao customizado.\n - Path: actions.custom[].className\n Category: actions\n Kind: string\n Description: Classe CSS do botao customizado.\n - Path: actions.custom[].style\n Category: actions\n Kind: object\n Description: Estilo inline do botao customizado.\n - Path: actions.custom[].color\n Category: actions\n Kind: enum\n Description: Cor do botao customizado.\n - Path: actions.custom[].disabled\n Category: actions\n Kind: boolean\n Description: Estado desabilitado do botao customizado.\n - Path: actions.custom[].type\n Category: actions\n Kind: enum\n Description: Tipo HTML do botao customizado.\n - Path: actions.custom[].action\n Category: actions\n Kind: string\n Description: Acao customizada disparada pelo botao.\n - Path: actions.custom[].tooltip\n Category: actions\n Kind: string\n Description: Tooltip do botao customizado.\n - Path: actions.custom[].loading\n Category: actions\n Kind: boolean\n Description: Estado de loading do botao customizado.\n - Path: actions.custom[].size\n Category: actions\n Kind: enum\n Description: Tamanho visual do botao customizado.\n - Path: actions.custom[].variant\n Category: actions\n Kind: enum\n Description: Variante visual do botao customizado.\n - Path: actions.custom[].shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado do botao customizado.\n - Path: behavior\n Category: behavior\n Kind: object\n Description: Comportamento do formulario.\n - Path: behavior.confirmOnUnsavedChanges\n Category: behavior\n Kind: boolean\n Description: Solicita confirmacao ao sair com alteracoes nao salvas.\n - Path: behavior.trackHistory\n Category: behavior\n Kind: boolean\n Description: Mantem historico de alteracoes do formulario.\n - Path: behavior.focusFirstError\n Category: behavior\n Kind: boolean\n Description: Move o foco para o primeiro campo com erro.\n - Path: behavior.scrollToErrors\n Category: behavior\n Kind: boolean\n Description: Rola a tela ate a primeira area com erro de validacao.\n - Path: behavior.clearAfterSave\n Category: behavior\n Kind: boolean\n Description: Limpa o formulario apos salvar com sucesso.\n - Path: behavior.redirectAfterSave\n Category: behavior\n Kind: string\n Description: Destino de navegacao apos salvar com sucesso.\n - Path: behavior.reactiveValidation\n Category: behavior\n Kind: boolean\n Description: Ativa validacao reativa durante a digitacao.\n - Path: behavior.reactiveValidationDebounceMs\n Category: behavior\n Kind: number\n Description: Debounce em milissegundos para a validacao reativa.\n - Path: api\n Category: api\n Kind: object\n Description: Configuracao de API do formulario.\n - Path: api.saveEndpoint\n Category: api\n Kind: string\n Description: Endpoint usado para persistir os dados do formulario.\n - Path: api.loadEndpoint\n Category: api\n Kind: string\n Description: Endpoint usado para carregar os dados iniciais do formulario.\n - Path: api.saveMethod\n Category: api\n Kind: enum\n Description: Metodo HTTP usado na operacao de salvamento.\n - Path: api.timeout\n Category: api\n Kind: number\n Description: Timeout da operacao de API em milissegundos.\n - Path: api.headers\n Category: api\n Kind: object\n Description: Headers HTTP adicionais enviados nas operacoes de API.\n - Path: api.idField\n Category: api\n Kind: string\n Description: Campo que representa o identificador primario no payload remoto.\n - Path: api.beforeSave\n Category: api\n Kind: expression\n Description: Hook/callback do host antes de salvar. Nao e Json Logic nem expressao computada serializavel.\n - Path: api.afterLoad\n Category: api\n Kind: expression\n Description: Hook/callback do host apos carregar. Nao e Json Logic nem expressao computada serializavel.\n - Path: messages\n Category: messages\n Kind: object\n Description: Mensagens e i18n do formulario.\n - Path: messages.updateRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso ao atualizar registro.\n - Path: messages.createRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso ao criar registro.\n - Path: messages.updateRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro ao atualizar registro.\n - Path: messages.createRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro ao criar registro.\n - Path: messages.confirmations\n Category: messages\n Kind: object\n Description: Mensagens de confirmacao.\n - Path: messages.confirmations.submit\n Category: messages\n Kind: string\n Description: Confirmacao de submit.\n - Path: messages.confirmations.cancel\n Category: messages\n Kind: string\n Description: Confirmacao de cancel.\n - Path: messages.confirmations.reset\n Category: messages\n Kind: string\n Description: Confirmacao de reset.\n - Path: messages.confirmations.[actionId]\n Category: messages\n Kind: string\n Description: Confirmacao para acao custom.\n - Path: messages.customActions\n Category: messages\n Kind: object\n Description: Mensagens por acao custom.\n - Path: messages.customActions.[actionId]\n Category: messages\n Kind: object\n Description: Mensagens da acao custom (success/error/confirmation).\n - Path: messages.customActions.[actionId].success\n Category: messages\n Kind: string\n Description: Sucesso para acao custom.\n - Path: messages.customActions.[actionId].error\n Category: messages\n Kind: string\n Description: Erro para acao custom.\n - Path: messages.customActions.[actionId].confirmation\n Category: messages\n Kind: string\n Description: Confirmacao para acao custom.\n - Path: messages.loading\n Category: messages\n Kind: object\n Description: Mensagens de loading.\n - Path: messages.loading.submit\n Category: messages\n Kind: string\n Description: Mensagem de loading no submit.\n - Path: messages.loading.cancel\n Category: messages\n Kind: string\n Description: Mensagem de loading no cancel.\n - Path: messages.loading.reset\n Category: messages\n Kind: string\n Description: Mensagem de loading no reset.\n - Path: messages.loading.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem de loading para acao custom.\n - Path: formRules\n Category: rules\n Kind: array\n Description: Regras de layout/comportamento.\n - Path: formRules[].id\n Category: rules\n Kind: string\n Description: ID da regra.\n - Path: formRules[].name\n Category: rules\n Kind: string\n Description: Nome da regra.\n - Path: formRules[].description\n Category: rules\n Kind: string\n Description: Descricao da regra.\n - Path: formRules[].targetType\n Category: rules\n Kind: enum\n Description: Tipo de alvo.\n - Path: formRules[].targets\n Category: rules\n Kind: array\n Description: IDs dos alvos canonicos.\n - Path: formRules[].targets[]\n Category: rules\n Kind: string\n Description: ID do alvo canonico.\n - Path: formRules[].targetFields\n Category: rules\n Kind: array\n Description: Alias legado para campos alvo.\n - Path: formRules[].targetFields[]\n Category: rules\n Kind: string\n Description: ID do campo alvo (alias legado).\n - Path: formRules[].context\n Category: rules\n Kind: enum\n Description: Contexto legado da regra.\n - Path: formRules[].effect.condition\n Category: rules\n Kind: expression\n Description: Condicao canonica da regra, expressa em Json Logic.\n - Path: formRules[].effect.properties\n Category: rules\n Kind: object\n Description: Propriedades aplicadas quando true.\n - Path: formRules[].effect.propertiesWhenFalse\n Category: rules\n Kind: object\n Description: Propriedades aplicadas quando false.\n - Path: formRulesState\n Category: metadata\n Kind: object\n Description: Estado interno do builder visual de regras, gerado apenas para round-trip do editor.\n - Path: hooks\n Category: hooks\n Kind: object\n Description: Declaracoes de hooks por estagio.\n - Path: hooks.beforeInit\n Category: hooks\n Kind: array\n Description: Hooks beforeInit.\n - Path: hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks beforeInit.\n - Path: hooks.beforeInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook.\n - Path: hooks.beforeInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook.\n - Path: hooks.beforeInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook.\n - Path: hooks.beforeInit[].args\n Category: hooks\n Kind: object\n Description: Args do hook.\n - Path: hooks.afterInit\n Category: hooks\n Kind: array\n Description: Hooks afterInit.\n - Path: hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks afterInit.\n - Path: hooks.afterInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook executado apos a inicializacao.\n - Path: hooks.afterInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade de execucao do hook apos a inicializacao.\n - Path: hooks.afterInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook apos a inicializacao em milissegundos.\n - Path: hooks.afterInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos configurados para o hook apos a inicializacao.\n - Path: hooks.beforeValidate\n Category: hooks\n Kind: array\n Description: Hooks beforeValidate.\n - Path: hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks beforeValidate.\n - Path: hooks.beforeValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook executado antes da validacao.\n - Path: hooks.beforeValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade de execucao do hook antes da validacao.\n - Path: hooks.beforeValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook antes da validacao em milissegundos.\n - Path: hooks.beforeValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos configurados para o hook antes da validacao.\n - Path: hooks.afterValidate\n Category: hooks\n Kind: array\n Description: Hooks afterValidate.\n - Path: hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks afterValidate.\n - Path: hooks.afterValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook executado apos a validacao.\n - Path: hooks.afterValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade de execucao do hook apos a validacao.\n - Path: hooks.afterValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook apos a validacao em milissegundos.\n - Path: hooks.afterValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos configurados para o hook apos a validacao.\n - Path: hooks.beforeSubmit\n Category: hooks\n Kind: array\n Description: Hooks beforeSubmit.\n - Path: hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks beforeSubmit.\n - Path: hooks.beforeSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook executado antes do submit.\n - Path: hooks.beforeSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade de execucao do hook antes do submit.\n - Path: hooks.beforeSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook antes do submit em milissegundos.\n - Path: hooks.beforeSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos configurados para o hook antes do submit.\n - Path: hooks.afterSubmit\n Category: hooks\n Kind: array\n Description: Hooks afterSubmit.\n - Path: hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks afterSubmit.\n - Path: hooks.afterSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook executado apos o submit.\n - Path: hooks.afterSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade de execucao do hook apos o submit.\n - Path: hooks.afterSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook apos o submit em milissegundos.\n - Path: hooks.afterSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos configurados para o hook apos o submit.\n - Path: hooks.onError\n Category: hooks\n Kind: array\n Description: Hooks onError.\n - Path: hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks onError.\n - Path: hooks.onError[].id\n Category: hooks\n Kind: string\n Description: ID do hook executado em cenarios de erro.\n - Path: hooks.onError[].priority\n Category: hooks\n Kind: number\n Description: Prioridade de execucao do hook em cenarios de erro.\n - Path: hooks.onError[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook de erro em milissegundos.\n - Path: hooks.onError[].args\n Category: hooks\n Kind: object\n Description: Argumentos configurados para o hook de erro.\n - Path: hints.dataModes.create\n Category: hints\n Kind: string\n Description: Texto de apoio para o modo create de dados.\n - Path: hints.dataModes.edit\n Category: hints\n Kind: string\n Description: Texto de apoio para o modo edit de dados.\n - Path: hints.dataModes.view\n Category: hints\n Kind: string\n Description: Texto de apoio para o modo view de dados.\n - Path: hints.uiModes.presentation\n Category: hints\n Kind: string\n Description: Texto de apoio para o modo de apresentacao da UI.\n - Path: hints.uiModes.readonly\n Category: hints\n Kind: string\n Description: Texto de apoio para o modo somente leitura.\n - Path: hints.uiModes.disabled\n Category: hints\n Kind: string\n Description: Texto de apoio para o modo desabilitado.\n - Path: hints.uiModes.visible\n Category: hints\n Kind: string\n Description: Texto de apoio para a visibilidade dos elementos da UI.\nCapability Notes:\n - ManualForm usa FormConfig interno para metadados e layout.\n - fieldMetadata[] deve seguir o catalogo base de FieldMetadata.\n - Arrays de layout e actions devem ser mesclados por id/label, evitando replace total.\n - ManualFormHeader usa metadata.title/metadata.description como fallback para titulo/descricao.\n - Se controlType nao tiver catalogo dedicado, trate como FieldMetadata base.\n",
|
|
4295
|
+
"content": "Component Capability:\n - Path: metadata.version\n Category: metadata\n Kind: string\n Description: Versao da configuracao do formulario.\n\nComponent Capability:\n - Path: metadata.source\n Category: metadata\n Kind: enum\n Description: Origem da configuracao.\n\nComponent Capability:\n - Path: metadata.title\n Category: metadata\n Kind: string\n Description: Titulo exibido no cabecalho quando formTitle nao for informado.\n\nComponent Capability:\n - Path: metadata.description\n Category: metadata\n Kind: string\n Description: Descricao exibida no cabecalho quando formDescription nao for informado.\n\nComponent Capability:\n - Path: metadata.lastUpdated\n Category: metadata\n Kind: string\n Description: Timestamp da ultima atualizacao.\n\nComponent Capability:\n - Path: metadata.schemaId\n Category: metadata\n Kind: string\n Description: Identificador do schema usado na composicao.\n\nComponent Capability:\n - Path: metadata.serverHash\n Category: metadata\n Kind: string\n Description: Hash do schema/servidor para reconciliacao.\n\nComponent Capability:\n - Path: metadata.schemaContext\n Category: metadata\n Kind: object\n Description: Contexto do schema (path/operation/schemaType).\n\nComponent Capability:\n - Path: metadata.schemaContext.path\n Category: metadata\n Kind: string\n Description: Path do schema usado para compor o formulario.\n\nComponent Capability:\n - Path: metadata.schemaContext.operation\n Category: metadata\n Kind: string\n Description: Operacao do schema (ex: GET/POST).\n\nComponent Capability:\n - Path: metadata.schemaContext.schemaType\n Category: metadata\n Kind: enum\n Description: Tipo do schema (response/request).\n\nComponent Capability:\n - Path: metadata.schemaContext.internal\n Category: metadata\n Kind: boolean\n Description: Marca schema como interno.\n\nComponent Capability:\n - Path: metadata.schemaContext.tenant\n Category: metadata\n Kind: string\n Description: Tenant do schema.\n\nComponent Capability:\n - Path: metadata.schemaContext.locale\n Category: metadata\n Kind: string\n Description: Locale do schema.\n\nComponent Capability:\n - Path: metadata.customizations\n Category: metadata\n Kind: array\n Description: Log de customizacoes.\n\nComponent Capability:\n - Path: metadata.customizations[]\n Category: metadata\n Kind: object\n Description: Registro de customizacao.\n\nComponent Capability:\n - Path: metadata.customizations[].fieldName\n Category: metadata\n Kind: string\n Description: Campo customizado.\n\nComponent Capability:\n - Path: metadata.customizations[].property\n Category: metadata\n Kind: string\n Description: Propriedade alterada.\n\nComponent Capability:\n - Path: metadata.customizations[].oldValue\n Category: metadata\n Kind: object\n Description: Valor anterior.\n\nComponent Capability:\n - Path: metadata.customizations[].newValue\n Category: metadata\n Kind: object\n Description: Novo valor.\n\nComponent Capability:\n - Path: metadata.customizations[].timestamp\n Category: metadata\n Kind: string\n Description: Timestamp da alteracao (ISO).\n\nComponent Capability:\n - Path: metadata.customizations[].source\n Category: metadata\n Kind: enum\n Description: Origem da alteracao.\n\nComponent Capability:\n - Path: fieldMetadata\n Category: fields\n Kind: array\n Description: Metadados dos campos (FieldMetadata).\n\nComponent Capability:\n - Path: fieldMetadata[]\n Category: fields\n Kind: object\n Description: Item de metadados do campo (FieldMetadata).\n\nComponent Capability:\n - Path: sections[]\n Category: layout\n Kind: object\n Description: Secao do formulario.\n\nComponent Capability:\n - Path: sections[].id\n Category: layout\n Kind: string\n Description: ID da secao.\n\nComponent Capability:\n - Path: sections[].title\n Category: layout\n Kind: string\n Description: Titulo da secao.\n\nComponent Capability:\n - Path: sections[].description\n Category: layout\n Kind: string\n Description: Descricao da secao.\n\nComponent Capability:\n - Path: sections[].icon\n Category: layout\n Kind: string\n Description: Icone da secao.\n\nComponent Capability:\n - Path: sections[].collapsible\n Category: layout\n Kind: boolean\n Description: Secao recolhivel.\n\nComponent Capability:\n - Path: sections[].collapsed\n Category: layout\n Kind: boolean\n Description: Estado inicial recolhido.\n\nComponent Capability:\n - Path: sections[].gapBottom\n Category: layout\n Kind: number\n Description: Espaco extra apos a secao (px).\n\nComponent Capability:\n - Path: sections[].titleGapBottom\n Category: layout\n Kind: number\n Description: Espaco abaixo do titulo (px).\n\nComponent Capability:\n - Path: sections[].descriptionGapBottom\n Category: layout\n Kind: number\n Description: Espaco abaixo da descricao (px).\n\nComponent Capability:\n - Path: sections[].titleStyle\n Category: layout\n Kind: enum\n Description: Preset tipografico do titulo.\n\nComponent Capability:\n - Path: sections[].descriptionStyle\n Category: layout\n Kind: enum\n Description: Preset tipografico da descricao.\n\nComponent Capability:\n - Path: sections[].titleColor\n Category: layout\n Kind: string\n Description: Cor do titulo.\n\nComponent Capability:\n - Path: sections[].descriptionColor\n Category: layout\n Kind: string\n Description: Cor da descricao.\n\nComponent Capability:\n - Path: sections[].headerAlign\n Category: layout\n Kind: enum\n Description: Alinhamento do header.\n\nComponent Capability:\n - Path: sections[].headerTooltip\n Category: layout\n Kind: string\n Description: Tooltip do header da secao.\n\nComponent Capability:\n - Path: sections[].rows[]\n Category: layout\n Kind: object\n Description: Linha da secao.\n\nComponent Capability:\n - Path: sections[].rows[].id\n Category: layout\n Kind: string\n Description: ID da linha.\n\nComponent Capability:\n - Path: sections[].rows[].title\n Category: layout\n Kind: string\n Description: Titulo da linha.\n\nComponent Capability:\n - Path: sections[].rows[].gap\n Category: layout\n Kind: number\n Description: Espaco horizontal entre colunas (px).\n\nComponent Capability:\n - Path: sections[].rows[].rowGap\n Category: layout\n Kind: number\n Description: Espaco vertical apos a linha (px).\n\nComponent Capability:\n - Path: sections[].rows[].columns[]\n Category: layout\n Kind: object\n Description: Coluna da linha.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].id\n Category: layout\n Kind: string\n Description: ID da coluna.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].title\n Category: layout\n Kind: string\n Description: Titulo da coluna.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].fields\n Category: layout\n Kind: array\n Description: Campos associados a coluna.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].fields[]\n Category: layout\n Kind: string\n Description: Nome do campo na coluna.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].span\n Category: layout\n Kind: object\n Description: Span responsivo.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].span.xs\n Category: layout\n Kind: number\n Description: Span xs (1-12).\n\nComponent Capability:\n - Path: sections[].rows[].columns[].span.sm\n Category: layout\n Kind: number\n Description: Span sm (1-12).\n\nComponent Capability:\n - Path: sections[].rows[].columns[].span.md\n Category: layout\n Kind: number\n Description: Span md (1-12).\n\nComponent Capability:\n - Path: sections[].rows[].columns[].span.lg\n Category: layout\n Kind: number\n Description: Span lg (1-12).\n\nComponent Capability:\n - Path: sections[].rows[].columns[].span.xl\n Category: layout\n Kind: number\n Description: Span xl (1-12).",
|
|
4296
4296
|
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/manual-form-ai-capabilities.ts",
|
|
4297
|
-
"contentHash": "
|
|
4297
|
+
"contentHash": "05e20de3acfd61738708e9cb7c2fabc34dbeb112ffe12a2c7c3b7e4ce1150cc5",
|
|
4298
4298
|
"sourceKind": "component_definition",
|
|
4299
4299
|
"sourceId": "praxis-manual-form",
|
|
4300
4300
|
"corpusVersion": "1.0.0"
|
|
4301
4301
|
},
|
|
4302
4302
|
{
|
|
4303
4303
|
"chunkIndex": 2,
|
|
4304
|
+
"chunkKind": "capabilities",
|
|
4305
|
+
"content": "Component Capability:\n - Path: sections[].rows[].columns[].offset\n Category: layout\n Kind: object\n Description: Offset responsivo.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].offset.xs\n Category: layout\n Kind: number\n Description: Offset xs (1-12).\n\nComponent Capability:\n - Path: sections[].rows[].columns[].offset.sm\n Category: layout\n Kind: number\n Description: Offset sm (1-12).\n\nComponent Capability:\n - Path: sections[].rows[].columns[].offset.md\n Category: layout\n Kind: number\n Description: Offset md (1-12).\n\nComponent Capability:\n - Path: sections[].rows[].columns[].offset.lg\n Category: layout\n Kind: number\n Description: Offset lg (1-12).\n\nComponent Capability:\n - Path: sections[].rows[].columns[].offset.xl\n Category: layout\n Kind: number\n Description: Offset xl (1-12).\n\nComponent Capability:\n - Path: sections[].rows[].columns[].order\n Category: layout\n Kind: object\n Description: Order responsivo.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].order.xs\n Category: layout\n Kind: number\n Description: Order xs.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].order.sm\n Category: layout\n Kind: number\n Description: Order sm.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].order.md\n Category: layout\n Kind: number\n Description: Order md.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].order.lg\n Category: layout\n Kind: number\n Description: Order lg.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].order.xl\n Category: layout\n Kind: number\n Description: Order xl.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].hidden\n Category: layout\n Kind: object\n Description: Hidden responsivo.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].hidden.xs\n Category: layout\n Kind: boolean\n Description: Ocultar no xs.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].hidden.sm\n Category: layout\n Kind: boolean\n Description: Ocultar no sm.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].hidden.md\n Category: layout\n Kind: boolean\n Description: Ocultar no md.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].hidden.lg\n Category: layout\n Kind: boolean\n Description: Ocultar no lg.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].hidden.xl\n Category: layout\n Kind: boolean\n Description: Ocultar no xl.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].align\n Category: layout\n Kind: enum\n Description: Alinhamento da coluna.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].padding\n Category: layout\n Kind: number\n Description: Padding da coluna (px).\n\nComponent Capability:\n - Path: sections[].rows[].columns[].className\n Category: layout\n Kind: string\n Description: Classe CSS da coluna.\n\nComponent Capability:\n - Path: sections[].rows[].columns[].testId\n Category: layout\n Kind: string\n Description: Test id da coluna.\n\nComponent Capability:\n - Path: actions\n Category: actions\n Kind: object\n Description: Layout de acoes do formulario.\n\nComponent Capability:\n - Path: actions.position\n Category: actions\n Kind: enum\n Description: Posicao das acoes.\n\nComponent Capability:\n - Path: actions.orientation\n Category: actions\n Kind: enum\n Description: Orientacao das acoes.\n\nComponent Capability:\n - Path: actions.spacing\n Category: actions\n Kind: enum\n Description: Espacamento das acoes.\n\nComponent Capability:\n - Path: actions.sticky\n Category: actions\n Kind: boolean\n Description: Fixar barra de acoes.\n\nComponent Capability:\n - Path: actions.divider\n Category: actions\n Kind: boolean\n Description: Exibir divisor acima das acoes.\n\nComponent Capability:\n - Path: actions.placement\n Category: actions\n Kind: enum\n Description: Posicionamento estrutural das acoes.\n\nComponent Capability:\n - Path: actions.containerClassName\n Category: actions\n Kind: string\n Description: Classe CSS do container de acoes.\n\nComponent Capability:\n - Path: actions.containerStyles\n Category: actions\n Kind: object\n Description: Estilos inline do container.\n\nComponent Capability:\n - Path: actions.mobile\n Category: actions\n Kind: object\n Description: Config para mobile.\n\nComponent Capability:\n - Path: actions.mobile.position\n Category: actions\n Kind: enum\n Description: Posicao das acoes no mobile.\n\nComponent Capability:\n - Path: actions.mobile.orientation\n Category: actions\n Kind: enum\n Description: Orientacao no mobile.\n\nComponent Capability:\n - Path: actions.mobile.collapseToMenu\n Category: actions\n Kind: boolean\n Description: Colapsar acoes em menu.\n\nComponent Capability:\n - Path: actions.showSaveButton\n Category: actions\n Kind: boolean\n Description: Legacy: mostrar botao salvar.\n\nComponent Capability:\n - Path: actions.submitButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: texto do submit.\n\nComponent Capability:\n - Path: actions.showCancelButton\n Category: actions\n Kind: boolean\n Description: Legacy: mostrar cancelar.\n\nComponent Capability:\n - Path: actions.cancelButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: texto do cancelar.\n\nComponent Capability:\n - Path: actions.showResetButton\n Category: actions\n Kind: boolean\n Description: Legacy: mostrar reset.\n\nComponent Capability:\n - Path: actions.resetButtonLabel\n Category: actions\n Kind: string\n Description: Legacy: texto do reset.\n\nComponent Capability:\n - Path: actions.submit\n Category: actions\n Kind: object\n Description: Botao submit.\n\nComponent Capability:\n - Path: actions.cancel\n Category: actions\n Kind: object\n Description: Botao cancelar.\n\nComponent Capability:\n - Path: actions.reset\n Category: actions\n Kind: object\n Description: Botao reset.\n\nComponent Capability:\n - Path: actions.custom\n Category: actions\n Kind: array\n Description: Botoes customizados.\n\nComponent Capability:\n - Path: actions.custom[]\n Category: actions\n Kind: object\n Description: Configuracao de botao customizado.\n\nComponent Capability:\n - Path: actions.submit.id\n Category: actions\n Kind: string\n Description: ID do botao.\n\nComponent Capability:\n - Path: actions.submit.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade.\n\nComponent Capability:\n - Path: actions.submit.label\n Category: actions\n Kind: string\n Description: Label do botao.\n\nComponent Capability:\n - Path: actions.submit.icon\n Category: actions\n Kind: string\n Description: Icone do botao.\n\nComponent Capability:\n - Path: actions.submit.className\n Category: actions\n Kind: string\n Description: Classe CSS.\n\nComponent Capability:\n - Path: actions.submit.style\n Category: actions\n Kind: object\n Description: Estilo inline.\n\nComponent Capability:\n - Path: actions.submit.color\n Category: actions\n Kind: enum\n Description: Cor do botao.\n\nComponent Capability:\n - Path: actions.submit.disabled\n Category: actions\n Kind: boolean\n Description: Botao desabilitado.\n\nComponent Capability:\n - Path: actions.submit.type\n Category: actions\n Kind: enum\n Description: Tipo do botao.\n\nComponent Capability:\n - Path: actions.submit.action\n Category: actions\n Kind: string\n Description: Evento custom.\n\nComponent Capability:\n - Path: actions.submit.tooltip\n Category: actions\n Kind: string\n Description: Tooltip.\n\nComponent Capability:\n - Path: actions.submit.loading\n Category: actions\n Kind: boolean\n Description: Estado loading.\n\nComponent Capability:\n - Path: actions.submit.size\n Category: actions\n Kind: enum\n Description: Tamanho do botao.",
|
|
4306
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/manual-form-ai-capabilities.ts",
|
|
4307
|
+
"contentHash": "5c9df350e44b871aa5c608f361069d656938a7fa30978a23c5752a223d1397de",
|
|
4308
|
+
"sourceKind": "component_definition",
|
|
4309
|
+
"sourceId": "praxis-manual-form",
|
|
4310
|
+
"corpusVersion": "1.0.0"
|
|
4311
|
+
},
|
|
4312
|
+
{
|
|
4313
|
+
"chunkIndex": 3,
|
|
4314
|
+
"chunkKind": "capabilities",
|
|
4315
|
+
"content": "Component Capability:\n - Path: actions.submit.variant\n Category: actions\n Kind: enum\n Description: Variante visual.\n\nComponent Capability:\n - Path: actions.submit.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado.\n\nComponent Capability:\n - Path: actions.cancel.id\n Category: actions\n Kind: string\n Description: ID do botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.label\n Category: actions\n Kind: string\n Description: Label do botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.icon\n Category: actions\n Kind: string\n Description: Icone do botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.className\n Category: actions\n Kind: string\n Description: Classe CSS do botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.style\n Category: actions\n Kind: object\n Description: Estilo inline do botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.color\n Category: actions\n Kind: enum\n Description: Cor do botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.disabled\n Category: actions\n Kind: boolean\n Description: Estado desabilitado do botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.type\n Category: actions\n Kind: enum\n Description: Tipo HTML do botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.action\n Category: actions\n Kind: string\n Description: Acao customizada disparada pelo botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.tooltip\n Category: actions\n Kind: string\n Description: Tooltip do botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.loading\n Category: actions\n Kind: boolean\n Description: Estado de loading do botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.size\n Category: actions\n Kind: enum\n Description: Tamanho visual do botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botao cancelar.\n\nComponent Capability:\n - Path: actions.cancel.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado do botao cancelar.\n\nComponent Capability:\n - Path: actions.reset.id\n Category: actions\n Kind: string\n Description: ID do botao reset.\n\nComponent Capability:\n - Path: actions.reset.visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botao reset.\n\nComponent Capability:\n - Path: actions.reset.label\n Category: actions\n Kind: string\n Description: Label do botao reset.\n\nComponent Capability:\n - Path: actions.reset.icon\n Category: actions\n Kind: string\n Description: Icone do botao reset.\n\nComponent Capability:\n - Path: actions.reset.className\n Category: actions\n Kind: string\n Description: Classe CSS do botao reset.\n\nComponent Capability:\n - Path: actions.reset.style\n Category: actions\n Kind: object\n Description: Estilo inline do botao reset.\n\nComponent Capability:\n - Path: actions.reset.color\n Category: actions\n Kind: enum\n Description: Cor do botao reset.\n\nComponent Capability:\n - Path: actions.reset.disabled\n Category: actions\n Kind: boolean\n Description: Estado desabilitado do botao reset.\n\nComponent Capability:\n - Path: actions.reset.type\n Category: actions\n Kind: enum\n Description: Tipo HTML do botao reset.\n\nComponent Capability:\n - Path: actions.reset.action\n Category: actions\n Kind: string\n Description: Acao customizada disparada pelo botao reset.\n\nComponent Capability:\n - Path: actions.reset.tooltip\n Category: actions\n Kind: string\n Description: Tooltip do botao reset.\n\nComponent Capability:\n - Path: actions.reset.loading\n Category: actions\n Kind: boolean\n Description: Estado de loading do botao reset.\n\nComponent Capability:\n - Path: actions.reset.size\n Category: actions\n Kind: enum\n Description: Tamanho visual do botao reset.\n\nComponent Capability:\n - Path: actions.reset.variant\n Category: actions\n Kind: enum\n Description: Variante visual do botao reset.\n\nComponent Capability:\n - Path: actions.reset.shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado do botao reset.\n\nComponent Capability:\n - Path: actions.custom[].id\n Category: actions\n Kind: string\n Description: ID do botao customizado.\n\nComponent Capability:\n - Path: actions.custom[].visible\n Category: actions\n Kind: boolean\n Description: Visibilidade do botao customizado.\n\nComponent Capability:\n - Path: actions.custom[].label\n Category: actions\n Kind: string\n Description: Label do botao customizado.\n\nComponent Capability:\n - Path: actions.custom[].icon\n Category: actions\n Kind: string\n Description: Icone do botao customizado.\n\nComponent Capability:\n - Path: actions.custom[].className\n Category: actions\n Kind: string\n Description: Classe CSS do botao customizado.\n\nComponent Capability:\n - Path: actions.custom[].style\n Category: actions\n Kind: object\n Description: Estilo inline do botao customizado.\n\nComponent Capability:\n - Path: actions.custom[].color\n Category: actions\n Kind: enum\n Description: Cor do botao customizado.\n\nComponent Capability:\n - Path: actions.custom[].disabled\n Category: actions\n Kind: boolean\n Description: Estado desabilitado do botao customizado.\n\nComponent Capability:\n - Path: actions.custom[].type\n Category: actions\n Kind: enum\n Description: Tipo HTML do botao customizado.\n\nComponent Capability:\n - Path: actions.custom[].action\n Category: actions\n Kind: string\n Description: Acao customizada disparada pelo botao.\n\nComponent Capability:\n - Path: actions.custom[].tooltip\n Category: actions\n Kind: string\n Description: Tooltip do botao customizado.\n\nComponent Capability:\n - Path: actions.custom[].loading\n Category: actions\n Kind: boolean\n Description: Estado de loading do botao customizado.\n\nComponent Capability:\n - Path: actions.custom[].size\n Category: actions\n Kind: enum\n Description: Tamanho visual do botao customizado.\n\nComponent Capability:\n - Path: actions.custom[].variant\n Category: actions\n Kind: enum\n Description: Variante visual do botao customizado.\n\nComponent Capability:\n - Path: actions.custom[].shortcut\n Category: actions\n Kind: string\n Description: Atalho de teclado do botao customizado.\n\nComponent Capability:\n - Path: behavior\n Category: behavior\n Kind: object\n Description: Comportamento do formulario.\n\nComponent Capability:\n - Path: behavior.confirmOnUnsavedChanges\n Category: behavior\n Kind: boolean\n Description: Solicita confirmacao ao sair com alteracoes nao salvas.\n\nComponent Capability:\n - Path: behavior.trackHistory\n Category: behavior\n Kind: boolean\n Description: Mantem historico de alteracoes do formulario.\n\nComponent Capability:\n - Path: behavior.focusFirstError\n Category: behavior\n Kind: boolean\n Description: Move o foco para o primeiro campo com erro.\n\nComponent Capability:\n - Path: behavior.scrollToErrors\n Category: behavior\n Kind: boolean\n Description: Rola a tela ate a primeira area com erro de validacao.\n\nComponent Capability:\n - Path: behavior.clearAfterSave\n Category: behavior\n Kind: boolean\n Description: Limpa o formulario apos salvar com sucesso.\n\nComponent Capability:\n - Path: behavior.redirectAfterSave\n Category: behavior\n Kind: string\n Description: Destino de navegacao apos salvar com sucesso.\n\nComponent Capability:\n - Path: behavior.reactiveValidation\n Category: behavior\n Kind: boolean\n Description: Ativa validacao reativa durante a digitacao.",
|
|
4316
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/manual-form-ai-capabilities.ts",
|
|
4317
|
+
"contentHash": "285c1813cd4e61fadf5c789f08767f0b31bcfe72f54a4f0208c4898c7d5c8c59",
|
|
4318
|
+
"sourceKind": "component_definition",
|
|
4319
|
+
"sourceId": "praxis-manual-form",
|
|
4320
|
+
"corpusVersion": "1.0.0"
|
|
4321
|
+
},
|
|
4322
|
+
{
|
|
4323
|
+
"chunkIndex": 4,
|
|
4324
|
+
"chunkKind": "capabilities",
|
|
4325
|
+
"content": "Component Capability:\n - Path: behavior.reactiveValidationDebounceMs\n Category: behavior\n Kind: number\n Description: Debounce em milissegundos para a validacao reativa.\n\nComponent Capability:\n - Path: api\n Category: api\n Kind: object\n Description: Configuracao de API do formulario.\n\nComponent Capability:\n - Path: api.saveEndpoint\n Category: api\n Kind: string\n Description: Endpoint usado para persistir os dados do formulario.\n\nComponent Capability:\n - Path: api.loadEndpoint\n Category: api\n Kind: string\n Description: Endpoint usado para carregar os dados iniciais do formulario.\n\nComponent Capability:\n - Path: api.saveMethod\n Category: api\n Kind: enum\n Description: Metodo HTTP usado na operacao de salvamento.\n\nComponent Capability:\n - Path: api.timeout\n Category: api\n Kind: number\n Description: Timeout da operacao de API em milissegundos.\n\nComponent Capability:\n - Path: api.headers\n Category: api\n Kind: object\n Description: Headers HTTP adicionais enviados nas operacoes de API.\n\nComponent Capability:\n - Path: api.idField\n Category: api\n Kind: string\n Description: Campo que representa o identificador primario no payload remoto.\n\nComponent Capability:\n - Path: api.beforeSave\n Category: api\n Kind: expression\n Description: Hook/callback do host antes de salvar. Nao e Json Logic nem expressao computada serializavel.\n\nComponent Capability:\n - Path: api.afterLoad\n Category: api\n Kind: expression\n Description: Hook/callback do host apos carregar. Nao e Json Logic nem expressao computada serializavel.\n\nComponent Capability:\n - Path: messages\n Category: messages\n Kind: object\n Description: Mensagens e i18n do formulario.\n\nComponent Capability:\n - Path: messages.updateRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso ao atualizar registro.\n\nComponent Capability:\n - Path: messages.createRegistrySuccess\n Category: messages\n Kind: string\n Description: Mensagem de sucesso ao criar registro.\n\nComponent Capability:\n - Path: messages.updateRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro ao atualizar registro.\n\nComponent Capability:\n - Path: messages.createRegistryError\n Category: messages\n Kind: string\n Description: Mensagem de erro ao criar registro.\n\nComponent Capability:\n - Path: messages.confirmations\n Category: messages\n Kind: object\n Description: Mensagens de confirmacao.\n\nComponent Capability:\n - Path: messages.confirmations.submit\n Category: messages\n Kind: string\n Description: Confirmacao de submit.\n\nComponent Capability:\n - Path: messages.confirmations.cancel\n Category: messages\n Kind: string\n Description: Confirmacao de cancel.\n\nComponent Capability:\n - Path: messages.confirmations.reset\n Category: messages\n Kind: string\n Description: Confirmacao de reset.\n\nComponent Capability:\n - Path: messages.confirmations.[actionId]\n Category: messages\n Kind: string\n Description: Confirmacao para acao custom.\n\nComponent Capability:\n - Path: messages.customActions\n Category: messages\n Kind: object\n Description: Mensagens por acao custom.\n\nComponent Capability:\n - Path: messages.customActions.[actionId]\n Category: messages\n Kind: object\n Description: Mensagens da acao custom (success/error/confirmation).\n\nComponent Capability:\n - Path: messages.customActions.[actionId].success\n Category: messages\n Kind: string\n Description: Sucesso para acao custom.\n\nComponent Capability:\n - Path: messages.customActions.[actionId].error\n Category: messages\n Kind: string\n Description: Erro para acao custom.\n\nComponent Capability:\n - Path: messages.customActions.[actionId].confirmation\n Category: messages\n Kind: string\n Description: Confirmacao para acao custom.\n\nComponent Capability:\n - Path: messages.loading\n Category: messages\n Kind: object\n Description: Mensagens de loading.\n\nComponent Capability:\n - Path: messages.loading.submit\n Category: messages\n Kind: string\n Description: Mensagem de loading no submit.\n\nComponent Capability:\n - Path: messages.loading.cancel\n Category: messages\n Kind: string\n Description: Mensagem de loading no cancel.\n\nComponent Capability:\n - Path: messages.loading.reset\n Category: messages\n Kind: string\n Description: Mensagem de loading no reset.\n\nComponent Capability:\n - Path: messages.loading.[actionId]\n Category: messages\n Kind: string\n Description: Mensagem de loading para acao custom.\n\nComponent Capability:\n - Path: formRules\n Category: rules\n Kind: array\n Description: Regras de layout/comportamento.\n\nComponent Capability:\n - Path: formRules[].id\n Category: rules\n Kind: string\n Description: ID da regra.\n\nComponent Capability:\n - Path: formRules[].name\n Category: rules\n Kind: string\n Description: Nome da regra.\n\nComponent Capability:\n - Path: formRules[].description\n Category: rules\n Kind: string\n Description: Descricao da regra.\n\nComponent Capability:\n - Path: formRules[].targetType\n Category: rules\n Kind: enum\n Description: Tipo de alvo.\n\nComponent Capability:\n - Path: formRules[].targets\n Category: rules\n Kind: array\n Description: IDs dos alvos canonicos.\n\nComponent Capability:\n - Path: formRules[].targets[]\n Category: rules\n Kind: string\n Description: ID do alvo canonico.\n\nComponent Capability:\n - Path: formRules[].targetFields\n Category: rules\n Kind: array\n Description: Alias legado para campos alvo.\n\nComponent Capability:\n - Path: formRules[].targetFields[]\n Category: rules\n Kind: string\n Description: ID do campo alvo (alias legado).\n\nComponent Capability:\n - Path: formRules[].context\n Category: rules\n Kind: enum\n Description: Contexto legado da regra.\n\nComponent Capability:\n - Path: formRules[].effect.condition\n Category: rules\n Kind: expression\n Description: Condicao canonica da regra, expressa em Json Logic.\n\nComponent Capability:\n - Path: formRules[].effect.properties\n Category: rules\n Kind: object\n Description: Propriedades aplicadas quando true.\n\nComponent Capability:\n - Path: formRules[].effect.propertiesWhenFalse\n Category: rules\n Kind: object\n Description: Propriedades aplicadas quando false.\n\nComponent Capability:\n - Path: formRulesState\n Category: metadata\n Kind: object\n Description: Estado interno do builder visual de regras, gerado apenas para round-trip do editor.\n\nComponent Capability:\n - Path: hooks\n Category: hooks\n Kind: object\n Description: Declaracoes de hooks por estagio.\n\nComponent Capability:\n - Path: hooks.beforeInit\n Category: hooks\n Kind: array\n Description: Hooks beforeInit.\n\nComponent Capability:\n - Path: hooks.beforeInit[]\n Category: hooks\n Kind: array\n Description: Hooks beforeInit.\n\nComponent Capability:\n - Path: hooks.beforeInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook.\n\nComponent Capability:\n - Path: hooks.beforeInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade do hook.\n\nComponent Capability:\n - Path: hooks.beforeInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook.\n\nComponent Capability:\n - Path: hooks.beforeInit[].args\n Category: hooks\n Kind: object\n Description: Args do hook.\n\nComponent Capability:\n - Path: hooks.afterInit\n Category: hooks\n Kind: array\n Description: Hooks afterInit.\n\nComponent Capability:\n - Path: hooks.afterInit[]\n Category: hooks\n Kind: array\n Description: Hooks afterInit.\n\nComponent Capability:\n - Path: hooks.afterInit[].id\n Category: hooks\n Kind: string\n Description: ID do hook executado apos a inicializacao.",
|
|
4326
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/manual-form-ai-capabilities.ts",
|
|
4327
|
+
"contentHash": "d05f2deeb0933beb3486adfbc0259b3f6ec9313a30fe2c96ef33c76bab33c376",
|
|
4328
|
+
"sourceKind": "component_definition",
|
|
4329
|
+
"sourceId": "praxis-manual-form",
|
|
4330
|
+
"corpusVersion": "1.0.0"
|
|
4331
|
+
},
|
|
4332
|
+
{
|
|
4333
|
+
"chunkIndex": 5,
|
|
4334
|
+
"chunkKind": "capabilities",
|
|
4335
|
+
"content": "Component Capability:\n - Path: hooks.afterInit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade de execucao do hook apos a inicializacao.\n\nComponent Capability:\n - Path: hooks.afterInit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook apos a inicializacao em milissegundos.\n\nComponent Capability:\n - Path: hooks.afterInit[].args\n Category: hooks\n Kind: object\n Description: Argumentos configurados para o hook apos a inicializacao.\n\nComponent Capability:\n - Path: hooks.beforeValidate\n Category: hooks\n Kind: array\n Description: Hooks beforeValidate.\n\nComponent Capability:\n - Path: hooks.beforeValidate[]\n Category: hooks\n Kind: array\n Description: Hooks beforeValidate.\n\nComponent Capability:\n - Path: hooks.beforeValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook executado antes da validacao.\n\nComponent Capability:\n - Path: hooks.beforeValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade de execucao do hook antes da validacao.\n\nComponent Capability:\n - Path: hooks.beforeValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook antes da validacao em milissegundos.\n\nComponent Capability:\n - Path: hooks.beforeValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos configurados para o hook antes da validacao.\n\nComponent Capability:\n - Path: hooks.afterValidate\n Category: hooks\n Kind: array\n Description: Hooks afterValidate.\n\nComponent Capability:\n - Path: hooks.afterValidate[]\n Category: hooks\n Kind: array\n Description: Hooks afterValidate.\n\nComponent Capability:\n - Path: hooks.afterValidate[].id\n Category: hooks\n Kind: string\n Description: ID do hook executado apos a validacao.\n\nComponent Capability:\n - Path: hooks.afterValidate[].priority\n Category: hooks\n Kind: number\n Description: Prioridade de execucao do hook apos a validacao.\n\nComponent Capability:\n - Path: hooks.afterValidate[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook apos a validacao em milissegundos.\n\nComponent Capability:\n - Path: hooks.afterValidate[].args\n Category: hooks\n Kind: object\n Description: Argumentos configurados para o hook apos a validacao.\n\nComponent Capability:\n - Path: hooks.beforeSubmit\n Category: hooks\n Kind: array\n Description: Hooks beforeSubmit.\n\nComponent Capability:\n - Path: hooks.beforeSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks beforeSubmit.\n\nComponent Capability:\n - Path: hooks.beforeSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook executado antes do submit.\n\nComponent Capability:\n - Path: hooks.beforeSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade de execucao do hook antes do submit.\n\nComponent Capability:\n - Path: hooks.beforeSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook antes do submit em milissegundos.\n\nComponent Capability:\n - Path: hooks.beforeSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos configurados para o hook antes do submit.\n\nComponent Capability:\n - Path: hooks.afterSubmit\n Category: hooks\n Kind: array\n Description: Hooks afterSubmit.\n\nComponent Capability:\n - Path: hooks.afterSubmit[]\n Category: hooks\n Kind: array\n Description: Hooks afterSubmit.\n\nComponent Capability:\n - Path: hooks.afterSubmit[].id\n Category: hooks\n Kind: string\n Description: ID do hook executado apos o submit.\n\nComponent Capability:\n - Path: hooks.afterSubmit[].priority\n Category: hooks\n Kind: number\n Description: Prioridade de execucao do hook apos o submit.\n\nComponent Capability:\n - Path: hooks.afterSubmit[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook apos o submit em milissegundos.\n\nComponent Capability:\n - Path: hooks.afterSubmit[].args\n Category: hooks\n Kind: object\n Description: Argumentos configurados para o hook apos o submit.\n\nComponent Capability:\n - Path: hooks.onError\n Category: hooks\n Kind: array\n Description: Hooks onError.\n\nComponent Capability:\n - Path: hooks.onError[]\n Category: hooks\n Kind: array\n Description: Hooks onError.\n\nComponent Capability:\n - Path: hooks.onError[].id\n Category: hooks\n Kind: string\n Description: ID do hook executado em cenarios de erro.\n\nComponent Capability:\n - Path: hooks.onError[].priority\n Category: hooks\n Kind: number\n Description: Prioridade de execucao do hook em cenarios de erro.\n\nComponent Capability:\n - Path: hooks.onError[].timeoutMs\n Category: hooks\n Kind: number\n Description: Timeout do hook de erro em milissegundos.\n\nComponent Capability:\n - Path: hooks.onError[].args\n Category: hooks\n Kind: object\n Description: Argumentos configurados para o hook de erro.\n\nComponent Capability:\n - Path: hints.dataModes.create\n Category: hints\n Kind: string\n Description: Texto de apoio para o modo create de dados.\n\nComponent Capability:\n - Path: hints.dataModes.edit\n Category: hints\n Kind: string\n Description: Texto de apoio para o modo edit de dados.\n\nComponent Capability:\n - Path: hints.dataModes.view\n Category: hints\n Kind: string\n Description: Texto de apoio para o modo view de dados.\n\nComponent Capability:\n - Path: hints.uiModes.presentation\n Category: hints\n Kind: string\n Description: Texto de apoio para o modo de apresentacao da UI.\n\nComponent Capability:\n - Path: hints.uiModes.readonly\n Category: hints\n Kind: string\n Description: Texto de apoio para o modo somente leitura.\n\nComponent Capability:\n - Path: hints.uiModes.disabled\n Category: hints\n Kind: string\n Description: Texto de apoio para o modo desabilitado.\n\nComponent Capability:\n - Path: hints.uiModes.visible\n Category: hints\n Kind: string\n Description: Texto de apoio para a visibilidade dos elementos da UI.\n\nCapability Note:\n - ManualForm usa FormConfig interno para metadados e layout.\n\nCapability Note:\n - fieldMetadata[] deve seguir o catalogo base de FieldMetadata.\n\nCapability Note:\n - Arrays de layout e actions devem ser mesclados por id/label, evitando replace total.\n\nCapability Note:\n - ManualFormHeader usa metadata.title/metadata.description como fallback para titulo/descricao.\n\nCapability Note:\n - Se controlType nao tiver catalogo dedicado, trate como FieldMetadata base.",
|
|
4336
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/manual-form-ai-capabilities.ts",
|
|
4337
|
+
"contentHash": "dd0c9d3bfa385b7386f75bb637164ef6dc63f23c347028d1b6294ecebfcae8e5",
|
|
4338
|
+
"sourceKind": "component_definition",
|
|
4339
|
+
"sourceId": "praxis-manual-form",
|
|
4340
|
+
"corpusVersion": "1.0.0"
|
|
4341
|
+
},
|
|
4342
|
+
{
|
|
4343
|
+
"chunkIndex": 6,
|
|
4304
4344
|
"chunkKind": "authoring_manifest",
|
|
4305
|
-
"content": "{\n \"schemaVersion\": \"1.0.0\",\n \"componentId\": \"praxis-manual-form\",\n \"ownerPackage\": \"@praxisui/manual-form\",\n \"configSchemaId\": \"ManualFormInstance\",\n \"manifestVersion\": \"1.0.0\",\n \"runtimeInputs\": [\n {\n \"name\": \"formId\",\n \"type\": \"string\",\n \"description\": \"Required manual form id used for runtime state and persistence key composition.\"\n },\n {\n \"name\": \"formGroup\",\n \"type\": \"FormGroup | null\",\n \"description\": \"Host-owned typed FormGroup adopted by the manual form runtime when provided.\"\n },\n {\n \"name\": \"formTitle\",\n \"type\": \"string | null\",\n \"description\": \"Manual form title override.\"\n },\n {\n \"name\": \"formDescription\",\n \"type\": \"string | null\",\n \"description\": \"Manual form description override.\"\n },\n {\n \"name\": \"actions\",\n \"type\": \"FormActionsLayout | null\",\n \"description\": \"Manual toolbar/actions layout.\"\n },\n {\n \"name\": \"enableAutoSave\",\n \"type\": \"boolean\",\n \"description\": \"Enables draft persistence through ManualFormInstance.saveDraft.\"\n },\n {\n \"name\": \"autoSaveDebounceMs\",\n \"type\": \"number\",\n \"description\": \"Autosave debounce in milliseconds.\"\n },\n {\n \"name\": \"enableCustomization\",\n \"type\": \"boolean\",\n \"description\": \"Enables field toolbar and metadata editor bridge.\"\n },\n {\n \"name\": \"persistenceOptions\",\n \"type\": \"ManualFormPersistenceOptions | null\",\n \"description\": \"Namespace, tenant, profile, locale and storage key controls.\"\n },\n {\n \"name\": \"usePathNames\",\n \"type\": \"boolean\",\n \"description\": \"Uses FormControlName.path as FieldMetadata.name for nested manual forms.\"\n }\n ],\n \"editableTargets\": [\n {\n \"kind\": \"manualField\",\n \"resolver\": \"manual-form-field-by-name\",\n \"description\": \"Detected or declared manual field tracked by ManualFormInstance field metadata.\"\n },\n {\n \"kind\": \"layout\",\n \"resolver\": \"manual-form-layout\",\n \"description\": \"Manual layout ownership: host template layout plus optional FormConfig sections for authored structure.\"\n },\n {\n \"kind\": \"toolbar\",\n \"resolver\": \"manual-form-customization-toolbar\",\n \"description\": \"Customization toolbar and quick metadata toggles.\"\n },\n {\n \"kind\": \"autosave\",\n \"resolver\": \"manual-form-autosave-policy\",\n \"description\": \"Autosave enablement, debounce and persistence key controls.\"\n },\n {\n \"kind\": \"metadataBridge\",\n \"resolver\": \"manual-field-metadata-bridge\",\n \"description\": \"Bridge from manual fields to @praxisui/metadata-editor patches.\"\n },\n {\n \"kind\": \"submitBehavior\",\n \"resolver\": \"manual-form-submit-behavior\",\n \"description\": \"Submit, reset, validation focus and unsaved-change behavior.\"\n }\n ],\n \"operations\": [\n {\n \"operationId\": \"manualField.add\",\n \"title\": \"Add manual field metadata\",\n \"scope\": \"field\",\n \"targetKind\": \"manualField\",\n \"target\": {\n \"kind\": \"manualField\",\n \"resolver\": \"manual-form-field-by-name\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"fieldName\",\n \"controlType\"\n ],\n \"properties\": {\n \"fieldName\": {\n \"type\": \"string\"\n },\n \"controlType\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"sectionId\": {\n \"type\": \"string\"\n },\n \"source\": {\n \"enum\": [\n \"manual-template\",\n \"detected-component\",\n \"metadata-bridge\"\n ]\n },\n \"delegateFieldMetadataTo\": {\n \"enum\": [\n \"praxis-metadata-editor\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"manual-field-add\",\n \"handlerContract\": {\n \"reads\": [\n \"ManualFormInstance.currentConfig\",\n \"ManualFormInstance.currentFieldMetadata\",\n \"ManualFieldKeyService\",\n \"dynamic-fields-control-discovery\"\n ],\n \"writes\": [\n \"currentConfig.fieldMetadata\",\n \"currentFieldMetadata\",\n \"form\"\n ],\n \"identityKeys\": [\n \"fieldName\"\n ],\n \"failureModes\": [\n \"duplicate-manual-field-id\",\n \"control-type-not-discovered\",\n \"host-template-field-missing\",\n \"field-metadata-delegation-required\"\n ],\n \"description\": \"Adds metadata for a manual field while preserving host-owned template layout and delegating advanced FieldMetadata edits.\"\n }\n }\n ],\n \"validators\": [\n \"manual-field-id-unique\",\n \"control-type-discovered\",\n \"host-template-field-exists\",\n \"metadata-bridge-does-not-redefine-schema\",\n \"manual-form-round-trip\"\n ],\n \"affectedPaths\": [\n \"currentConfig.fieldMetadata\",\n \"currentFieldMetadata\",\n \"form\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"manual-form-instance-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"manualField.remove\",\n \"title\": \"Remove manual field metadata\",\n \"scope\": \"field\",\n \"targetKind\": \"manualField\",\n \"target\": {\n \"kind\": \"manualField\",\n \"resolver\": \"manual-form-field-by-name\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"fieldName\"\n ],\n \"properties\": {\n \"fieldName\": {\n \"type\": \"string\"\n },\n \"removeFromLayout\": {\n \"type\": \"boolean\"\n },\n \"clearPersistedValue\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"manual-field-remove\",\n \"handlerContract\": {\n \"reads\": [\n \"ManualFormInstance.currentConfig\",\n \"ManualFormInstance.currentFieldMetadata\",\n \"ManualFormInstance.form\",\n \"FormConfig.sections\"\n ],\n \"writes\": [\n \"currentConfig.fieldMetadata\",\n \"currentConfig.sections\",\n \"currentFieldMetadata\",\n \"form\"\n ],\n \"identityKeys\": [\n \"fieldName\"\n ],\n \"failureModes\": [\n \"manual-field-not-found\",\n \"field-still-referenced-by-layout\",\n \"persisted-value-removal-not-confirmed\"\n ],\n \"description\": \"Removes a manual field by stable field name and requires explicit confirmation before metadata, layout or value loss.\"\n }\n }\n ],\n \"destructive\": true,\n \"requiresConfirmation\": true,\n \"validators\": [\n \"manual-field-exists\",\n \"field-removal-confirmed\",\n \"layout-field-references-valid\",\n \"manual-form-round-trip\"\n ],\n \"affectedPaths\": [\n \"currentConfig.fieldMetadata\",\n \"currentConfig.sections\",\n \"currentFieldMetadata\",\n \"form\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"manual-form-instance-loaded\",\n \"explicit-confirmation-provided\"\n ]\n },\n {\n \"operationId\": \"manualField.label.set\",\n \"title\": \"Set manual field label\",\n \"scope\": \"field\",\n \"targetKind\": \"manualField\",\n \"target\": {\n \"kind\": \"manualField\",\n \"resolver\": \"manual-form-field-by-name\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": true\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"fieldName\",\n \"label\"\n ],\n \"properties\": {\n \"fieldName\": {\n \"type\": \"string\"\n },\n \"label\": {\n \"type\": \"string\"\n },\n \"updatePlaceholderWhenEmpty\": {\n \"type\": \"boolean\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"manual-field-label-set\",\n \"handlerContract\": {\n \"reads\": [\n \"ManualFormInstance.currentFieldMetadata\",\n \"ManualFieldMetadataBridgeService\"\n ],\n \"writes\": [\n \"currentConfig.fieldMetadata[].label\",\n \"currentConfig.fieldMetadata[].placeholder\",\n \"currentFieldMetadata\"\n ],\n \"identityKeys\": [\n \"fieldName\"\n ],\n \"failureModes\": [\n \"manual-field-not-found\",\n \"label-empty\",\n \"metadata-patch-rejected\"\n ],\n \"description\": \"Sets a manual field label through the metadata bridge without redefining backend schema semantics.\"\n }\n }\n ],\n \"validators\": [\n \"manual-field-exists\",\n \"field-label-valid\",\n \"metadata-bridge-does-not-redefine-schema\",\n \"manual-form-round-trip\"\n ],\n \"affectedPaths\": [\n \"currentConfig.fieldMetadata[].label\",\n \"currentConfig.fieldMetadata[].placeholder\",\n \"currentFieldMetadata\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"manual-form-instance-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"layout.configure\",\n \"title\": \"Configure manual form layout\",\n \"scope\": \"layout\",\n \"targetKind\": \"layout\",\n \"target\": {\n \"kind\": \"layout\",\n \"resolver\": \"manual-form-layout\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"usePathNames\": {\n \"type\": \"boolean\"\n },\n \"sections\": {\n \"type\": \"array\"\n },\n \"rows\": {\n \"type\": \"array\"\n },\n \"columns\": {\n \"type\": \"array\"\n },\n \"fieldOrder\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"delegateAdvancedFormConfigTo\": {\n \"enum\": [\n \"praxis-dynamic-form\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"manual-layout-configure\",\n \"handlerContract\": {\n \"reads\": [\n \"ManualFormInstance.currentConfig\",\n \"FormConfig.sections\",\n \"host-template-layout\",\n \"praxis-dynamic-form-authoring-manifest\"\n ],\n \"writes\": [\n \"currentConfig.sections\",\n \"usePathNames\"\n ],\n \"identityKeys\": [\n \"sectionId\",\n \"rowId\",\n \"columnId\",\n \"fieldName\"\n ],\n \"failureModes\": [\n \"layout-field-reference-missing\",\n \"advanced-form-config-delegation-required\",\n \"host-template-layout-conflict\"\n ],\n \"description\": \"Configures manual layout metadata and delegates advanced FormConfig layout semantics to the dynamic-form manifest.\"\n }\n }\n ],\n \"validators\": [\n \"layout-field-references-valid\",\n \"manual-layout-does-not-replace-host-template\",\n \"delegates-form-config\",\n \"manual-form-round-trip\"\n ],\n \"affectedPaths\": [\n \"currentConfig.sections\",\n \"usePathNames\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"manual-form-instance-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"toolbar.configure\",\n \"title\": \"Configure manual form customization toolbar\",\n \"scope\": \"toolbarUi\",\n \"targetKind\": \"toolbar\",\n \"target\": {\n \"kind\": \"toolbar\",\n \"resolver\": \"manual-form-customization-toolbar\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enableCustomization\": {\n \"type\": \"boolean\"\n },\n \"editableFlags\": {\n \"type\": \"array\",\n \"items\": {\n \"enum\": [\n \"required\",\n \"readOnly\",\n \"hidden\",\n \"disabled\",\n \"openMetadataEditor\"\n ]\n }\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"manual-toolbar-configure\",\n \"handlerContract\": {\n \"reads\": [\n \"ManualFormComponent.enableCustomization\",\n \"ManualFieldToolbarComponent\",\n \"ManualFieldEditorOnDblclickDirective\"\n ],\n \"writes\": [\n \"enableCustomization\"\n ],\n \"identityKeys\": [\n \"formId\"\n ],\n \"failureModes\": [\n \"toolbar-disabled-with-required-bridge\",\n \"unsupported-toolbar-flag\"\n ],\n \"description\": \"Configures the manual customization toolbar and keeps metadata edit entry points behind enableCustomization.\"\n }\n }\n ],\n \"validators\": [\n \"toolbar-flags-supported\",\n \"metadata-bridge-gated-by-customization\",\n \"manual-form-round-trip\"\n ],\n \"affectedPaths\": [\n \"enableCustomization\"\n ],\n \"submissionImpact\": \"visual-only\",\n \"preconditions\": [\n \"manual-form-component-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"autosave.enabled.set\",\n \"title\": \"Set manual form autosave policy\",\n \"scope\": \"interaction\",\n \"targetKind\": \"autosave\",\n \"target\": {\n \"kind\": \"autosave\",\n \"resolver\": \"manual-form-autosave-policy\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"required\": [\n \"enabled\"\n ],\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"debounceMs\": {\n \"type\": \"number\"\n },\n \"storageKey\": {\n \"type\": \"string\"\n },\n \"namespace\": {\n \"type\": \"string\"\n },\n \"tenantId\": {\n \"type\": \"string\"\n },\n \"profileId\": {\n \"type\": \"string\"\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"manual-autosave-enabled-set\",\n \"handlerContract\": {\n \"reads\": [\n \"enableAutoSave\",\n \"autoSaveDebounceMs\",\n \"ManualFormPersistenceOptions\",\n \"ASYNC_CONFIG_STORAGE\"\n ],\n \"writes\": [\n \"enableAutoSave\",\n \"autoSaveDebounceMs\",\n \"persistenceOptions\"\n ],\n \"identityKeys\": [\n \"formId\",\n \"storageKey\",\n \"namespace\",\n \"tenantId\",\n \"profileId\"\n ],\n \"failureModes\": [\n \"autosave-storage-missing\",\n \"unsafe-debounce\",\n \"ambiguous-storage-key\",\n \"ssr-storage-not-safe\"\n ],\n \"description\": \"Sets autosave explicitly and requires safe debounce plus deterministic persistence key composition.\"\n }\n }\n ],\n \"validators\": [\n \"autosave-explicit\",\n \"autosave-debounce-safe\",\n \"autosave-storage-available\",\n \"persistence-key-deterministic\",\n \"manual-form-round-trip\"\n ],\n \"affectedPaths\": [\n \"enableAutoSave\",\n \"autoSaveDebounceMs\",\n \"persistenceOptions\"\n ],\n \"submissionImpact\": \"config-only\",\n \"preconditions\": [\n \"manual-form-instance-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"submitBehavior.set\",\n \"title\": \"Set manual form submit behavior\",\n \"scope\": \"interaction\",\n \"targetKind\": \"submitBehavior\",\n \"target\": {\n \"kind\": \"submitBehavior\",\n \"resolver\": \"manual-form-submit-behavior\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"action\": {\n \"enum\": [\n \"submit\",\n \"saveDraft\",\n \"reset\",\n \"cancel\",\n \"custom\"\n ]\n },\n \"clearAfterSave\": {\n \"type\": \"boolean\"\n },\n \"focusFirstError\": {\n \"type\": \"boolean\"\n },\n \"scrollToErrors\": {\n \"type\": \"boolean\"\n },\n \"confirmOnUnsavedChanges\": {\n \"type\": \"boolean\"\n },\n \"delegateFormSubmitTo\": {\n \"enum\": [\n \"praxis-dynamic-form\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"manual-submit-behavior-set\",\n \"handlerContract\": {\n \"reads\": [\n \"ManualFormComponent.submitted\",\n \"ManualFormInstance.form\",\n \"FormConfig.behavior\",\n \"praxis-dynamic-form-authoring-manifest\"\n ],\n \"writes\": [\n \"currentConfig.behavior\",\n \"submitted\",\n \"saved\",\n \"resetEvent\"\n ],\n \"identityKeys\": [\n \"formId\",\n \"action\"\n ],\n \"failureModes\": [\n \"submit-action-unsupported\",\n \"advanced-form-submit-delegation-required\",\n \"validation-focus-target-missing\"\n ],\n \"description\": \"Configures manual submit/reset behavior and delegates dynamic-form submit payload semantics to the dynamic-form manifest.\"\n }\n }\n ],\n \"validators\": [\n \"submit-behavior-supported\",\n \"delegates-form-config\",\n \"manual-form-round-trip\"\n ],\n \"affectedPaths\": [\n \"currentConfig.behavior\",\n \"submitted\",\n \"saved\",\n \"resetEvent\"\n ],\n \"submissionImpact\": \"affects-submission\",\n \"preconditions\": [\n \"manual-form-instance-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n },\n {\n \"operationId\": \"metadataBridge.configure\",\n \"title\": \"Configure manual metadata bridge\",\n \"scope\": \"fieldMetadataPath\",\n \"targetKind\": \"metadataBridge\",\n \"target\": {\n \"kind\": \"metadataBridge\",\n \"resolver\": \"manual-field-metadata-bridge\",\n \"ambiguityPolicy\": \"fail\",\n \"required\": false\n },\n \"inputSchema\": {\n \"type\": \"object\",\n \"minProperties\": 1,\n \"properties\": {\n \"enabled\": {\n \"type\": \"boolean\"\n },\n \"fieldName\": {\n \"type\": \"string\"\n },\n \"openMode\": {\n \"enum\": [\n \"field-toolbar\",\n \"double-click\",\n \"programmatic\"\n ]\n },\n \"persistDraftAfterPatch\": {\n \"type\": \"boolean\"\n },\n \"delegateFieldMetadataTo\": {\n \"enum\": [\n \"praxis-metadata-editor\"\n ]\n },\n \"delegateControlDiscoveryTo\": {\n \"enum\": [\n \"praxis-dynamic-fields\"\n ]\n }\n }\n },\n \"effects\": [\n {\n \"kind\": \"compile-domain-patch\",\n \"handler\": \"manual-metadata-bridge-configure\",\n \"handlerContract\": {\n \"reads\": [\n \"ManualFieldMetadataBridgeService\",\n \"SettingsPanelService\",\n \"PRAXIS_METADATA_EDITOR_AUTHORING_MANIFEST\",\n \"dynamic-fields-discovery\"\n ],\n \"writes\": [\n \"enableCustomization\",\n \"currentFieldMetadata\",\n \"currentConfig.fieldMetadata\"\n ],\n \"identityKeys\": [\n \"formId\",\n \"fieldName\",\n \"openMode\"\n ],\n \"failureModes\": [\n \"metadata-editor-unavailable\",\n \"field-metadata-delegation-required\",\n \"control-discovery-delegation-required\",\n \"draft-persistence-failed\"\n ],\n \"description\": \"Configures the bridge that opens metadata-editor for manual fields and persists accepted patches through ManualFormInstance.\"\n }\n }\n ],\n \"validators\": [\n \"metadata-bridge-does-not-redefine-schema\",\n \"delegates-field-metadata\",\n \"control-type-discovered\",\n \"metadata-bridge-gated-by-customization\",\n \"manual-form-round-trip\"\n ],\n \"affectedPaths\": [\n \"enableCustomization\",\n \"currentFieldMetadata\",\n \"currentConfig.fieldMetadata\"\n ],\n \"submissionImpact\": \"affects-schema-backed-data\",\n \"preconditions\": [\n \"manual-form-instance-loaded\"\n ],\n \"destructive\": false,\n \"requiresConfirmation\": false\n }\n ],\n \"validators\": [\n {\n \"validatorId\": \"manual-field-id-unique\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_FIELD_ID_UNIQUE\",\n \"description\": \"Manual field names must be unique in the instance metadata map.\"\n },\n {\n \"validatorId\": \"manual-field-exists\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_FIELD_EXISTS\",\n \"description\": \"Target manual field must exist before patching or removing it.\"\n },\n {\n \"validatorId\": \"field-removal-confirmed\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_FIELD_REMOVAL_CONFIRMED\",\n \"description\": \"Removing a field or its persisted value requires explicit confirmation.\"\n },\n {\n \"validatorId\": \"field-label-valid\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_FIELD_LABEL_VALID\",\n \"description\": \"Manual field label must be a non-empty user-facing string.\"\n },\n {\n \"validatorId\": \"host-template-field-exists\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_HOST_FIELD_EXISTS\",\n \"description\": \"Manual field metadata must correspond to a host template control or declared metadata bridge target.\"\n },\n {\n \"validatorId\": \"control-type-discovered\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_CONTROL_TYPE_DISCOVERED\",\n \"description\": \"Control type must be discovered through dynamic-fields mappings or delegated discovery.\"\n },\n {\n \"validatorId\": \"metadata-bridge-does-not-redefine-schema\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_METADATA_BRIDGE_SCHEMA_SAFE\",\n \"description\": \"Metadata bridge patches must not silently redefine backend schema or schema-driven FormConfig semantics.\"\n },\n {\n \"validatorId\": \"delegates-field-metadata\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_DELEGATES_FIELD_METADATA\",\n \"description\": \"Advanced FieldMetadata edits must be delegated to the metadata-editor manifest.\"\n },\n {\n \"validatorId\": \"delegates-form-config\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_DELEGATES_FORM_CONFIG\",\n \"description\": \"Advanced FormConfig semantics must be delegated to the dynamic-form manifest.\"\n },\n {\n \"validatorId\": \"layout-field-references-valid\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_LAYOUT_FIELD_REFERENCES_VALID\",\n \"description\": \"Layout field references must resolve to manual fields.\"\n },\n {\n \"validatorId\": \"manual-layout-does-not-replace-host-template\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_LAYOUT_HOST_TEMPLATE_SAFE\",\n \"description\": \"Manual layout metadata must not pretend to rewrite host-owned HTML template structure.\"\n },\n {\n \"validatorId\": \"toolbar-flags-supported\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_TOOLBAR_FLAGS_SUPPORTED\",\n \"description\": \"Toolbar quick edit flags must be supported by the manual field toolbar.\"\n },\n {\n \"validatorId\": \"metadata-bridge-gated-by-customization\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_METADATA_BRIDGE_GATED\",\n \"description\": \"Metadata bridge entry points must respect enableCustomization.\"\n },\n {\n \"validatorId\": \"autosave-explicit\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_AUTOSAVE_EXPLICIT\",\n \"description\": \"Autosave enablement and persistence policy must be explicit.\"\n },\n {\n \"validatorId\": \"autosave-debounce-safe\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_AUTOSAVE_DEBOUNCE_SAFE\",\n \"description\": \"Autosave debounce must be positive and safe for storage backends.\"\n },\n {\n \"validatorId\": \"autosave-storage-available\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_AUTOSAVE_STORAGE_AVAILABLE\",\n \"description\": \"Autosave requires a valid AsyncConfigStorage implementation.\"\n },\n {\n \"validatorId\": \"persistence-key-deterministic\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_PERSISTENCE_KEY_DETERMINISTIC\",\n \"description\": \"Persistence key composition must be deterministic across reopen/reload.\"\n },\n {\n \"validatorId\": \"submit-behavior-supported\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_SUBMIT_BEHAVIOR_SUPPORTED\",\n \"description\": \"Submit behavior must map to supported manual form outputs or delegated dynamic-form semantics.\"\n },\n {\n \"validatorId\": \"manual-form-round-trip\",\n \"level\": \"error\",\n \"code\": \"MANUAL_FORM_ROUND_TRIP\",\n \"description\": \"Open, edit, apply/save, reopen and runtime consume must preserve manual form config.\"\n }\n ],\n \"roundTripRequirements\": [\n \"ManualFormInstance is the package-level runtime document: config, field metadata map, FormGroup and persistence key must remain coherent.\",\n \"Manual field ids are stable field names; array indexes are not canonical identity.\",\n \"Field removal is destructive and requires confirmation before metadata, layout references or persisted values are removed.\",\n \"Autosave must be explicit, have a safe debounce and use deterministic persistence key composition through ManualFormPersistenceOptions.\",\n \"The metadata bridge may apply metadata-editor patches but must not silently redefine backend schema or duplicate FieldMetadata semantics.\",\n \"Advanced FormConfig authoring belongs to praxis-dynamic-form; this manifest governs manual form orchestration and delegates deeper FormConfig semantics.\"\n ],\n \"examples\": [\n {\n \"id\": \"add-text-field\",\n \"request\": \"Add a manual text field for customer name.\",\n \"operationId\": \"manualField.add\",\n \"params\": {\n \"fieldName\": \"customerName\",\n \"controlType\": \"input\",\n \"label\": \"Customer name\",\n \"source\": \"manual-template\",\n \"delegateFieldMetadataTo\": \"praxis-metadata-editor\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"remove-obsolete-field\",\n \"request\": \"Remove the obsolete nickname field from the manual form.\",\n \"operationId\": \"manualField.remove\",\n \"params\": {\n \"fieldName\": \"nickname\",\n \"removeFromLayout\": true,\n \"clearPersistedValue\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"rename-label\",\n \"request\": \"Change the label of cpf to CPF/CNPJ.\",\n \"operationId\": \"manualField.label.set\",\n \"params\": {\n \"fieldName\": \"cpf\",\n \"label\": \"CPF/CNPJ\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"enable-path-names\",\n \"request\": \"Use nested form paths as field names.\",\n \"operationId\": \"layout.configure\",\n \"params\": {\n \"usePathNames\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-toolbar\",\n \"request\": \"Enable customization toolbar with required and hidden toggles.\",\n \"operationId\": \"toolbar.configure\",\n \"params\": {\n \"enableCustomization\": true,\n \"editableFlags\": [\n \"required\",\n \"hidden\",\n \"openMetadataEditor\"\n ]\n },\n \"isPositive\": true\n },\n {\n \"id\": \"enable-autosave\",\n \"request\": \"Enable autosave every second for this tenant profile.\",\n \"operationId\": \"autosave.enabled.set\",\n \"params\": {\n \"enabled\": true,\n \"debounceMs\": 1000,\n \"namespace\": \"sales\",\n \"tenantId\": \"acme\",\n \"profileId\": \"admin\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"set-submit-behavior\",\n \"request\": \"Focus the first invalid field and scroll to errors on submit.\",\n \"operationId\": \"submitBehavior.set\",\n \"params\": {\n \"action\": \"submit\",\n \"focusFirstError\": true,\n \"scrollToErrors\": true\n },\n \"isPositive\": true\n },\n {\n \"id\": \"configure-metadata-bridge\",\n \"request\": \"Open metadata editor from the toolbar and persist draft after patch.\",\n \"operationId\": \"metadataBridge.configure\",\n \"params\": {\n \"enabled\": true,\n \"openMode\": \"field-toolbar\",\n \"persistDraftAfterPatch\": true,\n \"delegateFieldMetadataTo\": \"praxis-metadata-editor\",\n \"delegateControlDiscoveryTo\": \"praxis-dynamic-fields\"\n },\n \"isPositive\": true\n },\n {\n \"id\": \"reject-duplicate-field\",\n \"request\": \"Add another customerName field with a different label.\",\n \"operationId\": \"manualField.add\",\n \"params\": {\n \"fieldName\": \"customerName\",\n \"controlType\": \"input\",\n \"label\": \"Duplicate customer\"\n },\n \"isPositive\": false\n },\n {\n \"id\": \"reject-unconfirmed-removal\",\n \"request\": \"Remove email and clear its saved value without confirmation.\",\n \"operationId\": \"manualField.remove\",\n \"params\": {\n \"fieldName\": \"email\",\n \"clearPersistedValue\": true\n },\n \"isPositive\": false\n },\n {\n \"id\": \"reject-unsafe-autosave\",\n \"request\": \"Autosave every millisecond with no storage identity.\",\n \"operationId\": \"autosave.enabled.set\",\n \"params\": {\n \"enabled\": true,\n \"debounceMs\": 1\n },\n \"isPositive\": false\n },\n {\n \"id\": \"reject-schema-redefinition\",\n \"request\": \"Use manual form metadata bridge to replace the backend schema for cpf.\",\n \"operationId\": \"metadataBridge.configure\",\n \"params\": {\n \"enabled\": true,\n \"fieldName\": \"cpf\",\n \"backendSchemaOverride\": {\n \"type\": \"number\"\n }\n },\n \"isPositive\": false\n }\n ]\n}",
|
|
4345
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"identity\"}",
|
|
4306
4346
|
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4307
|
-
"contentHash": "
|
|
4347
|
+
"contentHash": "056e0a638a87c288dfb507ff43b2305d203406cd7a972f10c4dd16a0218cbb04",
|
|
4308
4348
|
"sourceKind": "component_definition",
|
|
4309
4349
|
"sourceId": "praxis-manual-form",
|
|
4310
4350
|
"corpusVersion": "1.0.0"
|
|
4311
4351
|
},
|
|
4312
4352
|
{
|
|
4313
|
-
"chunkIndex":
|
|
4353
|
+
"chunkIndex": 7,
|
|
4354
|
+
"chunkKind": "authoring_manifest",
|
|
4355
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"runtimeInputs\",\"runtimeInputs\":[{\"name\":\"formId\",\"type\":\"string\",\"description\":\"Required manual form id used for runtime state and persistence key composition.\"},{\"name\":\"formGroup\",\"type\":\"FormGroup | null\",\"description\":\"Host-owned typed FormGroup adopted by the manual form runtime when provided.\"},{\"name\":\"formTitle\",\"type\":\"string | null\",\"description\":\"Manual form title override.\"},{\"name\":\"formDescription\",\"type\":\"string | null\",\"description\":\"Manual form description override.\"},{\"name\":\"actions\",\"type\":\"FormActionsLayout | null\",\"description\":\"Manual toolbar/actions layout.\"},{\"name\":\"enableAutoSave\",\"type\":\"boolean\",\"description\":\"Enables draft persistence through ManualFormInstance.saveDraft.\"},{\"name\":\"autoSaveDebounceMs\",\"type\":\"number\",\"description\":\"Autosave debounce in milliseconds.\"},{\"name\":\"enableCustomization\",\"type\":\"boolean\",\"description\":\"Enables field toolbar and metadata editor bridge.\"},{\"name\":\"persistenceOptions\",\"type\":\"ManualFormPersistenceOptions | null\",\"description\":\"Namespace, tenant, profile, locale and storage key controls.\"},{\"name\":\"usePathNames\",\"type\":\"boolean\",\"description\":\"Uses FormControlName.path as FieldMetadata.name for nested manual forms.\"}]}",
|
|
4356
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4357
|
+
"contentHash": "72ef35766278a3004fb407774d5584a43cf69ed711c6c97808833d9a31e8f78e",
|
|
4358
|
+
"sourceKind": "component_definition",
|
|
4359
|
+
"sourceId": "praxis-manual-form",
|
|
4360
|
+
"corpusVersion": "1.0.0"
|
|
4361
|
+
},
|
|
4362
|
+
{
|
|
4363
|
+
"chunkIndex": 8,
|
|
4364
|
+
"chunkKind": "authoring_manifest",
|
|
4365
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"editableTargets\",\"editableTargets\":[{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"description\":\"Detected or declared manual field tracked by ManualFormInstance field metadata.\"},{\"kind\":\"layout\",\"resolver\":\"manual-form-layout\",\"description\":\"Manual layout ownership: host template layout plus optional FormConfig sections for authored structure.\"},{\"kind\":\"toolbar\",\"resolver\":\"manual-form-customization-toolbar\",\"description\":\"Customization toolbar and quick metadata toggles.\"},{\"kind\":\"autosave\",\"resolver\":\"manual-form-autosave-policy\",\"description\":\"Autosave enablement, debounce and persistence key controls.\"},{\"kind\":\"metadataBridge\",\"resolver\":\"manual-field-metadata-bridge\",\"description\":\"Bridge from manual fields to @praxisui/metadata-editor patches.\"},{\"kind\":\"submitBehavior\",\"resolver\":\"manual-form-submit-behavior\",\"description\":\"Submit, reset, validation focus and unsaved-change behavior.\"}]}",
|
|
4366
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4367
|
+
"contentHash": "cc46e6fddac49c62028ecfa4610f9e68c1c2a89d52d1e64f926be8dd94a6cb0b",
|
|
4368
|
+
"sourceKind": "component_definition",
|
|
4369
|
+
"sourceId": "praxis-manual-form",
|
|
4370
|
+
"corpusVersion": "1.0.0"
|
|
4371
|
+
},
|
|
4372
|
+
{
|
|
4373
|
+
"chunkIndex": 9,
|
|
4374
|
+
"chunkKind": "authoring_manifest",
|
|
4375
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"manualField.add\",\"title\":\"Add manual field metadata\",\"scope\":\"field\",\"targetKind\":\"manualField\",\"target\":{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"fieldName\",\"controlType\"],\"properties\":{\"fieldName\":{\"type\":\"string\"},\"controlType\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"required\":{\"type\":\"boolean\"},\"sectionId\":{\"type\":\"string\"},\"source\":{\"enum\":[\"manual-template\",\"detected-component\",\"metadata-bridge\"]},\"delegateFieldMetadataTo\":{\"enum\":[\"praxis-metadata-editor\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-field-add\",\"handlerContract\":{\"reads\":[\"ManualFormInstance.currentConfig\",\"ManualFormInstance.currentFieldMetadata\",\"ManualFieldKeyService\",\"dynamic-fields-control-discovery\"],\"writes\":[\"currentConfig.fieldMetadata\",\"currentFieldMetadata\",\"form\"],\"identityKeys\":[\"fieldName\"],\"failureModes\":[\"duplicate-manual-field-id\",\"control-type-not-discovered\",\"host-template-field-missing\",\"field-metadata-delegation-required\"],\"description\":\"Adds metadata for a manual field while preserving host-owned template layout and delegating advanced FieldMetadata edits.\"}}],\"validators\":[\"manual-field-id-unique\",\"control-type-discovered\",\"host-template-field-exists\",\"metadata-bridge-does-not-redefine-schema\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.fieldMetadata\",\"currentFieldMetadata\",\"form\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"manualField.remove\",\"title\":\"Remove manual field metadata\",\"scope\":\"field\",\"targetKind\":\"manualField\",\"target\":{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"fieldName\"],\"properties\":{\"fieldName\":{\"type\":\"string\"},\"removeFromLayout\":{\"type\":\"boolean\"},\"clearPersistedValue\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-field-remove\",\"handlerContract\":{\"reads\":[\"ManualFormInstance.currentConfig\",\"ManualFormInstance.currentFieldMetadata\",\"ManualFormInstance.form\",\"FormConfig.sections\"],\"writes\":[\"currentConfig.fieldMetadata\",\"currentConfig.sections\",\"currentFieldMetadata\",\"form\"],\"identityKeys\":[\"fieldName\"],\"failureModes\":[\"manual-field-not-found\",\"field-still-referenced-by-layout\",\"persisted-value-removal-not-confirmed\"],\"description\":\"Removes a manual field by stable field name and requires explicit confirmation before metadata, layout or value loss.\"}}],\"destructive\":true,\"requiresConfirmation\":true,\"validators\":[\"manual-field-exists\",\"field-removal-confirmed\",\"layout-field-references-valid\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.fieldMetadata\",\"currentConfig.sections\",\"currentFieldMetadata\",\"form\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"manual-form-instance-loaded\",\"explicit-confirmation-provided\"]},{\"operationId\":\"manualField.label.set\",\"title\":\"Set manual field label\",\"scope\":\"field\",\"targetKind\":\"manualField\",\"target\":{\"kind\":\"manualField\",\"resolver\":\"manual-form-field-by-name\",\"ambiguityPolicy\":\"fail\",\"required\":true},\"inputSchema\":{\"type\":\"object\",\"required\":[\"fieldName\",\"label\"],\"properties\":{\"fieldName\":{\"type\":\"string\"},\"label\":{\"type\":\"string\"},\"updatePlaceholderWhenEmpty\":{\"type\":\"boolean\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-field-label-set\",\"handlerContract\":{\"reads\":[\"ManualFormInstance.currentFieldMetadata\",\"ManualFieldMetadataBridgeService\"],\"writes\":[\"currentConfig.fieldMetadata[].label\",\"currentConfig.fieldMetadata[].placeholder\",\"currentFieldMetadata\"],\"identityKeys\":[\"fieldName\"],\"failureModes\":[\"manual-field-not-found\",\"label-empty\",\"metadata-patch-rejected\"],\"description\":\"Sets a manual field label through the metadata bridge without redefining backend schema semantics.\"}}],\"validators\":[\"manual-field-exists\",\"field-label-valid\",\"metadata-bridge-does-not-redefine-schema\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.fieldMetadata[].label\",\"currentConfig.fieldMetadata[].placeholder\",\"currentFieldMetadata\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"layout.configure\",\"title\":\"Configure manual form layout\",\"scope\":\"layout\",\"targetKind\":\"layout\",\"target\":{\"kind\":\"layout\",\"resolver\":\"manual-form-layout\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"usePathNames\":{\"type\":\"boolean\"},\"sections\":{\"type\":\"array\"},\"rows\":{\"type\":\"array\"},\"columns\":{\"type\":\"array\"},\"fieldOrder\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"delegateAdvancedFormConfigTo\":{\"enum\":[\"praxis-dynamic-form\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-layout-configure\",\"handlerContract\":{\"reads\":[\"ManualFormInstance.currentConfig\",\"FormConfig.sections\",\"host-template-layout\",\"praxis-dynamic-form-authoring-manifest\"],\"writes\":[\"currentConfig.sections\",\"usePathNames\"],\"identityKeys\":[\"sectionId\",\"rowId\",\"columnId\",\"fieldName\"],\"failureModes\":[\"layout-field-reference-missing\",\"advanced-form-config-delegation-required\",\"host-template-layout-conflict\"],\"description\":\"Configures manual layout metadata and delegates advanced FormConfig layout semantics to the dynamic-form manifest.\"}}],\"validators\":[\"layout-field-references-valid\",\"manual-layout-does-not-replace-host-template\",\"delegates-form-config\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.sections\",\"usePathNames\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"toolbar.configure\",\"title\":\"Configure manual form customization toolbar\",\"scope\":\"toolbarUi\",\"targetKind\":\"toolbar\",\"target\":{\"kind\":\"toolbar\",\"resolver\":\"manual-form-customization-toolbar\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"enableCustomization\":{\"type\":\"boolean\"},\"editableFlags\":{\"type\":\"array\",\"items\":{\"enum\":[\"required\",\"readOnly\",\"hidden\",\"disabled\",\"openMetadataEditor\"]}}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-toolbar-configure\",\"handlerContract\":{\"reads\":[\"ManualFormComponent.enableCustomization\",\"ManualFieldToolbarComponent\",\"ManualFieldEditorOnDblclickDirective\"],\"writes\":[\"enableCustomization\"],\"identityKeys\":[\"formId\"],\"failureModes\":[\"toolbar-disabled-with-required-bridge\",\"unsupported-toolbar-flag\"],\"description\":\"Configures the manual customization toolbar and keeps metadata edit entry points behind enableCustomization.\"}}],\"validators\":[\"toolbar-flags-supported\",\"metadata-bridge-gated-by-customization\",\"manual-form-round-trip\"],\"affectedPaths\":[\"enableCustomization\"],\"submissionImpact\":\"visual-only\",\"preconditions\":[\"manual-form-component-loaded\"],\"destructive\":false,\"requiresConfirmation\":false}]}",
|
|
4376
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4377
|
+
"contentHash": "09548ccc91117a8e5d7940803eacc93d1d920b4bb10ad8956eea6e42d636bc14",
|
|
4378
|
+
"sourceKind": "component_definition",
|
|
4379
|
+
"sourceId": "praxis-manual-form",
|
|
4380
|
+
"corpusVersion": "1.0.0"
|
|
4381
|
+
},
|
|
4382
|
+
{
|
|
4383
|
+
"chunkIndex": 10,
|
|
4384
|
+
"chunkKind": "authoring_manifest",
|
|
4385
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"operations\",\"operations\":[{\"operationId\":\"autosave.enabled.set\",\"title\":\"Set manual form autosave policy\",\"scope\":\"interaction\",\"targetKind\":\"autosave\",\"target\":{\"kind\":\"autosave\",\"resolver\":\"manual-form-autosave-policy\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"required\":[\"enabled\"],\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"debounceMs\":{\"type\":\"number\"},\"storageKey\":{\"type\":\"string\"},\"namespace\":{\"type\":\"string\"},\"tenantId\":{\"type\":\"string\"},\"profileId\":{\"type\":\"string\"}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-autosave-enabled-set\",\"handlerContract\":{\"reads\":[\"enableAutoSave\",\"autoSaveDebounceMs\",\"ManualFormPersistenceOptions\",\"ASYNC_CONFIG_STORAGE\"],\"writes\":[\"enableAutoSave\",\"autoSaveDebounceMs\",\"persistenceOptions\"],\"identityKeys\":[\"formId\",\"storageKey\",\"namespace\",\"tenantId\",\"profileId\"],\"failureModes\":[\"autosave-storage-missing\",\"unsafe-debounce\",\"ambiguous-storage-key\",\"ssr-storage-not-safe\"],\"description\":\"Sets autosave explicitly and requires safe debounce plus deterministic persistence key composition.\"}}],\"validators\":[\"autosave-explicit\",\"autosave-debounce-safe\",\"autosave-storage-available\",\"persistence-key-deterministic\",\"manual-form-round-trip\"],\"affectedPaths\":[\"enableAutoSave\",\"autoSaveDebounceMs\",\"persistenceOptions\"],\"submissionImpact\":\"config-only\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"submitBehavior.set\",\"title\":\"Set manual form submit behavior\",\"scope\":\"interaction\",\"targetKind\":\"submitBehavior\",\"target\":{\"kind\":\"submitBehavior\",\"resolver\":\"manual-form-submit-behavior\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"action\":{\"enum\":[\"submit\",\"saveDraft\",\"reset\",\"cancel\",\"custom\"]},\"clearAfterSave\":{\"type\":\"boolean\"},\"focusFirstError\":{\"type\":\"boolean\"},\"scrollToErrors\":{\"type\":\"boolean\"},\"confirmOnUnsavedChanges\":{\"type\":\"boolean\"},\"delegateFormSubmitTo\":{\"enum\":[\"praxis-dynamic-form\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-submit-behavior-set\",\"handlerContract\":{\"reads\":[\"ManualFormComponent.submitted\",\"ManualFormInstance.form\",\"FormConfig.behavior\",\"praxis-dynamic-form-authoring-manifest\"],\"writes\":[\"currentConfig.behavior\",\"submitted\",\"saved\",\"resetEvent\"],\"identityKeys\":[\"formId\",\"action\"],\"failureModes\":[\"submit-action-unsupported\",\"advanced-form-submit-delegation-required\",\"validation-focus-target-missing\"],\"description\":\"Configures manual submit/reset behavior and delegates dynamic-form submit payload semantics to the dynamic-form manifest.\"}}],\"validators\":[\"submit-behavior-supported\",\"delegates-form-config\",\"manual-form-round-trip\"],\"affectedPaths\":[\"currentConfig.behavior\",\"submitted\",\"saved\",\"resetEvent\"],\"submissionImpact\":\"affects-submission\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false},{\"operationId\":\"metadataBridge.configure\",\"title\":\"Configure manual metadata bridge\",\"scope\":\"fieldMetadataPath\",\"targetKind\":\"metadataBridge\",\"target\":{\"kind\":\"metadataBridge\",\"resolver\":\"manual-field-metadata-bridge\",\"ambiguityPolicy\":\"fail\",\"required\":false},\"inputSchema\":{\"type\":\"object\",\"minProperties\":1,\"properties\":{\"enabled\":{\"type\":\"boolean\"},\"fieldName\":{\"type\":\"string\"},\"openMode\":{\"enum\":[\"field-toolbar\",\"double-click\",\"programmatic\"]},\"persistDraftAfterPatch\":{\"type\":\"boolean\"},\"delegateFieldMetadataTo\":{\"enum\":[\"praxis-metadata-editor\"]},\"delegateControlDiscoveryTo\":{\"enum\":[\"praxis-dynamic-fields\"]}}},\"effects\":[{\"kind\":\"compile-domain-patch\",\"handler\":\"manual-metadata-bridge-configure\",\"handlerContract\":{\"reads\":[\"ManualFieldMetadataBridgeService\",\"SettingsPanelService\",\"PRAXIS_METADATA_EDITOR_AUTHORING_MANIFEST\",\"dynamic-fields-discovery\"],\"writes\":[\"enableCustomization\",\"currentFieldMetadata\",\"currentConfig.fieldMetadata\"],\"identityKeys\":[\"formId\",\"fieldName\",\"openMode\"],\"failureModes\":[\"metadata-editor-unavailable\",\"field-metadata-delegation-required\",\"control-discovery-delegation-required\",\"draft-persistence-failed\"],\"description\":\"Configures the bridge that opens metadata-editor for manual fields and persists accepted patches through ManualFormInstance.\"}}],\"validators\":[\"metadata-bridge-does-not-redefine-schema\",\"delegates-field-metadata\",\"control-type-discovered\",\"metadata-bridge-gated-by-customization\",\"manual-form-round-trip\"],\"affectedPaths\":[\"enableCustomization\",\"currentFieldMetadata\",\"currentConfig.fieldMetadata\"],\"submissionImpact\":\"affects-schema-backed-data\",\"preconditions\":[\"manual-form-instance-loaded\"],\"destructive\":false,\"requiresConfirmation\":false}]}",
|
|
4386
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4387
|
+
"contentHash": "67b092de2cd1d53b632467f271d4b0eac516c8a5496c8c1cc9882c452fdfda05",
|
|
4388
|
+
"sourceKind": "component_definition",
|
|
4389
|
+
"sourceId": "praxis-manual-form",
|
|
4390
|
+
"corpusVersion": "1.0.0"
|
|
4391
|
+
},
|
|
4392
|
+
{
|
|
4393
|
+
"chunkIndex": 11,
|
|
4394
|
+
"chunkKind": "authoring_manifest",
|
|
4395
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"validators\",\"validators\":[{\"validatorId\":\"manual-field-id-unique\",\"level\":\"error\",\"code\":\"MANUAL_FORM_FIELD_ID_UNIQUE\",\"description\":\"Manual field names must be unique in the instance metadata map.\"},{\"validatorId\":\"manual-field-exists\",\"level\":\"error\",\"code\":\"MANUAL_FORM_FIELD_EXISTS\",\"description\":\"Target manual field must exist before patching or removing it.\"},{\"validatorId\":\"field-removal-confirmed\",\"level\":\"error\",\"code\":\"MANUAL_FORM_FIELD_REMOVAL_CONFIRMED\",\"description\":\"Removing a field or its persisted value requires explicit confirmation.\"},{\"validatorId\":\"field-label-valid\",\"level\":\"error\",\"code\":\"MANUAL_FORM_FIELD_LABEL_VALID\",\"description\":\"Manual field label must be a non-empty user-facing string.\"},{\"validatorId\":\"host-template-field-exists\",\"level\":\"error\",\"code\":\"MANUAL_FORM_HOST_FIELD_EXISTS\",\"description\":\"Manual field metadata must correspond to a host template control or declared metadata bridge target.\"},{\"validatorId\":\"control-type-discovered\",\"level\":\"error\",\"code\":\"MANUAL_FORM_CONTROL_TYPE_DISCOVERED\",\"description\":\"Control type must be discovered through dynamic-fields mappings or delegated discovery.\"},{\"validatorId\":\"metadata-bridge-does-not-redefine-schema\",\"level\":\"error\",\"code\":\"MANUAL_FORM_METADATA_BRIDGE_SCHEMA_SAFE\",\"description\":\"Metadata bridge patches must not silently redefine backend schema or schema-driven FormConfig semantics.\"},{\"validatorId\":\"delegates-field-metadata\",\"level\":\"error\",\"code\":\"MANUAL_FORM_DELEGATES_FIELD_METADATA\",\"description\":\"Advanced FieldMetadata edits must be delegated to the metadata-editor manifest.\"},{\"validatorId\":\"delegates-form-config\",\"level\":\"error\",\"code\":\"MANUAL_FORM_DELEGATES_FORM_CONFIG\",\"description\":\"Advanced FormConfig semantics must be delegated to the dynamic-form manifest.\"},{\"validatorId\":\"layout-field-references-valid\",\"level\":\"error\",\"code\":\"MANUAL_FORM_LAYOUT_FIELD_REFERENCES_VALID\",\"description\":\"Layout field references must resolve to manual fields.\"},{\"validatorId\":\"manual-layout-does-not-replace-host-template\",\"level\":\"error\",\"code\":\"MANUAL_FORM_LAYOUT_HOST_TEMPLATE_SAFE\",\"description\":\"Manual layout metadata must not pretend to rewrite host-owned HTML template structure.\"},{\"validatorId\":\"toolbar-flags-supported\",\"level\":\"error\",\"code\":\"MANUAL_FORM_TOOLBAR_FLAGS_SUPPORTED\",\"description\":\"Toolbar quick edit flags must be supported by the manual field toolbar.\"},{\"validatorId\":\"metadata-bridge-gated-by-customization\",\"level\":\"error\",\"code\":\"MANUAL_FORM_METADATA_BRIDGE_GATED\",\"description\":\"Metadata bridge entry points must respect enableCustomization.\"},{\"validatorId\":\"autosave-explicit\",\"level\":\"error\",\"code\":\"MANUAL_FORM_AUTOSAVE_EXPLICIT\",\"description\":\"Autosave enablement and persistence policy must be explicit.\"},{\"validatorId\":\"autosave-debounce-safe\",\"level\":\"error\",\"code\":\"MANUAL_FORM_AUTOSAVE_DEBOUNCE_SAFE\",\"description\":\"Autosave debounce must be positive and safe for storage backends.\"},{\"validatorId\":\"autosave-storage-available\",\"level\":\"error\",\"code\":\"MANUAL_FORM_AUTOSAVE_STORAGE_AVAILABLE\",\"description\":\"Autosave requires a valid AsyncConfigStorage implementation.\"},{\"validatorId\":\"persistence-key-deterministic\",\"level\":\"error\",\"code\":\"MANUAL_FORM_PERSISTENCE_KEY_DETERMINISTIC\",\"description\":\"Persistence key composition must be deterministic across reopen/reload.\"},{\"validatorId\":\"submit-behavior-supported\",\"level\":\"error\",\"code\":\"MANUAL_FORM_SUBMIT_BEHAVIOR_SUPPORTED\",\"description\":\"Submit behavior must map to supported manual form outputs or delegated dynamic-form semantics.\"},{\"validatorId\":\"manual-form-round-trip\",\"level\":\"error\",\"code\":\"MANUAL_FORM_ROUND_TRIP\",\"description\":\"Open, edit, apply/save, reopen and runtime consume must preserve manual form config.\"}]}",
|
|
4396
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4397
|
+
"contentHash": "38b842a47d521954fbb84522acc58da85a3d6e2120b890d689b465608c9ae8f1",
|
|
4398
|
+
"sourceKind": "component_definition",
|
|
4399
|
+
"sourceId": "praxis-manual-form",
|
|
4400
|
+
"corpusVersion": "1.0.0"
|
|
4401
|
+
},
|
|
4402
|
+
{
|
|
4403
|
+
"chunkIndex": 12,
|
|
4404
|
+
"chunkKind": "authoring_manifest",
|
|
4405
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"roundTripRequirements\",\"roundTripRequirements\":[\"ManualFormInstance is the package-level runtime document: config, field metadata map, FormGroup and persistence key must remain coherent.\",\"Manual field ids are stable field names; array indexes are not canonical identity.\",\"Field removal is destructive and requires confirmation before metadata, layout references or persisted values are removed.\",\"Autosave must be explicit, have a safe debounce and use deterministic persistence key composition through ManualFormPersistenceOptions.\",\"The metadata bridge may apply metadata-editor patches but must not silently redefine backend schema or duplicate FieldMetadata semantics.\",\"Advanced FormConfig authoring belongs to praxis-dynamic-form; this manifest governs manual form orchestration and delegates deeper FormConfig semantics.\"]}",
|
|
4406
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4407
|
+
"contentHash": "630ba0749643e1407c3e07798306d2f344307f4a686985d287a7d51196fc352a",
|
|
4408
|
+
"sourceKind": "component_definition",
|
|
4409
|
+
"sourceId": "praxis-manual-form",
|
|
4410
|
+
"corpusVersion": "1.0.0"
|
|
4411
|
+
},
|
|
4412
|
+
{
|
|
4413
|
+
"chunkIndex": 13,
|
|
4414
|
+
"chunkKind": "authoring_manifest",
|
|
4415
|
+
"content": "{\"schemaVersion\":\"1.0.0\",\"manifestVersion\":\"1.0.0\",\"componentId\":\"praxis-manual-form\",\"ownerPackage\":\"@praxisui/manual-form\",\"configSchemaId\":\"ManualFormInstance\",\"chunkSection\":\"examples\",\"examples\":[{\"id\":\"add-text-field\",\"request\":\"Add a manual text field for customer name.\",\"operationId\":\"manualField.add\",\"params\":{\"fieldName\":\"customerName\",\"controlType\":\"input\",\"label\":\"Customer name\",\"source\":\"manual-template\",\"delegateFieldMetadataTo\":\"praxis-metadata-editor\"},\"isPositive\":true},{\"id\":\"remove-obsolete-field\",\"request\":\"Remove the obsolete nickname field from the manual form.\",\"operationId\":\"manualField.remove\",\"params\":{\"fieldName\":\"nickname\",\"removeFromLayout\":true,\"clearPersistedValue\":true},\"isPositive\":true},{\"id\":\"rename-label\",\"request\":\"Change the label of cpf to CPF/CNPJ.\",\"operationId\":\"manualField.label.set\",\"params\":{\"fieldName\":\"cpf\",\"label\":\"CPF/CNPJ\"},\"isPositive\":true},{\"id\":\"enable-path-names\",\"request\":\"Use nested form paths as field names.\",\"operationId\":\"layout.configure\",\"params\":{\"usePathNames\":true},\"isPositive\":true},{\"id\":\"configure-toolbar\",\"request\":\"Enable customization toolbar with required and hidden toggles.\",\"operationId\":\"toolbar.configure\",\"params\":{\"enableCustomization\":true,\"editableFlags\":[\"required\",\"hidden\",\"openMetadataEditor\"]},\"isPositive\":true},{\"id\":\"enable-autosave\",\"request\":\"Enable autosave every second for this tenant profile.\",\"operationId\":\"autosave.enabled.set\",\"params\":{\"enabled\":true,\"debounceMs\":1000,\"namespace\":\"sales\",\"tenantId\":\"acme\",\"profileId\":\"admin\"},\"isPositive\":true},{\"id\":\"set-submit-behavior\",\"request\":\"Focus the first invalid field and scroll to errors on submit.\",\"operationId\":\"submitBehavior.set\",\"params\":{\"action\":\"submit\",\"focusFirstError\":true,\"scrollToErrors\":true},\"isPositive\":true},{\"id\":\"configure-metadata-bridge\",\"request\":\"Open metadata editor from the toolbar and persist draft after patch.\",\"operationId\":\"metadataBridge.configure\",\"params\":{\"enabled\":true,\"openMode\":\"field-toolbar\",\"persistDraftAfterPatch\":true,\"delegateFieldMetadataTo\":\"praxis-metadata-editor\",\"delegateControlDiscoveryTo\":\"praxis-dynamic-fields\"},\"isPositive\":true},{\"id\":\"reject-duplicate-field\",\"request\":\"Add another customerName field with a different label.\",\"operationId\":\"manualField.add\",\"params\":{\"fieldName\":\"customerName\",\"controlType\":\"input\",\"label\":\"Duplicate customer\"},\"isPositive\":false},{\"id\":\"reject-unconfirmed-removal\",\"request\":\"Remove email and clear its saved value without confirmation.\",\"operationId\":\"manualField.remove\",\"params\":{\"fieldName\":\"email\",\"clearPersistedValue\":true},\"isPositive\":false},{\"id\":\"reject-unsafe-autosave\",\"request\":\"Autosave every millisecond with no storage identity.\",\"operationId\":\"autosave.enabled.set\",\"params\":{\"enabled\":true,\"debounceMs\":1},\"isPositive\":false},{\"id\":\"reject-schema-redefinition\",\"request\":\"Use manual form metadata bridge to replace the backend schema for cpf.\",\"operationId\":\"metadataBridge.configure\",\"params\":{\"enabled\":true,\"fieldName\":\"cpf\",\"backendSchemaOverride\":{\"type\":\"number\"}},\"isPositive\":false}]}",
|
|
4416
|
+
"sourcePointer": "projects/praxis-manual-form/src/lib/ai/praxis-manual-form-authoring-manifest.ts",
|
|
4417
|
+
"contentHash": "8f29c2271adf3515f61fa0792b374322db11e25c14e2e29f382568e7711d58f9",
|
|
4418
|
+
"sourceKind": "component_definition",
|
|
4419
|
+
"sourceId": "praxis-manual-form",
|
|
4420
|
+
"corpusVersion": "1.0.0"
|
|
4421
|
+
},
|
|
4422
|
+
{
|
|
4423
|
+
"chunkIndex": 14,
|
|
4314
4424
|
"chunkKind": "context_pack",
|
|
4315
|
-
"content": "{\n \"componentContext\": {\n \"version\": \"v1\",\n \"optionsByPath\": {\n \"fieldMetadata[].controlType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"input\",\n \"label\": \"Input\"\n },\n {\n \"value\": \"textarea\",\n \"label\": \"Textarea\"\n },\n {\n \"value\": \"email\",\n \"label\": \"Email\"\n },\n {\n \"value\": \"password\",\n \"label\": \"Password\"\n },\n {\n \"value\": \"search\",\n \"label\": \"Search\"\n },\n {\n \"value\": \"url\",\n \"label\": \"URL\"\n },\n {\n \"value\": \"phone\",\n \"label\": \"Phone\"\n },\n {\n \"value\": \"cpfCnpjInput\",\n \"label\": \"CPF/CNPJ\"\n },\n {\n \"value\": \"numericTextBox\",\n \"label\": \"Number\"\n },\n {\n \"value\": \"currency\",\n \"label\": \"Currency\"\n },\n {\n \"value\": \"priceRange\",\n \"label\": \"Price range\"\n },\n {\n \"value\": \"date\",\n \"label\": \"Date picker\"\n },\n {\n \"value\": \"dateRange\",\n \"label\": \"Date range\"\n },\n {\n \"value\": \"dateInput\",\n \"label\": \"Date input\"\n },\n {\n \"value\": \"dateTime\",\n \"label\": \"Datetime\"\n },\n {\n \"value\": \"dateTimeRange\",\n \"label\": \"Datetime range\"\n },\n {\n \"value\": \"dateTimeLocal\",\n \"label\": \"Datetime local\"\n },\n {\n \"value\": \"time\",\n \"label\": \"Time input\"\n },\n {\n \"value\": \"timePicker\",\n \"label\": \"Time picker\"\n },\n {\n \"value\": \"timeRange\",\n \"label\": \"Time range\"\n },\n {\n \"value\": \"week\",\n \"label\": \"Week input\"\n },\n {\n \"value\": \"month\",\n \"label\": \"Month input\"\n },\n {\n \"value\": \"year\",\n \"label\": \"Year input\"\n },\n {\n \"value\": \"select\",\n \"label\": \"Select\"\n },\n {\n \"value\": \"multiSelect\",\n \"label\": \"Multi select\"\n },\n {\n \"value\": \"multiSelectTree\",\n \"label\": \"Multi select tree\"\n },\n {\n \"value\": \"treeSelect\",\n \"label\": \"Tree select\"\n },\n {\n \"value\": \"transferList\",\n \"label\": \"Transfer list\"\n },\n {\n \"value\": \"autoComplete\",\n \"label\": \"Autocomplete\"\n },\n {\n \"value\": \"searchable-select\",\n \"label\": \"Searchable select\"\n },\n {\n \"value\": \"async-select\",\n \"label\": \"Async select\"\n },\n {\n \"value\": \"radio\",\n \"label\": \"Radio group\"\n },\n {\n \"value\": \"checkbox\",\n \"label\": \"Checkbox group\"\n },\n {\n \"value\": \"selectionList\",\n \"label\": \"Selection list\"\n },\n {\n \"value\": \"toggle\",\n \"label\": \"Toggle\"\n },\n {\n \"value\": \"buttonToggle\",\n \"label\": \"Button toggle\"\n },\n {\n \"value\": \"slider\",\n \"label\": \"Slider\"\n },\n {\n \"value\": \"rangeSlider\",\n \"label\": \"Range slider\"\n },\n {\n \"value\": \"rating\",\n \"label\": \"Rating\"\n },\n {\n \"value\": \"chipInput\",\n \"label\": \"Chips\"\n },\n {\n \"value\": \"chipList\",\n \"label\": \"Chip list\"\n },\n {\n \"value\": \"upload\",\n \"label\": \"File upload\"\n },\n {\n \"value\": \"color\",\n \"label\": \"Color input\"\n },\n {\n \"value\": \"colorPicker\",\n \"label\": \"Color picker\"\n },\n {\n \"value\": \"cronBuilder\",\n \"label\": \"Cron builder\"\n }\n ]\n },\n \"fieldMetadata[].source\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"schema\",\n \"label\": \"Schema field\"\n },\n {\n \"value\": \"local\",\n \"label\": \"Local field\"\n }\n ]\n },\n \"fieldMetadata[].submitPolicy\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"omit\",\n \"label\": \"Omit from submit payload\"\n },\n {\n \"value\": \"include\",\n \"label\": \"Include in submit payload\"\n },\n {\n \"value\": \"includeWhenDirty\",\n \"label\": \"Include only when dirty\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"fill\",\n \"label\": \"Fill\"\n },\n {\n \"value\": \"outline\",\n \"label\": \"Outline\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.floatLabel\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n },\n {\n \"value\": \"always\",\n \"label\": \"Always\"\n }\n ]\n },\n \"fieldMetadata[].materialDesign.density\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"comfortable\",\n \"label\": \"Comfortable\"\n },\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"dense\",\n \"label\": \"Dense\"\n }\n ]\n },\n \"actions.position\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"left\",\n \"label\": \"Left\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"right\",\n \"label\": \"Right\"\n },\n {\n \"value\": \"justified\",\n \"label\": \"Justified\"\n },\n {\n \"value\": \"split\",\n \"label\": \"Split\"\n }\n ]\n },\n \"actions.orientation\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"horizontal\",\n \"label\": \"Horizontal\"\n },\n {\n \"value\": \"vertical\",\n \"label\": \"Vertical\"\n }\n ]\n },\n \"actions.spacing\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"compact\",\n \"label\": \"Compact\"\n },\n {\n \"value\": \"normal\",\n \"label\": \"Normal\"\n },\n {\n \"value\": \"spacious\",\n \"label\": \"Spacious\"\n }\n ]\n },\n \"actions.placement\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"insideLastSection\",\n \"label\": \"Inside last section\"\n },\n {\n \"value\": \"afterSections\",\n \"label\": \"After sections\"\n },\n {\n \"value\": \"top\",\n \"label\": \"Top\"\n }\n ]\n },\n \"actions.submit.type\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"button\",\n \"label\": \"Button\"\n },\n {\n \"value\": \"submit\",\n \"label\": \"Submit\"\n },\n {\n \"value\": \"reset\",\n \"label\": \"Reset\"\n }\n ]\n },\n \"actions.submit.variant\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"raised\",\n \"label\": \"Raised\"\n },\n {\n \"value\": \"stroked\",\n \"label\": \"Stroked\"\n },\n {\n \"value\": \"flat\",\n \"label\": \"Flat\"\n },\n {\n \"value\": \"fab\",\n \"label\": \"Fab\"\n }\n ]\n },\n \"actions.submit.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"small\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"medium\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"large\",\n \"label\": \"Large\"\n }\n ]\n },\n \"actions.submit.color\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"primary\",\n \"label\": \"Primary\"\n },\n {\n \"value\": \"accent\",\n \"label\": \"Accent\"\n },\n {\n \"value\": \"warn\",\n \"label\": \"Warn\"\n },\n {\n \"value\": \"basic\",\n \"label\": \"Basic\"\n }\n ]\n },\n \"sections[].headerAlign\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n }\n ]\n },\n \"sections[].appearance\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"card\",\n \"label\": \"Card\"\n },\n {\n \"value\": \"plain\",\n \"label\": \"Plain\"\n },\n {\n \"value\": \"step\",\n \"label\": \"Step\"\n }\n ]\n },\n \"sections[].sectionHeader.mode\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"icon\",\n \"label\": \"Icon\"\n },\n {\n \"value\": \"avatar-image\",\n \"label\": \"Avatar image\"\n },\n {\n \"value\": \"avatar-initials\",\n \"label\": \"Avatar initials\"\n },\n {\n \"value\": \"auto\",\n \"label\": \"Auto\"\n }\n ]\n },\n \"sections[].sectionHeader.emptyState\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"placeholder-avatar\",\n \"label\": \"Neutral placeholder\"\n },\n {\n \"value\": \"fallback-icon\",\n \"label\": \"Fallback icon\"\n },\n {\n \"value\": \"none\",\n \"label\": \"None\"\n }\n ]\n },\n \"sections[].sectionHeader.size\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"sm\",\n \"label\": \"Small\"\n },\n {\n \"value\": \"md\",\n \"label\": \"Medium\"\n },\n {\n \"value\": \"lg\",\n \"label\": \"Large\"\n }\n ]\n },\n \"sections[].stepLabel\": {\n \"mode\": \"suggested\",\n \"options\": [\n {\n \"value\": \"Dados básicos\",\n \"label\": \"Dados básicos\"\n },\n {\n \"value\": \"Detalhes\",\n \"label\": \"Detalhes\"\n },\n {\n \"value\": \"Confirmação\",\n \"label\": \"Confirmação\"\n }\n ]\n },\n \"sections[].titleStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"titleLarge\",\n \"label\": \"Title large\"\n },\n {\n \"value\": \"titleMedium\",\n \"label\": \"Title medium\"\n },\n {\n \"value\": \"titleSmall\",\n \"label\": \"Title small\"\n },\n {\n \"value\": \"headlineSmall\",\n \"label\": \"Headline small\"\n }\n ]\n },\n \"sections[].descriptionStyle\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"bodyLarge\",\n \"label\": \"Body large\"\n },\n {\n \"value\": \"bodyMedium\",\n \"label\": \"Body medium\"\n },\n {\n \"value\": \"bodySmall\",\n \"label\": \"Body small\"\n }\n ]\n },\n \"sections[].rows[].columns[].align\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"start\",\n \"label\": \"Start\"\n },\n {\n \"value\": \"center\",\n \"label\": \"Center\"\n },\n {\n \"value\": \"end\",\n \"label\": \"End\"\n },\n {\n \"value\": \"stretch\",\n \"label\": \"Stretch\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].kind\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"richContent\",\n \"label\": \"Rich content\"\n }\n ]\n },\n \"sections[].rows[].columns[].items[].layout\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"block\",\n \"label\": \"Block\"\n },\n {\n \"value\": \"inline\",\n \"label\": \"Inline\"\n }\n ]\n },\n \"formRules[].targetType\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"field\",\n \"label\": \"Field\"\n },\n {\n \"value\": \"section\",\n \"label\": \"Section\"\n },\n {\n \"value\": \"row\",\n \"label\": \"Row\"\n },\n {\n \"value\": \"column\",\n \"label\": \"Column\"\n },\n {\n \"value\": \"action\",\n \"label\": \"Action\"\n },\n {\n \"value\": \"visualBlock\",\n \"label\": \"Visual block\"\n }\n ]\n },\n \"formRules[].context\": {\n \"mode\": \"enum\",\n \"options\": [\n {\n \"value\": \"visibility\",\n \"label\": \"Visibility\"\n },\n {\n \"value\": \"readOnly\",\n \"label\": \"Read only\"\n },\n {\n \"value\": \"style\",\n \"label\": \"Style\"\n },\n {\n \"value\": \"validation\",\n \"label\": \"Validation\"\n },\n {\n \"value\": \"notification\",\n \"label\": \"Notification\"\n }\n ]\n }\n },\n \"actionCatalog\": [\n {\n \"id\": \"field.visibility.hide\",\n \"intentExamples\": [\n \"hide field\",\n \"ocultar campo\",\n \"esconder campo\",\n \"invisible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.visibility.show\",\n \"intentExamples\": [\n \"show field\",\n \"mostrar campo\",\n \"exibir campo\",\n \"visible\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"hidden\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.label.set\",\n \"intentExamples\": [\n \"label\",\n \"rename field\",\n \"renomear campo\",\n \"titulo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"label\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.placeholder.set\",\n \"intentExamples\": [\n \"placeholder\",\n \"hint text\",\n \"texto de ajuda\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"placeholder\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.required.enable\",\n \"intentExamples\": [\n \"required\",\n \"obrigatorio\",\n \"mandatory\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.required.disable\",\n \"intentExamples\": [\n \"optional\",\n \"nao obrigatorio\",\n \"opcional\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"required\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.enable\",\n \"intentExamples\": [\n \"readonly\",\n \"somente leitura\",\n \"read only\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.readonly.disable\",\n \"intentExamples\": [\n \"editable\",\n \"editavel\",\n \"read write\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"readOnly\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.enable\",\n \"intentExamples\": [\n \"disable field\",\n \"desabilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": true\n }\n ]\n }\n },\n {\n \"id\": \"field.disabled.disable\",\n \"intentExamples\": [\n \"enable field\",\n \"habilitar campo\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"disabled\": false\n }\n ]\n }\n },\n {\n \"id\": \"field.controlType.set\",\n \"intentExamples\": [\n \"control type\",\n \"tipo de campo\",\n \"controlType\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"controlType\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.prefix.set\",\n \"intentExamples\": [\n \"prefix icon\",\n \"icone prefixo\",\n \"icon before\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"prefixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"field.icon.suffix.set\",\n \"intentExamples\": [\n \"suffix icon\",\n \"icone sufixo\",\n \"icon after\"\n ],\n \"patchTemplate\": {\n \"fieldMetadata\": [\n {\n \"name\": \"{{target}}\",\n \"suffixIcon\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.title.set\",\n \"intentExamples\": [\n \"section title\",\n \"titulo da secao\",\n \"section name\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"title\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.description.set\",\n \"intentExamples\": [\n \"section description\",\n \"descricao da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"description\": \"{{value}}\"\n }\n ]\n }\n },\n {\n \"id\": \"section.add\",\n \"intentExamples\": [\n \"add section\",\n \"adicionar secao\",\n \"nova secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{value}}\",\n \"title\": \"{{value}}\",\n \"rows\": []\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da seção é único e relevante.\"\n },\n {\n \"id\": \"section.remove\",\n \"intentExamples\": [\n \"remove section\",\n \"remover secao\",\n \"excluir secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"section.order.set\",\n \"intentExamples\": [\n \"order section\",\n \"reordenar secao\",\n \"mover secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"_order\": \"{{value}}\"\n }\n ]\n },\n \"safetyNotes\": \"A reordenação de seções é uma operação que deve ser revisada.\"\n },\n {\n \"id\": \"row.add\",\n \"intentExamples\": [\n \"add row\",\n \"adicionar linha\",\n \"nova linha na secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"columns\": []\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da linha é único e relevante na seção.\"\n },\n {\n \"id\": \"row.remove\",\n \"intentExamples\": [\n \"remove row\",\n \"remover linha\",\n \"excluir linha da secao\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target}}\",\n \"rows\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.add\",\n \"intentExamples\": [\n \"add column\",\n \"adicionar coluna\",\n \"nova coluna na linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"items\": []\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Certifique-se de que o ID da coluna é único e relevante na linha.\"\n },\n {\n \"id\": \"column.remove\",\n \"intentExamples\": [\n \"remove column\",\n \"remover coluna\",\n \"excluir coluna da linha\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{value}}\",\n \"_delete\": true\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"\n },\n {\n \"id\": \"column.field.add\",\n \"intentExamples\": [\n \"add field to column\",\n \"adicionar campo a coluna\",\n \"colocar campo na coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"id\": \"field-{{value}}\",\n \"fieldName\": \"{{value}}\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"\n },\n {\n \"id\": \"column.field.remove\",\n \"intentExamples\": [\n \"remove field from column\",\n \"remover campo da coluna\",\n \"tirar campo da coluna\"\n ],\n \"patchTemplate\": {\n \"sections\": [\n {\n \"id\": \"{{target.sectionId}}\",\n \"rows\": [\n {\n \"id\": \"{{target.rowId}}\",\n \"columns\": [\n {\n \"id\": \"{{target.columnId}}\",\n \"items\": [\n {\n \"kind\": \"field\",\n \"fieldName\": \"{{value}}\",\n \"_remove\": true\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n },\n \"safetyNotes\": \"Remover um campo de uma coluna pode alterar o layout do formulário.\"\n },\n {\n \"id\": \"actions.submit.label.set\",\n \"intentExamples\": [\n \"submit label\",\n \"rotulo salvar\",\n \"texto botao enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.submit.visible.set\",\n \"intentExamples\": [\n \"show submit\",\n \"esconder salvar\",\n \"visibilidade enviar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"submit\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.label.set\",\n \"intentExamples\": [\n \"cancel label\",\n \"rotulo cancelar\",\n \"texto botao cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.cancel.visible.set\",\n \"intentExamples\": [\n \"show cancel\",\n \"esconder cancelar\",\n \"visibilidade cancelar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"cancel\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.label.set\",\n \"intentExamples\": [\n \"reset label\",\n \"rotulo resetar\",\n \"texto botao limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"label\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"actions.reset.visible.set\",\n \"intentExamples\": [\n \"show reset\",\n \"esconder reset\",\n \"visibilidade limpar\"\n ],\n \"patchTemplate\": {\n \"actions\": {\n \"reset\": {\n \"visible\": \"{{value}}\"\n }\n }\n }\n },\n {\n \"id\": \"rule.add.visibility\",\n \"intentExamples\": [\n \"add visibility rule\",\n \"regra de visibilidade\",\n \"campo condicional\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{value.id}}\",\n \"name\": \"{{value.name}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{target}}\"\n ],\n \"effect\": {\n \"condition\": \"{{value.condition}}\",\n \"properties\": {\n \"hidden\": false\n },\n \"propertiesWhenFalse\": {\n \"hidden\": true\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao.\"\n },\n {\n \"id\": \"rule.remove\",\n \"intentExamples\": [\n \"remove rule\",\n \"excluir regra\",\n \"apagar regra\"\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{target}}\",\n \"_delete\": true\n }\n ]\n },\n \"safetyNotes\": \"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"\n },\n {\n \"id\": \"rule.add.dependency\",\n \"intentExamples\": [\n \"adicionar dependencia\",\n \"campo depende de\",\n \"mostrar se\",\n \"obrigatorio se\",\n \"desabilitar se\",\n \"campo condicional\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"triggerField\",\n \"type\": \"STRING\",\n \"description\": \"Campo que controla a regra (ex: tipoPessoa)\"\n },\n {\n \"name\": \"conditionValue\",\n \"type\": \"STRING\",\n \"description\": \"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado pela regra (ex: cnpj)\"\n },\n {\n \"name\": \"effectType\",\n \"type\": \"ENUM\",\n \"options\": [\n \"visibility\",\n \"required\",\n \"disabled\"\n ],\n \"description\": \"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"rule_{{params.triggerField}}_{{params.targetField}}\",\n \"name\": \"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": {\n \"==\": [\n {\n \"var\": \"{{params.triggerField}}\"\n },\n \"{{params.conditionValue}}\"\n ]\n },\n \"properties\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? false : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? true : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? true : undefined}}\"\n },\n \"propertiesWhenFalse\": {\n \"hidden\": \"{{params.effectType === 'visibility' ? true : undefined}}\",\n \"required\": \"{{params.effectType === 'required' ? false : undefined}}\",\n \"disabled\": \"{{params.effectType === 'disabled' ? false : undefined}}\"\n }\n }\n }\n ]\n },\n \"safetyNotes\": \"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"\n },\n {\n \"id\": \"rule.add.custom\",\n \"intentExamples\": [\n \"adicionar regra customizada\",\n \"regra complexa\",\n \"logica de formulario\"\n ],\n \"scope\": \"GLOBAL\",\n \"valueType\": \"OBJECT\",\n \"operation\": \"create\",\n \"params\": [\n {\n \"name\": \"id\",\n \"type\": \"STRING\",\n \"description\": \"ID único da regra\"\n },\n {\n \"name\": \"condition\",\n \"type\": \"STRING\",\n \"description\": \"Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \\\"and\\\": [{ \\\">\\\": [{ \\\"var\\\": \\\"idade\\\" }, 18] }, { \\\"==\\\": [{ \\\"var\\\": \\\"possuiHabilitacao\\\" }, true] }] })\"\n },\n {\n \"name\": \"targetField\",\n \"type\": \"STRING\",\n \"description\": \"Campo afetado\"\n },\n {\n \"name\": \"propertyName\",\n \"type\": \"STRING\",\n \"description\": \"Propriedade afetada (hidden, required, disabled, readOnly)\"\n },\n {\n \"name\": \"valueIfTrue\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for verdadeira\"\n },\n {\n \"name\": \"valueIfFalse\",\n \"type\": \"BOOLEAN\",\n \"description\": \"Valor se a condição for falsa\"\n }\n ],\n \"patchTemplate\": {\n \"formRules\": [\n {\n \"id\": \"{{params.id}}\",\n \"name\": \"Regra Customizada: {{params.id}}\",\n \"targetType\": \"field\",\n \"targets\": [\n \"{{params.targetField}}\"\n ],\n \"effect\": {\n \"condition\": \"{{params.condition}}\",\n \"properties\": {\n \"{{params.propertyName}}\": \"{{params.valueIfTrue}}\"\n },\n \"propertiesWhenFalse\": {\n \"{{params.propertyName}}\": \"{{params.valueIfFalse}}\"\n }\n }\n }\n ]\n }\n }\n ],\n \"fieldResolvers\": {\n \"fieldMetadata[]\": [\n \"name\",\n \"label\"\n ],\n \"sections[]\": [\n \"id\",\n \"title\"\n ],\n \"sections[].rows[].columns[].items[]\": [\n \"id\",\n \"fieldName\"\n ],\n \"sections[].rows[].columns[].fields[]\": []\n },\n \"hints\": [\n \"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\n \"Local fields are real form controls. Create them in fieldMetadata[] with source:\\\"local\\\", usually transient:true and submitPolicy:\\\"omit\\\", then place them as kind:\\\"field\\\" layout items.\",\n \"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\n \"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\n \"Use sections[].rows[].columns[].items[] as the canonical mixed layout order. kind:\\\"field\\\" items reference fieldMetadata; kind:\\\"richContent\\\" items are visual blocks outside submit payload.\",\n \"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\n \"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\n \"For field formRules that must calculate a FormControl value, use effect.properties.value with the closed envelope { expression: <JSON Logic> }, such as { expression: { yearsSince: [{ var: \\\"birthDate\\\" }] } }. Use the closed envelope { literal: <value> } for structured literal objects; do not add extra keys and do not generate TypeScript functions.\",\n \"For conditional side effects, use formCommandRules with effects[].kind:\\\"global-action\\\" and a structured globalAction ref. The visual editor authors the primary effect and preserves secondary effects from advanced JSON. Do not put alert/modal/navigation commands inside formRules[].effect.properties.\",\n \"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\n \"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\n \"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\n \"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\n \"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\n \"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\n \"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\n \"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\n \"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\n \"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\n \"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"\n ]\n }\n}",
|
|
4425
|
+
"content": "{\"componentId\":\"praxis-manual-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"version\":\"v1\",\"optionsByPath\":{\"fieldMetadata[].controlType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"input\",\"label\":\"Input\"},{\"value\":\"textarea\",\"label\":\"Textarea\"},{\"value\":\"email\",\"label\":\"Email\"},{\"value\":\"password\",\"label\":\"Password\"},{\"value\":\"search\",\"label\":\"Search\"},{\"value\":\"url\",\"label\":\"URL\"},{\"value\":\"phone\",\"label\":\"Phone\"},{\"value\":\"cpfCnpjInput\",\"label\":\"CPF/CNPJ\"},{\"value\":\"numericTextBox\",\"label\":\"Number\"},{\"value\":\"currency\",\"label\":\"Currency\"},{\"value\":\"priceRange\",\"label\":\"Price range\"},{\"value\":\"date\",\"label\":\"Date picker\"},{\"value\":\"dateRange\",\"label\":\"Date range\"},{\"value\":\"dateInput\",\"label\":\"Date input\"},{\"value\":\"dateTime\",\"label\":\"Datetime\"},{\"value\":\"dateTimeRange\",\"label\":\"Datetime range\"},{\"value\":\"dateTimeLocal\",\"label\":\"Datetime local\"},{\"value\":\"time\",\"label\":\"Time input\"},{\"value\":\"timePicker\",\"label\":\"Time picker\"},{\"value\":\"timeRange\",\"label\":\"Time range\"},{\"value\":\"week\",\"label\":\"Week input\"},{\"value\":\"month\",\"label\":\"Month input\"},{\"value\":\"year\",\"label\":\"Year input\"},{\"value\":\"select\",\"label\":\"Select\"},{\"value\":\"multiSelect\",\"label\":\"Multi select\"},{\"value\":\"multiSelectTree\",\"label\":\"Multi select tree\"},{\"value\":\"treeSelect\",\"label\":\"Tree select\"},{\"value\":\"transferList\",\"label\":\"Transfer list\"},{\"value\":\"autoComplete\",\"label\":\"Autocomplete\"},{\"value\":\"searchable-select\",\"label\":\"Searchable select\"},{\"value\":\"async-select\",\"label\":\"Async select\"},{\"value\":\"radio\",\"label\":\"Radio group\"},{\"value\":\"checkbox\",\"label\":\"Checkbox group\"},{\"value\":\"selectionList\",\"label\":\"Selection list\"},{\"value\":\"toggle\",\"label\":\"Toggle\"},{\"value\":\"buttonToggle\",\"label\":\"Button toggle\"},{\"value\":\"slider\",\"label\":\"Slider\"},{\"value\":\"rangeSlider\",\"label\":\"Range slider\"},{\"value\":\"rating\",\"label\":\"Rating\"},{\"value\":\"chipInput\",\"label\":\"Chips\"},{\"value\":\"chipList\",\"label\":\"Chip list\"},{\"value\":\"upload\",\"label\":\"File upload\"},{\"value\":\"color\",\"label\":\"Color input\"},{\"value\":\"colorPicker\",\"label\":\"Color picker\"},{\"value\":\"cronBuilder\",\"label\":\"Cron builder\"}]},\"fieldMetadata[].source\":{\"mode\":\"enum\",\"options\":[{\"value\":\"schema\",\"label\":\"Schema field\"},{\"value\":\"local\",\"label\":\"Local field\"}]},\"fieldMetadata[].submitPolicy\":{\"mode\":\"enum\",\"options\":[{\"value\":\"omit\",\"label\":\"Omit from submit payload\"},{\"value\":\"include\",\"label\":\"Include in submit payload\"},{\"value\":\"includeWhenDirty\",\"label\":\"Include only when dirty\"}]},\"fieldMetadata[].materialDesign.appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"fill\",\"label\":\"Fill\"},{\"value\":\"outline\",\"label\":\"Outline\"}]},\"fieldMetadata[].materialDesign.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"}]},\"fieldMetadata[].materialDesign.floatLabel\":{\"mode\":\"enum\",\"options\":[{\"value\":\"auto\",\"label\":\"Auto\"},{\"value\":\"always\",\"label\":\"Always\"}]},\"fieldMetadata[].materialDesign.density\":{\"mode\":\"enum\",\"options\":[{\"value\":\"comfortable\",\"label\":\"Comfortable\"},{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"dense\",\"label\":\"Dense\"}]},\"actions.position\":{\"mode\":\"enum\",\"options\":[{\"value\":\"left\",\"label\":\"Left\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"right\",\"label\":\"Right\"},{\"value\":\"justified\",\"label\":\"Justified\"},{\"value\":\"split\",\"label\":\"Split\"}]},\"actions.orientation\":{\"mode\":\"enum\",\"options\":[{\"value\":\"horizontal\",\"label\":\"Horizontal\"},{\"value\":\"vertical\",\"label\":\"Vertical\"}]},\"actions.spacing\":{\"mode\":\"enum\",\"options\":[{\"value\":\"compact\",\"label\":\"Compact\"},{\"value\":\"normal\",\"label\":\"Normal\"},{\"value\":\"spacious\",\"label\":\"Spacious\"}]},\"actions.placement\":{\"mode\":\"enum\",\"options\":[{\"value\":\"insideLastSection\",\"label\":\"Inside last section\"},{\"value\":\"afterSections\",\"label\":\"After sections\"},{\"value\":\"top\",\"label\":\"Top\"}]},\"actions.submit.type\":{\"mode\":\"enum\",\"options\":[{\"value\":\"button\",\"label\":\"Button\"},{\"value\":\"submit\",\"label\":\"Submit\"},{\"value\":\"reset\",\"label\":\"Reset\"}]},\"actions.submit.variant\":{\"mode\":\"enum\",\"options\":[{\"value\":\"raised\",\"label\":\"Raised\"},{\"value\":\"stroked\",\"label\":\"Stroked\"},{\"value\":\"flat\",\"label\":\"Flat\"},{\"value\":\"fab\",\"label\":\"Fab\"}]},\"actions.submit.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"small\",\"label\":\"Small\"},{\"value\":\"medium\",\"label\":\"Medium\"},{\"value\":\"large\",\"label\":\"Large\"}]},\"actions.submit.color\":{\"mode\":\"enum\",\"options\":[{\"value\":\"primary\",\"label\":\"Primary\"},{\"value\":\"accent\",\"label\":\"Accent\"},{\"value\":\"warn\",\"label\":\"Warn\"},{\"value\":\"basic\",\"label\":\"Basic\"}]},\"sections[].headerAlign\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"}]},\"sections[].appearance\":{\"mode\":\"enum\",\"options\":[{\"value\":\"card\",\"label\":\"Card\"},{\"value\":\"plain\",\"label\":\"Plain\"},{\"value\":\"step\",\"label\":\"Step\"}]},\"sections[].sectionHeader.mode\":{\"mode\":\"enum\",\"options\":[{\"value\":\"icon\",\"label\":\"Icon\"},{\"value\":\"avatar-image\",\"label\":\"Avatar image\"},{\"value\":\"avatar-initials\",\"label\":\"Avatar initials\"},{\"value\":\"auto\",\"label\":\"Auto\"}]},\"sections[].sectionHeader.emptyState\":{\"mode\":\"enum\",\"options\":[{\"value\":\"placeholder-avatar\",\"label\":\"Neutral placeholder\"},{\"value\":\"fallback-icon\",\"label\":\"Fallback icon\"},{\"value\":\"none\",\"label\":\"None\"}]},\"sections[].sectionHeader.size\":{\"mode\":\"enum\",\"options\":[{\"value\":\"sm\",\"label\":\"Small\"},{\"value\":\"md\",\"label\":\"Medium\"},{\"value\":\"lg\",\"label\":\"Large\"}]},\"sections[].stepLabel\":{\"mode\":\"suggested\",\"options\":[{\"value\":\"Dados básicos\",\"label\":\"Dados básicos\"},{\"value\":\"Detalhes\",\"label\":\"Detalhes\"},{\"value\":\"Confirmação\",\"label\":\"Confirmação\"}]},\"sections[].titleStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"titleLarge\",\"label\":\"Title large\"},{\"value\":\"titleMedium\",\"label\":\"Title medium\"},{\"value\":\"titleSmall\",\"label\":\"Title small\"},{\"value\":\"headlineSmall\",\"label\":\"Headline small\"}]},\"sections[].descriptionStyle\":{\"mode\":\"enum\",\"options\":[{\"value\":\"bodyLarge\",\"label\":\"Body large\"},{\"value\":\"bodyMedium\",\"label\":\"Body medium\"},{\"value\":\"bodySmall\",\"label\":\"Body small\"}]},\"sections[].rows[].columns[].align\":{\"mode\":\"enum\",\"options\":[{\"value\":\"start\",\"label\":\"Start\"},{\"value\":\"center\",\"label\":\"Center\"},{\"value\":\"end\",\"label\":\"End\"},{\"value\":\"stretch\",\"label\":\"Stretch\"}]},\"sections[].rows[].columns[].items[].kind\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"richContent\",\"label\":\"Rich content\"}]},\"sections[].rows[].columns[].items[].layout\":{\"mode\":\"enum\",\"options\":[{\"value\":\"block\",\"label\":\"Block\"},{\"value\":\"inline\",\"label\":\"Inline\"}]},\"formRules[].targetType\":{\"mode\":\"enum\",\"options\":[{\"value\":\"field\",\"label\":\"Field\"},{\"value\":\"section\",\"label\":\"Section\"},{\"value\":\"row\",\"label\":\"Row\"},{\"value\":\"column\",\"label\":\"Column\"},{\"value\":\"action\",\"label\":\"Action\"},{\"value\":\"visualBlock\",\"label\":\"Visual block\"}]},\"formRules[].context\":{\"mode\":\"enum\",\"options\":[{\"value\":\"visibility\",\"label\":\"Visibility\"},{\"value\":\"readOnly\",\"label\":\"Read only\"},{\"value\":\"style\",\"label\":\"Style\"},{\"value\":\"validation\",\"label\":\"Validation\"},{\"value\":\"notification\",\"label\":\"Notification\"}]}}}}",
|
|
4316
4426
|
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
4317
|
-
"contentHash": "
|
|
4427
|
+
"contentHash": "4d7c6ba7875c9c3f826ab037d85b1c4bbfc9c0c4ef87fa0d74415764c3f58114",
|
|
4318
4428
|
"sourceKind": "component_definition",
|
|
4319
4429
|
"sourceId": "praxis-manual-form",
|
|
4320
4430
|
"corpusVersion": "1.0.0"
|
|
4321
4431
|
},
|
|
4322
4432
|
{
|
|
4323
|
-
"chunkIndex":
|
|
4433
|
+
"chunkIndex": 15,
|
|
4434
|
+
"chunkKind": "context_pack",
|
|
4435
|
+
"content": "{\"componentId\":\"praxis-manual-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"field.visibility.hide\",\"intentExamples\":[\"hide field\",\"ocultar campo\",\"esconder campo\",\"invisible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":true}]}},{\"id\":\"field.visibility.show\",\"intentExamples\":[\"show field\",\"mostrar campo\",\"exibir campo\",\"visible\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"hidden\":false}]}},{\"id\":\"field.label.set\",\"intentExamples\":[\"label\",\"rename field\",\"renomear campo\",\"titulo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"label\":\"{{value}}\"}]}},{\"id\":\"field.placeholder.set\",\"intentExamples\":[\"placeholder\",\"hint text\",\"texto de ajuda\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"placeholder\":\"{{value}}\"}]}},{\"id\":\"field.required.enable\",\"intentExamples\":[\"required\",\"obrigatorio\",\"mandatory\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":true}]}},{\"id\":\"field.required.disable\",\"intentExamples\":[\"optional\",\"nao obrigatorio\",\"opcional\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"required\":false}]}},{\"id\":\"field.readonly.enable\",\"intentExamples\":[\"readonly\",\"somente leitura\",\"read only\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":true}]}},{\"id\":\"field.readonly.disable\",\"intentExamples\":[\"editable\",\"editavel\",\"read write\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"readOnly\":false}]}},{\"id\":\"field.disabled.enable\",\"intentExamples\":[\"disable field\",\"desabilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":true}]}},{\"id\":\"field.disabled.disable\",\"intentExamples\":[\"enable field\",\"habilitar campo\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"disabled\":false}]}},{\"id\":\"field.controlType.set\",\"intentExamples\":[\"control type\",\"tipo de campo\",\"controlType\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"controlType\":\"{{value}}\"}]}},{\"id\":\"field.icon.prefix.set\",\"intentExamples\":[\"prefix icon\",\"icone prefixo\",\"icon before\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"prefixIcon\":\"{{value}}\"}]}},{\"id\":\"field.icon.suffix.set\",\"intentExamples\":[\"suffix icon\",\"icone sufixo\",\"icon after\"],\"patchTemplate\":{\"fieldMetadata\":[{\"name\":\"{{target}}\",\"suffixIcon\":\"{{value}}\"}]}},{\"id\":\"section.title.set\",\"intentExamples\":[\"section title\",\"titulo da secao\",\"section name\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"title\":\"{{value}}\"}]}},{\"id\":\"section.description.set\",\"intentExamples\":[\"section description\",\"descricao da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"description\":\"{{value}}\"}]}},{\"id\":\"section.add\",\"intentExamples\":[\"add section\",\"adicionar secao\",\"nova secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{value}}\",\"title\":\"{{value}}\",\"rows\":[]}]},\"safetyNotes\":\"Certifique-se de que o ID da seção é único e relevante.\"},{\"id\":\"section.remove\",\"intentExamples\":[\"remove section\",\"remover secao\",\"excluir secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover uma seção é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"section.order.set\",\"intentExamples\":[\"order section\",\"reordenar secao\",\"mover secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"_order\":\"{{value}}\"}]},\"safetyNotes\":\"A reordenação de seções é uma operação que deve ser revisada.\"},{\"id\":\"row.add\",\"intentExamples\":[\"add row\",\"adicionar linha\",\"nova linha na secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"columns\":[]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da linha é único e relevante na seção.\"},{\"id\":\"row.remove\",\"intentExamples\":[\"remove row\",\"remover linha\",\"excluir linha da secao\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target}}\",\"rows\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]},\"safetyNotes\":\"Remover uma linha é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.add\",\"intentExamples\":[\"add column\",\"adicionar coluna\",\"nova coluna na linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"items\":[]}]}]}]},\"safetyNotes\":\"Certifique-se de que o ID da coluna é único e relevante na linha.\"},{\"id\":\"column.remove\",\"intentExamples\":[\"remove column\",\"remover coluna\",\"excluir coluna da linha\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{value}}\",\"_delete\":true}]}]}]},\"safetyNotes\":\"Remover uma coluna é uma ação destrutiva. Confirme com o usuário.\"},{\"id\":\"column.field.add\",\"intentExamples\":[\"add field to column\",\"adicionar campo a coluna\",\"colocar campo na coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"id\":\"field-{{value}}\",\"fieldName\":\"{{value}}\"}]}]}]}]},\"safetyNotes\":\"Verifique se o campo adicionado existe em fieldMetadata e se o posicionamento é lógico.\"},{\"id\":\"column.field.remove\",\"intentExamples\":[\"remove field from column\",\"remover campo da coluna\",\"tirar campo da coluna\"],\"patchTemplate\":{\"sections\":[{\"id\":\"{{target.sectionId}}\",\"rows\":[{\"id\":\"{{target.rowId}}\",\"columns\":[{\"id\":\"{{target.columnId}}\",\"items\":[{\"kind\":\"field\",\"fieldName\":\"{{value}}\",\"_remove\":true}]}]}]}]},\"safetyNotes\":\"Remover um campo de uma coluna pode alterar o layout do formulário.\"},{\"id\":\"actions.submit.label.set\",\"intentExamples\":[\"submit label\",\"rotulo salvar\",\"texto botao enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.submit.visible.set\",\"intentExamples\":[\"show submit\",\"esconder salvar\",\"visibilidade enviar\"],\"patchTemplate\":{\"actions\":{\"submit\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.label.set\",\"intentExamples\":[\"cancel label\",\"rotulo cancelar\",\"texto botao cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.cancel.visible.set\",\"intentExamples\":[\"show cancel\",\"esconder cancelar\",\"visibilidade cancelar\"],\"patchTemplate\":{\"actions\":{\"cancel\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"actions.reset.label.set\",\"intentExamples\":[\"reset label\",\"rotulo resetar\",\"texto botao limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"label\":\"{{value}}\"}}}},{\"id\":\"actions.reset.visible.set\",\"intentExamples\":[\"show reset\",\"esconder reset\",\"visibilidade limpar\"],\"patchTemplate\":{\"actions\":{\"reset\":{\"visible\":\"{{value}}\"}}}},{\"id\":\"rule.add.visibility\",\"intentExamples\":[\"add visibility rule\",\"regra de visibilidade\",\"campo condicional\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{value.id}}\",\"name\":\"{{value.name}}\",\"targetType\":\"field\",\"targets\":[\"{{target}}\"],\"effect\":{\"condition\":\"{{value.condition}}\",\"properties\":{\"hidden\":false},\"propertiesWhenFalse\":{\"hidden\":true}}}]},\"safetyNotes\":\"Criacao de regras requer Json Logic canonico em effect.condition, atencao a IDs de campos e teste apos a criacao.\"},{\"id\":\"rule.remove\",\"intentExamples\":[\"remove rule\",\"excluir regra\",\"apagar regra\"],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{target}}\",\"_delete\":true}]},\"safetyNotes\":\"Remover regras pode ter efeitos inesperados no comportamento do formulário.\"}]}}",
|
|
4436
|
+
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
4437
|
+
"contentHash": "0b42dc6fa65d72f4f5d815337c7cbfe77c9d16232d7a1f903ab2c2088d5532a6",
|
|
4438
|
+
"sourceKind": "component_definition",
|
|
4439
|
+
"sourceId": "praxis-manual-form",
|
|
4440
|
+
"corpusVersion": "1.0.0"
|
|
4441
|
+
},
|
|
4442
|
+
{
|
|
4443
|
+
"chunkIndex": 16,
|
|
4444
|
+
"chunkKind": "context_pack",
|
|
4445
|
+
"content": "{\"componentId\":\"praxis-manual-form\",\"chunkSection\":\"componentContext.actionCatalog\",\"componentContext\":{\"actionCatalog\":[{\"id\":\"rule.add.dependency\",\"intentExamples\":[\"adicionar dependencia\",\"campo depende de\",\"mostrar se\",\"obrigatorio se\",\"desabilitar se\",\"campo condicional\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"triggerField\",\"type\":\"STRING\",\"description\":\"Campo que controla a regra (ex: tipoPessoa)\"},{\"name\":\"conditionValue\",\"type\":\"STRING\",\"description\":\"Valor do trigger para ativar a regra (ex: \\\"Jurídica\\\")\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado pela regra (ex: cnpj)\"},{\"name\":\"effectType\",\"type\":\"ENUM\",\"options\":[\"visibility\",\"required\",\"disabled\"],\"description\":\"Tipo de efeito (visibility=mostrar, required=obrigatório, disabled=desabilitar)\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"rule_{{params.triggerField}}_{{params.targetField}}\",\"name\":\"Dependência: {{params.targetField}} depende de {{params.triggerField}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":{\"==\":[{\"var\":\"{{params.triggerField}}\"},\"{{params.conditionValue}}\"]},\"properties\":{\"hidden\":\"{{params.effectType === 'visibility' ? false : undefined}}\",\"required\":\"{{params.effectType === 'required' ? true : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? true : undefined}}\"},\"propertiesWhenFalse\":{\"hidden\":\"{{params.effectType === 'visibility' ? true : undefined}}\",\"required\":\"{{params.effectType === 'required' ? false : undefined}}\",\"disabled\":\"{{params.effectType === 'disabled' ? false : undefined}}\"}}}]},\"safetyNotes\":\"Verifique se os nomes dos campos (trigger e target) existem. Ajuste a condição se o valor não for string simples.\"},{\"id\":\"rule.add.custom\",\"intentExamples\":[\"adicionar regra customizada\",\"regra complexa\",\"logica de formulario\"],\"scope\":\"GLOBAL\",\"valueType\":\"OBJECT\",\"operation\":\"create\",\"params\":[{\"name\":\"id\",\"type\":\"STRING\",\"description\":\"ID único da regra\"},{\"name\":\"condition\",\"type\":\"STRING\",\"description\":\"Objeto Json Logic canonico serializado, nunca DSL textual (ex: { \\\"and\\\": [{ \\\">\\\": [{ \\\"var\\\": \\\"idade\\\" }, 18] }, { \\\"==\\\": [{ \\\"var\\\": \\\"possuiHabilitacao\\\" }, true] }] })\"},{\"name\":\"targetField\",\"type\":\"STRING\",\"description\":\"Campo afetado\"},{\"name\":\"propertyName\",\"type\":\"STRING\",\"description\":\"Propriedade afetada (hidden, required, disabled, readOnly)\"},{\"name\":\"valueIfTrue\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for verdadeira\"},{\"name\":\"valueIfFalse\",\"type\":\"BOOLEAN\",\"description\":\"Valor se a condição for falsa\"}],\"patchTemplate\":{\"formRules\":[{\"id\":\"{{params.id}}\",\"name\":\"Regra Customizada: {{params.id}}\",\"targetType\":\"field\",\"targets\":[\"{{params.targetField}}\"],\"effect\":{\"condition\":\"{{params.condition}}\",\"properties\":{\"{{params.propertyName}}\":\"{{params.valueIfTrue}}\"},\"propertiesWhenFalse\":{\"{{params.propertyName}}\":\"{{params.valueIfFalse}}\"}}}]}}]}}",
|
|
4446
|
+
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
4447
|
+
"contentHash": "e9a6d3683d9aa9e84a979f9bd26801055e91237afa0258e759ba841ae784644d",
|
|
4448
|
+
"sourceKind": "component_definition",
|
|
4449
|
+
"sourceId": "praxis-manual-form",
|
|
4450
|
+
"corpusVersion": "1.0.0"
|
|
4451
|
+
},
|
|
4452
|
+
{
|
|
4453
|
+
"chunkIndex": 17,
|
|
4454
|
+
"chunkKind": "context_pack",
|
|
4455
|
+
"content": "{\"componentId\":\"praxis-manual-form\",\"chunkSection\":\"componentContext\",\"componentContext\":{\"fieldResolvers\":{\"fieldMetadata[]\":[\"name\",\"label\"],\"sections[]\":[\"id\",\"title\"],\"sections[].rows[].columns[].items[]\":[\"id\",\"fieldName\"],\"sections[].rows[].columns[].fields[]\":[]},\"hints\":[\"Use fieldMetadata[].name as the canonical field id; avoid array indexes.\",\"Local fields are real form controls. Create them in fieldMetadata[] with source:\\\"local\\\", usually transient:true and submitPolicy:\\\"omit\\\", then place them as kind:\\\"field\\\" layout items.\",\"submitPolicy accepts only \\\"omit\\\", \\\"include\\\", or \\\"includeWhenDirty\\\". If legacy prompt text says \\\"never\\\", normalize it to \\\"omit\\\" before persisting.\",\"Visual blocks are not fields. Store them only as kind:\\\"richContent\\\" layout items and never in fieldMetadata[].\",\"Use sections[].rows[].columns[].items[] as the canonical mixed layout order. kind:\\\"field\\\" items reference fieldMetadata; kind:\\\"richContent\\\" items are visual blocks outside submit payload.\",\"Keep sections[].rows[].columns[].fields[] only as a field projection/migration path; do not create visual blocks there.\",\"For visualBlock formRules that change text, title, or message in a composed richContent document, use textNodeId, titleNodeId, or messageNodeId from the rule authoring context.\",\"For field formRules that must calculate a FormControl value, use effect.properties.value with the closed envelope { expression: <JSON Logic> }, such as { expression: { yearsSince: [{ var: \\\"birthDate\\\" }] } }. Use the closed envelope { literal: <value> } for structured literal objects; do not add extra keys and do not generate TypeScript functions.\",\"For conditional side effects, use formCommandRules with effects[].kind:\\\"global-action\\\" and a structured globalAction ref. The visual editor authors the primary effect and preserves secondary effects from advanced JSON. Do not put alert/modal/navigation commands inside formRules[].effect.properties.\",\"LLM-created formRules must include metadata.origin:\\\"llm\\\" and metadata.reviewStatus:\\\"pending\\\"; never write generated formRulesState.\",\"Domain guidance rules should usually target visualBlock when they only change advisory copy, compliance warnings, or operational instructions without changing submitted data.\",\"For layout edits, prefer adding or merging sections/rows/columns instead of replacing arrays. Use _delete: true for removal.\",\"Avoid non-serializable hooks or functions in patches; use plain strings or ask for manual edits.\",\"When adding sections/rows/columns, provide a unique \\\"id\\\" for each new element.\",\"For nested layout changes (column within a row within a section), explicitly define \\\"target.sectionId\\\", \\\"target.rowId\\\", \\\"target.columnId\\\" in user prompt for clarity.\",\"DOC: Widget purpose: dynamic form driven by FormConfig (layout + fields).\",\"DOC: Host inputs: config (optional, defaults to { sections: [] }) and resourcePath (optional). mode is optional (create/edit/view).\",\"DOC: When config is provided, sections[] define layout; fieldMetadata[] defines fields referenced by sections.\",\"DOC: If the form should be schema-driven, resourcePath + schemaSource are needed to fetch schema.\",\"DOC: resourcePath must be the base resource path only (no /filter, /all, /{id}). CRUD endpoints are handled internally.\"]}}",
|
|
4456
|
+
"sourcePointer": "projects/praxis-dynamic-form/src/lib/ai/dynamic-form-context-pack.ts",
|
|
4457
|
+
"contentHash": "c4f8ec2058dcad7cda8f8372ad7aa650d43e82dbc9a1b53b854cd5d3affc4d7f",
|
|
4458
|
+
"sourceKind": "component_definition",
|
|
4459
|
+
"sourceId": "praxis-manual-form",
|
|
4460
|
+
"corpusVersion": "1.0.0"
|
|
4461
|
+
},
|
|
4462
|
+
{
|
|
4463
|
+
"chunkIndex": 18,
|
|
4324
4464
|
"chunkKind": "recipe",
|
|
4325
|
-
"content": "{\
|
|
4465
|
+
"content": "{\"_comment\":\"Receita para Formulário Manual (Low-code/No-code).\",\"templateMeta\":{\"registryKey\":\"praxis-manual-form\",\"variantId\":\"base\",\"useWhen\":\"Base manual form configuration.\",\"examplePrompts\":[\"create a manual form with fields\",\"configure manual form layout\"]},\"config\":{\"schema\":{\"fields\":[{\"name\":\"title\",\"type\":\"text\",\"label\":\"Título\"},{\"name\":\"content\",\"type\":\"textarea\",\"label\":\"Conteúdo\"}]},\"layout\":{\"type\":\"grid\",\"columns\":2},\"initialData\":{\"title\":\"Rascunho\"},\"validationSchema\":{\"title\":{\"required\":true,\"minLength\":5}},\"actions\":[{\"id\":\"save\",\"label\":\"Salvar\",\"handler\":\"onSubmit\"},{\"id\":\"cancel\",\"label\":\"Cancelar\",\"handler\":\"onCancel\"}],\"hooks\":{\"_comment\":\"Hooks executaveis sao representados como strings; substitua por funcoes reais no runtime.\",\"onSubmit\":\"console.log('Form submitted', data)\",\"onCancel\":\"history.back()\"}}}",
|
|
4326
4466
|
"sourcePointer": "examples/ai-recipes/praxis-manual-form.json",
|
|
4327
|
-
"contentHash": "
|
|
4467
|
+
"contentHash": "165e52797daf0a494f5ea1f78c6b921d751837d0932c4c956a70f1a0107e6cd0",
|
|
4328
4468
|
"sourceKind": "component_definition",
|
|
4329
4469
|
"sourceId": "praxis-manual-form",
|
|
4330
4470
|
"corpusVersion": "1.0.0"
|
package/package.json
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/manual-form",
|
|
3
|
-
"version": "9.0.0-beta.
|
|
3
|
+
"version": "9.0.0-beta.78",
|
|
4
4
|
"description": "Manual form toolkit for Praxis UI: container, instance factory and editor bridge for @praxisui/* fields.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
7
7
|
"@angular/core": "^21.0.0",
|
|
8
|
-
"@praxisui/core": "^9.0.0-beta.
|
|
9
|
-
"@praxisui/dynamic-fields": "^9.0.0-beta.
|
|
10
|
-
"@praxisui/settings-panel": "^9.0.0-beta.
|
|
11
|
-
"@praxisui/metadata-editor": "^9.0.0-beta.
|
|
8
|
+
"@praxisui/core": "^9.0.0-beta.78",
|
|
9
|
+
"@praxisui/dynamic-fields": "^9.0.0-beta.78",
|
|
10
|
+
"@praxisui/settings-panel": "^9.0.0-beta.78",
|
|
11
|
+
"@praxisui/metadata-editor": "^9.0.0-beta.78",
|
|
12
12
|
"@angular/cdk": "^21.0.0",
|
|
13
13
|
"@angular/forms": "^21.0.0",
|
|
14
14
|
"@angular/material": "^21.0.0",
|
|
15
15
|
"@angular/router": "^21.0.0",
|
|
16
|
-
"@praxisui/ai": "^9.0.0-beta.
|
|
16
|
+
"@praxisui/ai": "^9.0.0-beta.78",
|
|
17
17
|
"rxjs": "~7.8.0"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|