@praxisui/dynamic-form 9.0.4-rc.9 → 9.0.4

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.4-rc.9",
3
+ "version": "9.0.4",
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.4-rc.9",
13
- "@praxisui/dynamic-fields": "^9.0.4-rc.9",
14
- "@praxisui/metadata-editor": "^9.0.4-rc.9",
15
- "@praxisui/rich-content": "^9.0.4-rc.9",
16
- "@praxisui/settings-panel": "^9.0.4-rc.9",
17
- "@praxisui/visual-builder": "^9.0.4-rc.9",
18
- "@praxisui/core": "^9.0.4-rc.9",
12
+ "@praxisui/ai": "^9.0.4",
13
+ "@praxisui/dynamic-fields": "^9.0.4",
14
+ "@praxisui/metadata-editor": "^9.0.4",
15
+ "@praxisui/rich-content": "^9.0.4",
16
+ "@praxisui/settings-panel": "^9.0.4",
17
+ "@praxisui/visual-builder": "^9.0.4",
18
+ "@praxisui/core": "^9.0.4",
19
19
  "rxjs": "^7.8.0"
20
20
  },
21
21
  "dependencies": {
@@ -232,14 +232,16 @@ O host deve persistir `formSubmit.formData` para fluxos normais. `formSubmit.raw
232
232
  ### Input bindings
233
233
 
234
234
  `initialValue` is an active component input for host-authored or complementary
235
- field values. The runtime applies it as local initial state without redefining
236
- the canonical remote entity loaded through `resourcePath` and `resourceId`.
235
+ field values. In `edit/view`, the runtime applies it without redefining the
236
+ canonical remote entity loaded through `resourcePath` and `resourceId`. In
237
+ `create`, including item-scoped command forms, it is the only supported source
238
+ of initial values: a contextual `resourceId` never triggers entity hydration.
237
239
 
238
240
  | Binding/Path | Type | Required | Source | Runtime normalization | Notes |
239
241
  | --- | --- | --- | --- | --- | --- |
240
242
  | `config` | `FormConfig` | Conditional | component-input | `normalizeFormConfig(config)` | Contrato principal quando fornecido diretamente pelo host. |
241
243
  | `resourcePath` | `string \| undefined` | Conditional | component-input | `crud.configure(resourcePath)` | Endpoint base para schema e dados remotos. Alternativa canônica: `schemaUrl` explícito. |
242
- | `resourceId` | `string \| number \| undefined` | No | component-input | update `pendingEntityId` + `loadEntity()` | Carrega entidade em modo `edit/view`. |
244
+ | `resourceId` | `string \| number \| undefined` | No | component-input | update `pendingEntityId`; hydrate only in `edit/view` | Carrega entidade em modo `edit/view`. Em `create`, pode identificar o item dono de um comando sem iniciar leitura nem bloquear os campos. |
243
245
  | `mode` | `'create' \| 'edit' \| 'view'` | No | component-input/storage | persistido em `formInputsKey` | Preferência de modo pode ser hidratada do storage. |
244
246
  | `schemaSource` | `'resource' \| 'filter'` | No | component-input | runtime branch | Seleciona caminho de obtenção de schema quando `schemaUrl` não é informado. |
245
247
  | `schemaUrl` | `string \| null \| undefined` | Conditional | component-input | parsed as `/schemas/filtered` contract | Fonte canônica explícita para inicialização schema-backed sem depender de `resourcePath`. |
@@ -569,7 +571,7 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
569
571
  | --- | --- | --- | --- | --- |
570
572
  | `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. |
571
573
  | `resourcePath` | `string \| undefined` | `undefined` | Active | Habilita carga de schema/dados remotos. Opcional quando `schemaUrl` explícito é fornecido. |
572
- | `resourceId` | `string \| number \| undefined` | `undefined` | Active | Carrega entidade no modo `edit/view`. |
574
+ | `resourceId` | `string \| number \| undefined` | `undefined` | Active | Carrega entidade no modo `edit/view`; em `create`, funciona apenas como contexto do item e não dispara hidratação. |
573
575
  | `mode` | `'create' \| 'edit' \| 'view'` | `'create'` | Active | Governa submit, leitura e apresentacao. |
574
576
  | `schemaSource` | `'resource' \| 'filter'` | `'resource'` | Active | Seleciona origem do schema remoto. |
575
577
  | `schemaUrl` | `string \| undefined` | `undefined` | Active | Permite usar schema canonico publicado pelo backend sem heuristica local de path e pode iniciar o fluxo corporativo sem `resourcePath`. |
@@ -586,9 +588,12 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
586
588
  | `enableCustomization` | `boolean` | `false` | Active | Habilita UX de customizacao do layout. |
587
589
  | `formId` | `string \| undefined` | `undefined` | Active | Chave de persistencia e identidade logica. |
588
590
  | `componentInstanceId` | `string \| undefined` | `undefined` | Active | Isola instancias com mesmo `formId`. |
591
+ | `configPersistenceStrategy` | `'local-first' \| 'input-first'` | `'local-first'` | Active | Em `input-first`, os inputs fornecidos pelo host, inclusive `mode`, permanecem autoritativos sobre preferencias persistidas da mesma instancia. Combine com `layoutPolicy.persistence='transient'` em commands efemeros para nao carregar nem gravar layout local. |
589
592
  | `layout` | `FormLayout \| undefined` | `undefined` | Partial | Funciona como override estrutural em parte dos fluxos de layout/editor. |
590
593
  | `generatedLayoutPreset` | `'default' \| 'compactPresentation'` | `'default'` | Active | Usado apenas ao criar a configuracao inicial a partir de schema/metadata; nao reprocessa layouts persistidos ou authorados. |
591
- | `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. No preset `groupedCommand`, `groupedCommand.orphanFieldExpansion` controla linhas com um unico campo: `medium-and-wide` (default) expande spans 6/8, `preserve` mantem o width publicado e `all` tambem expande campos compactos. 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. |
594
+ | `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. No preset `groupedCommand`, `groupedCommand.orphanFieldExpansion` controla linhas com um unico campo: `medium-and-wide` (default) expande spans 6/8, `preserve` mantem o width publicado e `all` tambem expande campos compactos. `groupedCommand.partialRowStrategy` usa `preserve` por default; `fill-compatible` projeta linhas parciais elegiveis em spans canônicos que completam 12 colunas por breakpoint/container, sem alterar `x-ui.width`, `sections` ou o documento de authoring. Controles compactos, uploads e tipos desconhecidos preservam seus spans. `groupedCommand.contextFields` identifica campos schema-backed já hidratados pela surface: eles permanecem no `FormGroup` e no payload, mas não renderizam controles redundantes. 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. |
595
+
596
+ O authoring emite o warning `dynamicForm.config.layout.groupedCommand.row.incomplete` quando uma linha gerada com dois ou mais campos ocupa menos de 12 colunas. Com `partialRowStrategy='fill-compatible'`, o warning desaparece quando a projeção resolve a linha; ele permanece acionável para `preserve` ou quando controles compactos/fixos/desconhecidos não podem ser redistribuídos.
592
597
  | `backConfig` | `BackConfig \| undefined` | `undefined` | Active | Integra retorno/navegacao no painel de configuracao; `confirmOnDirty` tem precedencia sobre `behavior.confirmOnUnsavedChanges` no cancel. |
593
598
  | `hooks` | `FormHooksLayout \| undefined` | `undefined` | Active | Override direto de hooks sobre `config.hooks`. |
594
599
  | `customEndpoints` | `EndpointConfig` | `{}` | Active | Override de endpoints no CRUD service interno. |
@@ -703,7 +708,7 @@ Validado em 2026-04-23 contra `praxis-api-quickstart` publicado no Render com
703
708
 
704
709
  #### Data mode e fluxo
705
710
 
706
- - `mode='create'`: cria registro, carga de entidade opcional.
711
+ - `mode='create'`: cria registro ou materializa um comando; nunca carrega a entidade por `resourceId`, e valores iniciais devem vir de `initialValue`.
707
712
  - `mode='edit'`: carrega entidade por `resourceId` quando disponivel.
708
713
  - `mode='view'`: foco em leitura/apresentacao; actions de edicao podem ser suprimidas.
709
714
 
@@ -1170,13 +1170,15 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
1170
1170
  private buildFieldRuleMetadataOverrides;
1171
1171
  private normalizeRuleFieldOptions;
1172
1172
  private getEffectiveColumn;
1173
- getColumnClasses(column: FormColumn): string[];
1173
+ getColumnClasses(column: FormColumn, row?: FormRow): string[];
1174
1174
  private getColumnSpanClasses;
1175
+ private getProjectedGroupedCommandSpan;
1176
+ private getColumnControlType;
1177
+ private isColumnVisibleAtBreakpoint;
1175
1178
  private getColumnOffsetClasses;
1176
1179
  private getColumnOrderClasses;
1177
1180
  private getColumnHiddenClasses;
1178
1181
  isColumnVisible(column: FormColumn): boolean;
1179
- private isResponsiveHiddenActive;
1180
1182
  getColumnPadding(column: FormColumn): number | undefined;
1181
1183
  getColumnStyles(column: FormColumn): Record<string, any> | null;
1182
1184
  private _getConfirmationMessage;
@@ -2776,7 +2778,7 @@ declare function buildDynamicFormRuleAuthoringContext(config: Pick<FormConfig, '
2776
2778
  * Manifesto de authoring canônico para o componente praxis-dynamic-form.
2777
2779
  * Este arquivo define as operações permitidas pela IA para editar formulários.
2778
2780
  *
2779
- * @version 1.5.0
2781
+ * @version 1.5.2
2780
2782
  * @status COMPLIANT - Alinhado com contrato v2, gate de aceitação e semântica local/schema-backed.
2781
2783
  */
2782
2784
  declare const PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST: ComponentAuthoringManifest;