@praxisui/manual-form 9.0.0-beta.27 → 9.0.0-beta.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/ai/component-registry.json +7 -6
- package/fesm2022/praxisui-manual-form.mjs +23 -9
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -111,6 +111,26 @@ The toolbar and metadata bridge are runtime entry points. They are not separate
|
|
|
111
111
|
|
|
112
112
|
Free JSON patches from AI flows are not the public authoring contract. Local apply must come from a manifest-backed `componentEditPlan`.
|
|
113
113
|
|
|
114
|
+
### Rule Authoring Contract
|
|
115
|
+
|
|
116
|
+
`formRules` is the authorable rules surface for manual forms. Each rule `effect.condition` must be a JSON Logic object, for example:
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{
|
|
120
|
+
"id": "required-customer",
|
|
121
|
+
"targetType": "field",
|
|
122
|
+
"targets": ["customer"],
|
|
123
|
+
"effect": {
|
|
124
|
+
"condition": { "!==": [{ "var": "customer" }, null] },
|
|
125
|
+
"properties": { "required": true }
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Do not use legacy JSON Schema condition blocks such as `allOf`/`if`/`then`, and do not use textual expression strings such as `customer != null`.
|
|
131
|
+
|
|
132
|
+
`formRulesState` is internal round-trip state generated by the visual editor. Treat it as read-only metadata: tools and hosts should author `formRules` and let the editor materialize or preserve `formRulesState` when needed.
|
|
133
|
+
|
|
114
134
|
## Public API Snapshot
|
|
115
135
|
|
|
116
136
|
Main exports include `ManualFormComponent`, `ManualFormHeaderComponent`, `ManualFormActionsComponent`, `ManualFormConfigEditorComponent`, `ManualFormInstance`, seed helpers, manual field directives, metadata bridge services, DI tokens, AI capabilities and `PRAXIS_MANUAL_FORM_AUTHORING_MANIFEST`.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-07-
|
|
3
|
+
"generatedAt": "2026-07-01T23:36:01.296Z",
|
|
4
4
|
"packageName": "@praxisui/manual-form",
|
|
5
|
-
"packageVersion": "9.0.0-beta.
|
|
5
|
+
"packageVersion": "9.0.0-beta.29",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -1493,9 +1493,10 @@
|
|
|
1493
1493
|
},
|
|
1494
1494
|
{
|
|
1495
1495
|
"path": "formRulesState",
|
|
1496
|
-
"category": "
|
|
1496
|
+
"category": "metadata",
|
|
1497
1497
|
"valueKind": "object",
|
|
1498
|
-
"description": "Estado
|
|
1498
|
+
"description": "Estado interno do builder visual de regras, gerado apenas para round-trip do editor.",
|
|
1499
|
+
"safetyNotes": "Read-only/internal. Nao use como alvo de autoria, patch, exemplo ou operacao de IA; gere somente formRules e deixe o editor materializar formRulesState."
|
|
1499
1500
|
},
|
|
1500
1501
|
{
|
|
1501
1502
|
"path": "hooks",
|
|
@@ -4291,9 +4292,9 @@
|
|
|
4291
4292
|
{
|
|
4292
4293
|
"chunkIndex": 1,
|
|
4293
4294
|
"chunkKind": "capabilities",
|
|
4294
|
-
"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: rules\n Kind: object\n Description: Estado bruto do visual builder.\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 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
4296
|
"sourcePointer": "praxis-ui-angular/projects/praxis-manual-form/src/lib/ai/manual-form-ai-capabilities.ts",
|
|
4296
|
-
"contentHash": "
|
|
4297
|
+
"contentHash": "3d06c45400ad846c00f63a093f2c3dc1fde66b77bb4b301f5dc521952f3f2f89",
|
|
4297
4298
|
"sourceKind": "component_definition",
|
|
4298
4299
|
"sourceId": "praxis-manual-form",
|
|
4299
4300
|
"corpusVersion": "1.0.0"
|
|
@@ -1029,7 +1029,13 @@ const MANUAL_FORM_AI_CAPABILITIES = {
|
|
|
1029
1029
|
...generateRulePropertyWhenFalseCapabilities('action', RULE_PROPERTY_SCHEMA.action),
|
|
1030
1030
|
...generateRulePropertyWhenFalseCapabilities('row', RULE_PROPERTY_SCHEMA.row),
|
|
1031
1031
|
...generateRulePropertyWhenFalseCapabilities('column', RULE_PROPERTY_SCHEMA.column),
|
|
1032
|
-
{
|
|
1032
|
+
{
|
|
1033
|
+
path: 'formRulesState',
|
|
1034
|
+
category: 'metadata',
|
|
1035
|
+
valueKind: 'object',
|
|
1036
|
+
description: 'Estado interno do builder visual de regras, gerado apenas para round-trip do editor.',
|
|
1037
|
+
safetyNotes: 'Read-only/internal. Nao use como alvo de autoria, patch, exemplo ou operacao de IA; gere somente formRules e deixe o editor materializar formRulesState.',
|
|
1038
|
+
},
|
|
1033
1039
|
{ path: 'hooks', category: 'hooks', valueKind: 'object', description: 'Declaracoes de hooks por estagio.' },
|
|
1034
1040
|
{ path: 'hooks.beforeInit', category: 'hooks', valueKind: 'array', description: 'Hooks beforeInit.' },
|
|
1035
1041
|
{ path: 'hooks.beforeInit[]', category: 'hooks', valueKind: 'array', description: 'Hooks beforeInit.' },
|
|
@@ -3454,10 +3460,11 @@ const MANUAL_FORM_EN_US = {
|
|
|
3454
3460
|
'praxis.manualForm.editor.rules.apply': 'Apply rules',
|
|
3455
3461
|
'praxis.manualForm.editor.rules.note': 'Persisted in config; execution depends on the host.',
|
|
3456
3462
|
'praxis.manualForm.editor.rules.formRulesLabel': 'formRules (JSON)',
|
|
3457
|
-
'praxis.manualForm.editor.rules.formRulesStateLabel': 'formRulesState
|
|
3458
|
-
'praxis.manualForm.editor.rules.formRulesPlaceholder': '[{"id":"rule-1","name":"Required rule","targetType":"field","targets":["field"],"effect":{"condition":"{field}
|
|
3463
|
+
'praxis.manualForm.editor.rules.formRulesStateLabel': 'Visual editor internal state (formRulesState - JSON)',
|
|
3464
|
+
'praxis.manualForm.editor.rules.formRulesPlaceholder': '[{"id":"rule-1","name":"Required rule","targetType":"field","targets":["field"],"effect":{"condition":{"!==":[{"var":"field"},null]},"properties":{"required":true}}}]',
|
|
3459
3465
|
'praxis.manualForm.editor.rules.tooltip': 'JSON array with rules (id, targetType, targets, effect).',
|
|
3460
|
-
'praxis.manualForm.editor.rules.stateTooltip': '
|
|
3466
|
+
'praxis.manualForm.editor.rules.stateTooltip': 'Read-only internal round-trip state for the visual editor; edit formRules instead.',
|
|
3467
|
+
'praxis.manualForm.editor.rules.formRulesStateReadonlyHint': 'Generated by the visual editor for round-trip; edit formRules instead.',
|
|
3461
3468
|
'praxis.manualForm.editor.cascade.title': 'Field dependencies',
|
|
3462
3469
|
'praxis.manualForm.editor.cascade.help': 'Configure native cascades based on metadata.',
|
|
3463
3470
|
'praxis.manualForm.editor.cascade.note': 'Changes update metadata and are saved in the draft.',
|
|
@@ -3592,10 +3599,11 @@ const MANUAL_FORM_PT_BR = {
|
|
|
3592
3599
|
'praxis.manualForm.editor.rules.apply': 'Aplicar regras',
|
|
3593
3600
|
'praxis.manualForm.editor.rules.note': 'Persistido no config; a execução depende do host.',
|
|
3594
3601
|
'praxis.manualForm.editor.rules.formRulesLabel': 'Regras do formulário (formRules - JSON)',
|
|
3595
|
-
'praxis.manualForm.editor.rules.formRulesStateLabel': 'Estado
|
|
3596
|
-
'praxis.manualForm.editor.rules.formRulesPlaceholder': '[{"id":"rule-1","name":"Obrigatoriedade","targetType":"field","targets":["campo"],"effect":{"condition":"{campo}
|
|
3602
|
+
'praxis.manualForm.editor.rules.formRulesStateLabel': 'Estado interno do editor visual (formRulesState - JSON)',
|
|
3603
|
+
'praxis.manualForm.editor.rules.formRulesPlaceholder': '[{"id":"rule-1","name":"Obrigatoriedade","targetType":"field","targets":["campo"],"effect":{"condition":{"!==":[{"var":"campo"},null]},"properties":{"required":true}}}]',
|
|
3597
3604
|
'praxis.manualForm.editor.rules.tooltip': 'Array JSON com regras (id, targetType, targets, effect).',
|
|
3598
|
-
'praxis.manualForm.editor.rules.stateTooltip': 'Estado
|
|
3605
|
+
'praxis.manualForm.editor.rules.stateTooltip': 'Estado interno somente leitura para round-trip do editor visual; edite formRules.',
|
|
3606
|
+
'praxis.manualForm.editor.rules.formRulesStateReadonlyHint': 'Gerado pelo editor visual para round-trip; edite formRules.',
|
|
3599
3607
|
'praxis.manualForm.editor.cascade.title': 'Dependências entre campos',
|
|
3600
3608
|
'praxis.manualForm.editor.cascade.help': 'Configure cascatas nativas baseadas em metadados.',
|
|
3601
3609
|
'praxis.manualForm.editor.cascade.note': 'As alterações atualizam metadados e são salvas no rascunho (draft).',
|
|
@@ -3695,7 +3703,7 @@ class ManualFormConfigEditorComponent {
|
|
|
3695
3703
|
return this.tx('editor.hooks.tooltip', `JSON array of hooks for ${stage} (id, priority, timeoutMs, args).`).replace('{{stage}}', stage);
|
|
3696
3704
|
}
|
|
3697
3705
|
formRulesPlaceholder() {
|
|
3698
|
-
return this.tx('editor.rules.formRulesPlaceholder', '[{"id":"rule-1","name":"Required rule","targetType":"field","targets":["field"],"effect":{"condition":"{field}
|
|
3706
|
+
return this.tx('editor.rules.formRulesPlaceholder', '[{"id":"rule-1","name":"Required rule","targetType":"field","targets":["field"],"effect":{"condition":{"!==":[{"var":"field"},null]},"properties":{"required":true}}}]');
|
|
3699
3707
|
}
|
|
3700
3708
|
ngOnInit() {
|
|
3701
3709
|
this.refresh();
|
|
@@ -4763,9 +4771,12 @@ class ManualFormConfigEditorComponent {
|
|
|
4763
4771
|
matInput
|
|
4764
4772
|
rows="6"
|
|
4765
4773
|
[value]="formRulesStateText"
|
|
4774
|
+
readonly
|
|
4775
|
+
aria-readonly="true"
|
|
4766
4776
|
(input)="onRulesStateTextChange($any($event.target).value)"
|
|
4767
4777
|
placeholder='{"nodes":[],"edges":[]}'
|
|
4768
4778
|
></textarea>
|
|
4779
|
+
<mat-hint>{{ tx('editor.rules.formRulesStateReadonlyHint', 'Generated by the visual editor for round-trip; edit formRules instead.') }}</mat-hint>
|
|
4769
4780
|
<button
|
|
4770
4781
|
mat-icon-button
|
|
4771
4782
|
matSuffix
|
|
@@ -4808,7 +4819,7 @@ class ManualFormConfigEditorComponent {
|
|
|
4808
4819
|
</mat-tab>
|
|
4809
4820
|
</mat-tab-group>
|
|
4810
4821
|
</div>
|
|
4811
|
-
`, isInline: true, styles: [".mf-editor{display:grid;gap:16px;padding:16px;color:var(--md-sys-color-on-surface)}.mf-editor__toolbar{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container)}.mf-editor__title{display:flex;flex-direction:column;gap:2px;font-weight:600}.mf-editor__subtitle{font-weight:400;color:var(--md-sys-color-on-surface-variant)}.mf-editor__toolbar .spacer{flex:1}.mf-tabs{min-height:420px}.mf-tab{display:grid;gap:16px;padding:14px 6px 0}.mf-editor__list{display:grid;gap:8px;overflow-x:auto}.mf-editor__row{display:grid;grid-template-columns:2.2fr 2fr 1fr repeat(4,minmax(90px,.8fr));align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface);min-width:720px}.mf-editor__row--head{font-weight:600;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface-container)}.mf-editor__filter{display:inline-flex;align-items:center;gap:8px;font-weight:500}.mf-editor__filter input{accent-color:var(--md-sys-color-primary)}.col code{display:inline-block;font-family:inherit;font-size:.85rem;padding:2px 8px;border-radius:6px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}.mf-btn{min-height:36px;padding:0 12px;border-radius:8px;border:1px solid var(--md-sys-color-outline);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);cursor:pointer;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.mf-btn:hover{background:var(--md-sys-color-surface-container)}.mf-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.toggle{display:inline-flex;align-items:center;gap:6px;color:var(--md-sys-color-on-surface-variant)}.mf-section{display:grid;gap:12px;padding:16px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface)}.mf-section--full{padding:10px}.mf-section__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mf-section__header h3{margin:0;font-size:1.05rem;font-weight:600}.mf-help{margin:6px 0 0;font-size:.9rem;color:var(--md-sys-color-on-surface-variant)}.mf-note{padding:10px 12px;border-radius:10px;border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);font-size:.9rem}.help-icon-button{--mdc-icon-button-state-layer-size: 28px;--mdc-icon-button-icon-size: 18px;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;margin-right:-4px}.help-icon-button mat-icon{font-size:18px;width:18px;height:18px}.mat-mdc-form-field-icon-suffix{align-self:center}.mf-actions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-action-card,.mf-custom-card,.mf-custom-message-card{display:grid;gap:10px;padding:14px;border-radius:10px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high)}.mf-action-card__title,.mf-custom-card__title{font-weight:600;color:var(--md-sys-color-on-surface)}.mf-actions-layout{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-toggle-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;align-items:start}.mf-hooks-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.mf-hook-field textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.85rem}.mf-actions-row{display:inline-flex;gap:8px;align-items:center}.mf-actions-row--end{justify-content:flex-end;width:100%}.mf-custom-actions,.mf-custom-messages{display:grid;gap:12px}.mf-custom-card__header{display:flex;align-items:center;justify-content:space-between;gap:8px}.mf-custom-card__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-messages-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-empty{margin:0;color:var(--md-sys-color-on-surface-variant)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i2.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: CascadeManagerTabComponent, selector: "praxis-cascade-manager-tab", inputs: ["fields", "connections"], outputs: ["apply", "cancel"] }] });
|
|
4822
|
+
`, isInline: true, styles: [".mf-editor{display:grid;gap:16px;padding:16px;color:var(--md-sys-color-on-surface)}.mf-editor__toolbar{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--md-sys-color-outline-variant);border-radius:12px;background:var(--md-sys-color-surface-container)}.mf-editor__title{display:flex;flex-direction:column;gap:2px;font-weight:600}.mf-editor__subtitle{font-weight:400;color:var(--md-sys-color-on-surface-variant)}.mf-editor__toolbar .spacer{flex:1}.mf-tabs{min-height:420px}.mf-tab{display:grid;gap:16px;padding:14px 6px 0}.mf-editor__list{display:grid;gap:8px;overflow-x:auto}.mf-editor__row{display:grid;grid-template-columns:2.2fr 2fr 1fr repeat(4,minmax(90px,.8fr));align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:10px;background:var(--md-sys-color-surface);min-width:720px}.mf-editor__row--head{font-weight:600;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface-container)}.mf-editor__filter{display:inline-flex;align-items:center;gap:8px;font-weight:500}.mf-editor__filter input{accent-color:var(--md-sys-color-primary)}.col code{display:inline-block;font-family:inherit;font-size:.85rem;padding:2px 8px;border-radius:6px;background:var(--md-sys-color-surface-container-high);color:var(--md-sys-color-on-surface-variant)}.mf-btn{min-height:36px;padding:0 12px;border-radius:8px;border:1px solid var(--md-sys-color-outline);background:var(--md-sys-color-surface);color:var(--md-sys-color-on-surface);cursor:pointer;transition:background-color .18s ease,border-color .18s ease,color .18s ease}.mf-btn:hover{background:var(--md-sys-color-surface-container)}.mf-btn:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.toggle{display:inline-flex;align-items:center;gap:6px;color:var(--md-sys-color-on-surface-variant)}.mf-section{display:grid;gap:12px;padding:16px;border-radius:12px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface)}.mf-section--full{padding:10px}.mf-section__header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mf-section__header h3{margin:0;font-size:1.05rem;font-weight:600}.mf-help{margin:6px 0 0;font-size:.9rem;color:var(--md-sys-color-on-surface-variant)}.mf-note{padding:10px 12px;border-radius:10px;border:1px dashed var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container);color:var(--md-sys-color-on-surface-variant);font-size:.9rem}.help-icon-button{--mdc-icon-button-state-layer-size: 28px;--mdc-icon-button-icon-size: 18px;width:28px;height:28px;padding:0;display:inline-flex;align-items:center;justify-content:center;margin-right:-4px}.help-icon-button mat-icon{font-size:18px;width:18px;height:18px}.mat-mdc-form-field-icon-suffix{align-self:center}.mf-actions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-action-card,.mf-custom-card,.mf-custom-message-card{display:grid;gap:10px;padding:14px;border-radius:10px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-high)}.mf-action-card__title,.mf-custom-card__title{font-weight:600;color:var(--md-sys-color-on-surface)}.mf-actions-layout{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-toggle-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;align-items:start}.mf-hooks-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.mf-hook-field textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:.85rem}.mf-actions-row{display:inline-flex;gap:8px;align-items:center}.mf-actions-row--end{justify-content:flex-end;width:100%}.mf-custom-actions,.mf-custom-messages{display:grid;gap:12px}.mf-custom-card__header{display:flex;align-items:center;justify-content:space-between;gap:8px}.mf-custom-card__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;align-items:center}.mf-messages-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.mf-empty{margin:0;color:var(--md-sys-color-on-surface-variant)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i2.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: CascadeManagerTabComponent, selector: "praxis-cascade-manager-tab", inputs: ["fields", "connections"], outputs: ["apply", "cancel"] }] });
|
|
4812
4823
|
}
|
|
4813
4824
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: ManualFormConfigEditorComponent, decorators: [{
|
|
4814
4825
|
type: Component,
|
|
@@ -5557,9 +5568,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
5557
5568
|
matInput
|
|
5558
5569
|
rows="6"
|
|
5559
5570
|
[value]="formRulesStateText"
|
|
5571
|
+
readonly
|
|
5572
|
+
aria-readonly="true"
|
|
5560
5573
|
(input)="onRulesStateTextChange($any($event.target).value)"
|
|
5561
5574
|
placeholder='{"nodes":[],"edges":[]}'
|
|
5562
5575
|
></textarea>
|
|
5576
|
+
<mat-hint>{{ tx('editor.rules.formRulesStateReadonlyHint', 'Generated by the visual editor for round-trip; edit formRules instead.') }}</mat-hint>
|
|
5563
5577
|
<button
|
|
5564
5578
|
mat-icon-button
|
|
5565
5579
|
matSuffix
|
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.29",
|
|
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.29",
|
|
9
|
+
"@praxisui/dynamic-fields": "^9.0.0-beta.29",
|
|
10
|
+
"@praxisui/settings-panel": "^9.0.0-beta.29",
|
|
11
|
+
"@praxisui/metadata-editor": "^9.0.0-beta.29",
|
|
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.29",
|
|
17
17
|
"rxjs": "~7.8.0"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|