@praxisui/dynamic-form 9.0.0-beta.6 → 9.0.0-beta.61

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisui/dynamic-form",
3
- "version": "9.0.0-beta.6",
3
+ "version": "9.0.0-beta.61",
4
4
  "description": "Angular dynamic form engine for Praxis UI: metadata-driven forms, hooks, and services integrating @praxisui/* packages.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
@@ -9,13 +9,13 @@
9
9
  "@angular/forms": "^21.0.0",
10
10
  "@angular/material": "^21.0.0",
11
11
  "@angular/router": "^21.0.0",
12
- "@praxisui/ai": "^9.0.0-beta.6",
13
- "@praxisui/dynamic-fields": "^9.0.0-beta.6",
14
- "@praxisui/metadata-editor": "^9.0.0-beta.6",
15
- "@praxisui/rich-content": "^9.0.0-beta.6",
16
- "@praxisui/settings-panel": "^9.0.0-beta.6",
17
- "@praxisui/visual-builder": "^9.0.0-beta.6",
18
- "@praxisui/core": "^9.0.0-beta.6",
12
+ "@praxisui/ai": "^9.0.0-beta.61",
13
+ "@praxisui/dynamic-fields": "^9.0.0-beta.61",
14
+ "@praxisui/metadata-editor": "^9.0.0-beta.61",
15
+ "@praxisui/rich-content": "^9.0.0-beta.61",
16
+ "@praxisui/settings-panel": "^9.0.0-beta.61",
17
+ "@praxisui/visual-builder": "^9.0.0-beta.61",
18
+ "@praxisui/core": "^9.0.0-beta.61",
19
19
  "rxjs": "^7.8.0"
20
20
  },
21
21
  "dependencies": {
@@ -30,6 +30,7 @@
30
30
  "keywords": [
31
31
  "angular",
32
32
  "praxisui",
33
+ "praxis",
33
34
  "dynamic-form",
34
35
  "metadata",
35
36
  "schema-driven",
@@ -46,7 +47,10 @@
46
47
  ".": {
47
48
  "types": "./types/praxisui-dynamic-form.d.ts",
48
49
  "default": "./fesm2022/praxisui-dynamic-form.mjs"
50
+ },
51
+ "./ai/component-registry.json": {
52
+ "default": "./ai/component-registry.json"
49
53
  }
50
54
  },
51
55
  "type": "module"
52
- }
56
+ }
@@ -58,7 +58,9 @@ Este documento e a referencia canonica da API JSON de praxis-dynamic-form-config
58
58
  - O editor visual e o editor JSON operam sobre `DynamicFormAuthoringDocument`.
59
59
  - O editor JSON aceita apenas o envelope canônico; payloads legados pertencem aos caminhos de compatibilidade do runtime.
60
60
  - `Apply` e `Save` emitem um snapshot canonico completo com semantica `replace-all`.
61
- - Em comandos condicionais, o editor visual autora `globalAction.payload` estruturado; `globalAction.payloadExpr` fica reservado ao JSON avancado e e preservado no round-trip quando nenhum payload estruturado e definido.
61
+ - Em comandos condicionais, o editor visual autora o efeito primario `effects[0].globalAction.payload` estruturado; `globalAction.payloadExpr` fica reservado ao JSON avancado e e preservado no round-trip quando nenhum payload estruturado e definido.
62
+ - Regras com multiplos `effects` continuam JSON-avancadas para autoria completa; ao editar o efeito primario pela UI, efeitos secundarios existentes sao preservados para evitar perda silenciosa.
63
+ - Em `formCommandRules[].policy`, o editor visual autora os campos comuns `distinct`, `distinctBy` e `runOnInitialEvaluation`; campos avancados vindos do JSON, como `trigger`, `debounceMs`, `errorPolicy` e `missingValuePolicy`, sao preservados no preview/apply, mas nao sao expostos como controles visuais completos.
62
64
  - `config`, `bindings` e `contextSnapshot` substituem integralmente o estado autoral anterior.
63
65
  - Ausencia de `bindings.mode` limpa o binding persistido e restaura o modo default efetivo do host.
64
66
  - Ausencia de `contextSnapshot.backConfig`, `contextSnapshot.presentation` ou `contextSnapshot.schemaPrefs` significa remocao explicita do bloco ausente.
@@ -101,7 +103,7 @@ Este documento e a referencia canonica da API JSON de praxis-dynamic-form-config
101
103
  | `messages` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
102
104
  | `hooks` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
103
105
  | `formRules` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
104
- | `formRulesState` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
106
+ | `formRulesState` | internal-round-trip | Gerado pelo builder visual; nao e alvo de autoria manual ou IA. | n/a | Internal | Estado visual derivado de `formRules` para reabertura do editor. |
105
107
  | `hints` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
106
108
  | `api` | not-specified | not-specified | n/a | Partial | Preservado da documentação anterior. |
107
109
  | `metadata` | not-specified | not-specified | n/a | Partial | Preservado da documentação anterior. |
@@ -139,7 +141,7 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
139
141
  | messages | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 1 path(s) mapeado(s), status predominante Active. |
140
142
  | hooks | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 1 path(s) mapeado(s), status predominante Active. |
141
143
  | formRules | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 1 path(s) mapeado(s), status predominante Active. |
142
- | formRulesState | Configuração top-level identificada na referência preservada. | not-yet-verified | component-defined | 1 path(s) mapeado(s), status predominante Active. |
144
+ | formRulesState | Estado interno de round-trip do builder visual. | verified | internal-derived | Gerado pelo editor a partir de `formRules`; nao escrever diretamente. |
143
145
 
144
146
  ### Nested configuration blocks
145
147
 
@@ -152,7 +154,7 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
152
154
  | `messages` | not-specified | not-specified | n/a | component-defined | Preservado da documentação anterior. |
153
155
  | `hooks` | not-specified | not-specified | n/a | component-defined | Preservado da documentação anterior. |
154
156
  | `formRules` | not-specified | not-specified | n/a | component-defined | Preservado da documentação anterior. |
155
- | `formRulesState` | not-specified | not-specified | n/a | component-defined | Preservado da documentação anterior. |
157
+ | `formRulesState` | internal-round-trip | Gerado pelo builder visual; nao e alvo de autoria manual ou IA. | n/a | internal-derived | Estado visual derivado de `formRules` para reabertura do editor. |
156
158
  | `hints` | not-specified | not-specified | n/a | component-defined | Preservado da documentação anterior. |
157
159
  | `api` | not-specified | not-specified | n/a | component-defined | Preservado da documentação anterior. |
158
160
 
@@ -329,7 +331,7 @@ A entrada operacional vem via `SETTINGS_PANEL_DATA` (injetado pelo settings pane
329
331
  | `messages` | Active | Editado na aba Mensagens. |
330
332
  | `hooks` | Active | Editado na aba Hooks e JSON. |
331
333
  | `formRules` | Active | Gerado pela aba Regras (visual builder). |
332
- | `formRulesState` | Active | Persistido para round-trip sem perda. |
334
+ | `formRulesState` | Internal | Persistido somente como estado de round-trip do builder visual; nao e contrato autoravel. |
333
335
  | `hints` | Active | Editado na aba Dicas e Tooltips. |
334
336
  | `api` | Partial | Sem aba dedicada; passa por JSON editor quando presente. |
335
337
  | `metadata` | Partial | Mantido em round-trip; sem painel dedicado. |
@@ -410,7 +412,7 @@ Correcao: e diff estrutural para UX do painel, nao auditoria de negocio.
410
412
  | `messages` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
411
413
  | `hooks` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
412
414
  | `formRules` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
413
- | `formRulesState` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
415
+ | `formRulesState` | internal-round-trip | Gerado pelo builder visual; nao e alvo de autoria manual ou IA. | n/a | Internal | Estado visual derivado de `formRules` para reabertura do editor. |
414
416
  | `hints` | not-specified | not-specified | n/a | Active | Preservado da documentação anterior. |
415
417
  | `api` | not-specified | not-specified | n/a | Partial | Preservado da documentação anterior. |
416
418
  | `metadata` | not-specified | not-specified | n/a | Partial | Preservado da documentação anterior. |
@@ -129,9 +129,10 @@ Essa fronteira preserva a premissa de plataforma: o formulario materializa e exp
129
129
  | `messages` | not-specified | not-specified | n/a | Partial | Chaves principais de submit/confirmacao usadas; contrato e mais amplo. |
130
130
  | `formRules` | not-specified | not-specified | n/a | Active | Aplicadas no pipeline de regras do runtime. |
131
131
  | `formCommandRules` | not-specified | not-specified | n/a | Active | Regras condicionais de comando avaliadas sobre `formData` estabilizado depois de `formRules`; primeiro corte suporta `global-action`. |
132
- | `formRulesState` | not-specified | not-specified | n/a | Active | Persistido para round-trip do builder visual. |
132
+ | `formRulesState` | internal-round-trip | Gerado pelo builder visual; nao e alvo de autoria manual ou IA. | n/a | Internal | Estado visual derivado de `formRules` para reabertura do editor. |
133
133
  | `hooks` | not-specified | not-specified | n/a | Active | Integracao de ciclo (before/after) via runtime de hooks. |
134
134
  | `hints` | not-specified | not-specified | n/a | Declared-only | Mantido no contrato/editor; sem render dedicado no template principal. |
135
+ | `helpPresentation` | `FormHelpPresentationConfig` | No | `{ display: "inline" }` | Active | Politica visual para exibir `hint`/`helpText` dos campos sem alterar semantica dos DTOs; erros de validacao continuam inline. |
135
136
  | `fieldMetadata[].array` | `FieldArrayConfig` | No | n/a | Active | Contrato de Editable Collection apenas quando `fieldMetadata[].controlType === "array"` ou quando `x-ui.array` foi publicado explicitamente. |
136
137
 
137
138
  Nota editorial:
@@ -192,7 +193,7 @@ Este arquivo foi adaptado para o padrao canonico atual sem remover conteudo tecn
192
193
  | `api` | not-specified | not-specified | n/a | component-defined | Declarado no modelo; sem binding operacional direto no runtime atual. |
193
194
  | `messages` | not-specified | not-specified | n/a | component-defined | Chaves principais de submit/confirmacao usadas; contrato e mais amplo. |
194
195
  | `formRules` | not-specified | not-specified | n/a | component-defined | Aplicadas no pipeline de regras do runtime. |
195
- | `formRulesState` | not-specified | not-specified | n/a | component-defined | Persistido para round-trip do builder visual. |
196
+ | `formRulesState` | internal-round-trip | Gerado pelo builder visual; nao e alvo de autoria manual ou IA. | n/a | internal-derived | Estado visual derivado de `formRules` para reabertura do editor. |
196
197
  | `hooks` | not-specified | not-specified | n/a | component-defined | Integracao de ciclo (before/after) via runtime de hooks. |
197
198
  | `sections[].sectionHeader` | `FormSectionHeaderConfig` | No | n/a | Active | Header visual rico da seção com suporte a avatar dinâmico resolvido a partir de `formData`. |
198
199
 
@@ -559,7 +560,7 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
559
560
 
560
561
  | Input | Tipo | Default | Status | Runtime notes |
561
562
  | --- | --- | --- | --- | --- |
562
- | `config` | `FormConfig` | `{ sections: [] }` | Active | Contrato principal consumido no ciclo inteiro. |
563
+ | `config` | `FormConfig` | `{ sections: [] }` | Active | Contrato principal consumido no ciclo inteiro. `sections` é opcional somente para forms schema-driven com grounding explícito (`metadata.source='schema'`, schema metadata ou fonte runtime como `schemaUrl`/`resourcePath`); ausência de layout manual é normalizada internamente como array vazio e permite que `layoutPolicy`/schema materializem agrupamentos. |
563
564
  | `resourcePath` | `string \| undefined` | `undefined` | Active | Habilita carga de schema/dados remotos. Opcional quando `schemaUrl` explícito é fornecido. |
564
565
  | `resourceId` | `string \| number \| undefined` | `undefined` | Active | Carrega entidade no modo `edit/view`. |
565
566
  | `mode` | `'create' \| 'edit' \| 'view'` | `'create'` | Active | Governa submit, leitura e apresentacao. |
@@ -576,6 +577,8 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
576
577
  | `formId` | `string \| undefined` | `undefined` | Active | Chave de persistencia e identidade logica. |
577
578
  | `componentInstanceId` | `string \| undefined` | `undefined` | Active | Isola instancias com mesmo `formId`. |
578
579
  | `layout` | `FormLayout \| undefined` | `undefined` | Partial | Funciona como override estrutural em parte dos fluxos de layout/editor. |
580
+ | `generatedLayoutPreset` | `'default' \| 'compactPresentation'` | `'default'` | Active | Usado apenas ao criar a configuracao inicial a partir de schema/metadata; nao reprocessa layouts persistidos ou authorados. |
581
+ | `layoutPolicy` | `DynamicFormLayoutPolicy \| null` | `null` | Active | Politica opt-in para materializar layout a partir do schema atual. Use `source: 'schema'` com `persistence: 'transient'` para detalhe/read-only e command forms schema-driven sem persistir `sections` geradas nem reabrir configuracao local salva; politicas de host em `config`, como `helpPresentation`, continuam sendo aplicadas ao layout materializado. Em `mode='view'`, `intent: 'detail'` ou `preset: 'compactPresentation'` ativa apresentacao quando `presentationModeGlobal` nao foi informado; use `[presentationModeGlobal]=false` para controles read-only tradicionais. No preset `compactPresentation`, `x-ui.width` explicito empacota campos em linhas de 12 colunas e tem precedencia sobre `detailSummary.columns` por default; campos sem width permanecem full-width, a menos que `detailSummary.columns`/`responsiveColumns` declare a densidade do resumo. Use `detailSummary.widthPrecedence='summary'` quando a densidade do resumo read-only deve sobrescrever `x-ui.width` apenas nessa surface compacta. Use `responsiveColumns`, por exemplo `{ lg: 3, md: 2, sm: 1 }`, para drawers, side sheets e painéis corporativos estreitos sem copiar `FormConfig.sections` locais. `schemaType` e `schemaOperation` sao validados contra `schemaUrl` quando a URL declara esses parametros. |
579
582
  | `backConfig` | `BackConfig \| undefined` | `undefined` | Active | Integra retorno/navegacao no painel de configuracao; `confirmOnDirty` tem precedencia sobre `behavior.confirmOnUnsavedChanges` no cancel. |
580
583
  | `hooks` | `FormHooksLayout \| undefined` | `undefined` | Active | Override direto de hooks sobre `config.hooks`. |
581
584
  | `customEndpoints` | `EndpointConfig` | `{}` | Active | Override de endpoints no CRUD service interno. |
@@ -588,8 +591,34 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
588
591
  | `readonlyModeGlobal` | `boolean \| null` | `null` | Active | Estado global de leitura propagado para loader. |
589
592
  | `disabledModeGlobal` | `boolean \| null` | `null` | Active | Estado global de desabilitado propagado para loader. |
590
593
  | `presentationModeGlobal` | `boolean \| null` | `null` | Active | Modo apresentacao global (efetivo em `view`). |
594
+ | `fieldIconPolicy` | `'all' \| 'presentation-only' \| 'none'` | `'all'` | Active | Controla icones `prefixIcon`/`suffixIcon` vindos da metadata dos campos. `all` preserva o comportamento atual; `presentation-only` mantem icones decorativos no modo apresentacao e oculta os slots de icone em controles input/read-only tradicionais; `none` oculta esses slots em todos os modos. |
591
595
  | `visibleGlobal` | `boolean \| null` | `null` | Active | Visibilidade global propagada para loader. |
592
596
 
597
+ In `compactPresentation` runtime detail surfaces, rows, columns and sections are visible only when
598
+ they contain at least one field that can be materialized after metadata visibility and field-rule
599
+ overrides are resolved. Boolean values, including `false`, are valid presentation values and must
600
+ not be treated as empty detail content. If no field in a section is materialized, the section is
601
+ hidden instead of rendering an orphan title.
602
+
603
+ #### Migration baseline for ErgonX-style screens
604
+
605
+ For enterprise migrations that must become templates for many screens, `layoutPolicy`,
606
+ `helpPresentation` and `fieldIconPolicy` should be selected as part of the DTO/schema
607
+ handoff, not patched locally after visual review.
608
+
609
+ Recommended baseline:
610
+
611
+ | Surface | Inputs | Contract gate |
612
+ | --- | --- | --- |
613
+ | Detail/read-only | `layoutPolicy.source='schema'`, `intent='detail'`, `preset='compactPresentation'`, `persistence='transient'`, `schemaType='response'` | Response DTO publishes business grouping, order, labels, value presentation and safe widths. |
614
+ | Create/edit | `layoutPolicy.source='schema'`, `intent='command'`, `preset='groupedCommand'`, `persistence='transient'`, `schemaType='request'` | Request DTO/write contract publishes only editable fields, validators, options and help text required for the command. |
615
+ | Dense command drawer | `config.helpPresentation.display='auto'` with `preferPopoverForControls` for select, checkbox, toggle, date/datepickers and numeric controls | DTO help text is semantic and not a substitute for validation messages. |
616
+ | Input-heavy operational form | `fieldIconPolicy='presentation-only'` | Icons remain useful in read-only presentation but do not crowd editable controls. |
617
+
618
+ If a field requires a local label, local help text, local option mapping or local code/description
619
+ composition to look correct, the schema is not ready for scalable migration. Fix the backend DTO,
620
+ OpenAPI `x-ui` metadata or option/value-presentation contract first.
621
+
593
622
  #### Regras compartilhadas materializadas
594
623
 
595
624
  `domainRules` separa regra corporativa compartilhavel de regra materializada no `FormConfig`. Quando habilitado, o componente consulta o backend de configuracao via `DomainRuleFormRulesService`, transforma cada materializacao em `FormLayoutRule` e aplica a lista combinada:
@@ -686,7 +715,7 @@ Precedencias importantes:
686
715
  | `api` | Declared-only | Declarado no modelo; sem binding operacional direto no runtime atual. |
687
716
  | `messages` | Partial | Chaves principais de submit/confirmacao usadas; contrato e mais amplo. |
688
717
  | `formRules` | Active | Aplicadas no pipeline de regras do runtime. |
689
- | `formRulesState` | Active | Persistido para round-trip do builder visual. |
718
+ | `formRulesState` | Internal | Persistido somente como estado de round-trip do builder visual; nao e contrato autoravel. |
690
719
  | `hooks` | Active | Integracao de ciclo (before/after) via runtime de hooks. |
691
720
  | `hints` | Declared-only | Mantido no contrato/editor; sem render dedicado no template principal. |
692
721
 
@@ -863,7 +892,7 @@ O runtime emite `target-not-found` quando uma regra aponta para `section`, `row`
863
892
  | `api` | not-specified | not-specified | n/a | Declared-only | Declarado no modelo; sem binding operacional direto no runtime atual. |
864
893
  | `messages` | not-specified | not-specified | n/a | Partial | Chaves principais de submit/confirmacao usadas; contrato e mais amplo. |
865
894
  | `formRules` | not-specified | not-specified | n/a | Active | Aplicadas no pipeline de regras do runtime. |
866
- | `formRulesState` | not-specified | not-specified | n/a | Active | Persistido para round-trip do builder visual. |
895
+ | `formRulesState` | internal-round-trip | Gerado pelo builder visual; nao e alvo de autoria manual ou IA. | n/a | Internal | Estado visual derivado de `formRules` para reabertura do editor. |
867
896
  | `hooks` | not-specified | not-specified | n/a | Active | Integracao de ciclo (before/after) via runtime de hooks. |
868
897
  | `hints` | not-specified | not-specified | n/a | Declared-only | Mantido no contrato/editor; sem render dedicado no template principal. |
869
898