@praxisui/dynamic-form 9.0.4-rc.15 → 9.0.4-rc.16

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.
@@ -6013,7 +6013,7 @@ function pruneUndefined(value) {
6013
6013
  * Manifesto de authoring canônico para o componente praxis-dynamic-form.
6014
6014
  * Este arquivo define as operações permitidas pela IA para editar formulários.
6015
6015
  *
6016
- * @version 1.5.0
6016
+ * @version 1.5.1
6017
6017
  * @status COMPLIANT - Alinhado com contrato v2, gate de aceitação e semântica local/schema-backed.
6018
6018
  */
6019
6019
  const PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST = {
@@ -6021,13 +6021,14 @@ const PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST = {
6021
6021
  componentId: 'praxis-dynamic-form',
6022
6022
  ownerPackage: '@praxisui/dynamic-form',
6023
6023
  configSchemaId: 'FormConfig',
6024
- manifestVersion: '1.5.0',
6024
+ manifestVersion: '1.5.1',
6025
6025
  runtimeInputs: [
6026
6026
  { name: 'showAiAssistant', type: 'boolean', description: 'Mostra os gatilhos do copiloto semantico Praxis' },
6027
6027
  { name: 'config', type: 'FormConfig', description: 'Configuração do formulário; sections é opcional em forms schema-driven e não deve ser criado como array vazio apenas para satisfazer TypeScript.' },
6028
6028
  { name: 'resourcePath', type: 'string', description: 'Caminho do recurso (API)' },
6029
6029
  { name: 'readUrl', type: 'string', description: 'Endpoint canonico de leitura para surfaces VIEW/READ_PROJECTION' },
6030
6030
  { name: 'mode', type: 'string', allowedValues: ['create', 'edit', 'view'], description: 'Modo de operação' },
6031
+ { name: 'configPersistenceStrategy', type: 'string', allowedValues: ['local-first', 'input-first'], description: 'Precedência entre configuração persistida e contrato explícito do host. Use input-first em dialogs e surfaces transitórias governadas por schema para preservar mode e estados operacionais publicados pelo servidor.' },
6031
6032
  { name: 'generatedLayoutPreset', type: 'string', allowedValues: ['default', 'compactPresentation'], description: 'Preset usado apenas ao gerar a configuracao inicial a partir de metadata/schema; nao reprocessa layouts persistidos ou autorados.' },
6032
6033
  { name: 'layoutPolicy', type: 'DynamicFormLayoutPolicy', description: 'Politica opt-in para layout schema-driven transient. Use source=schema apenas quando o backend schema for a fonte canonica do agrupamento; use detailSummary para seleção de campos e densidade responsiva do resumo read-only compacto sem FormConfig.sections locais. Quando o resumo precisar vencer x-ui.width publicado para outras surfaces, use detailSummary.widthPrecedence=summary. Em groupedCommand, orphanFieldExpansion governa linhas com um unico campo; medium-and-wide e o default corporativo.' },
6033
6034
  { name: 'fieldIconPolicy', type: 'string', allowedValues: ['all', 'presentation-only', 'none'], description: 'Politica visual do host para icones prefix/suffix de campos vindos da metadata. Use presentation-only para manter icones decorativos em apresentacao e ocultar em controles tradicionais.' },
@@ -11756,7 +11757,9 @@ class PraxisDynamicForm {
11756
11757
  inputsLoadTimeout = setTimeout(finishInputsLoad, FORM_INPUT_PREFS_LOAD_TIMEOUT_MS);
11757
11758
  this.asyncConfigStorage.loadConfig(inputsKey).pipe(take(1)).subscribe({
11758
11759
  next: (inputsPref) => {
11759
- if (inputsPref && typeof inputsPref === 'object') {
11760
+ if (this.configPersistenceStrategy !== 'input-first' &&
11761
+ inputsPref &&
11762
+ typeof inputsPref === 'object') {
11760
11763
  if (inputsPref.mode === 'create' || inputsPref.mode === 'edit' || inputsPref.mode === 'view') {
11761
11764
  this.mode = inputsPref.mode;
11762
11765
  this.debugLog('🔧 Applied persisted input mode', { mode: this.mode });
@@ -30965,7 +30968,7 @@ const PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA = {
30965
30968
  { name: 'showAiAssistant', type: 'boolean', default: true, description: 'Mostra os gatilhos do copiloto semantico Praxis para esta instancia do formulario' },
30966
30969
  { name: 'formId', type: 'string', description: 'Chave para persistencia local da configuracao' },
30967
30970
  { name: 'componentInstanceId', type: 'string', description: 'Identificador estavel para instancias multiplas do formulario' },
30968
- { name: 'configPersistenceStrategy', type: "'local-first' | 'input-first'", default: 'local-first', description: 'Define se a configuracao local persistida ou a configuracao recebida por input tem precedencia na hidratacao.' },
30971
+ { name: 'configPersistenceStrategy', type: "'local-first' | 'input-first'", default: 'local-first', description: 'Define se a configuracao local persistida ou os inputs do host tem precedencia; input-first preserva inclusive o mode explicito contra preferencias persistidas.' },
30969
30972
  { name: 'layout', type: 'FormLayout', description: 'Layout opcional em vez do gerado' },
30970
30973
  { name: 'generatedLayoutPreset', type: "'default' | 'compactPresentation'", default: 'default', description: 'Preset usado apenas ao criar a configuracao inicial a partir de metadata/schema.' },
30971
30974
  { name: 'layoutPolicy', type: 'DynamicFormLayoutPolicy | null', description: 'Politica opt-in para materializar layout a partir do schema sem persistir sections geradas por padrao.' },
@@ -34994,6 +34997,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
34994
34997
  */
34995
34998
  const ENUMS = {
34996
34999
  mode: ['create', 'edit', 'view'],
35000
+ configPersistenceStrategy: ['local-first', 'input-first'],
34997
35001
  schemaSource: ['resource', 'filter'],
34998
35002
  generatedLayoutPreset: ['default', 'compactPresentation'],
34999
35003
  layoutPolicySource: ['authored', 'schema'],
@@ -35171,6 +35175,14 @@ const FORM_COMPONENT_AI_CAPABILITIES = {
35171
35175
  description: 'Preset usado somente na criacao inicial de FormConfig a partir de schema/metadata.',
35172
35176
  safetyNotes: 'Nao reprocessa layouts ja persistidos ou authorados.',
35173
35177
  },
35178
+ {
35179
+ path: 'inputs.configPersistenceStrategy',
35180
+ category: 'inputs',
35181
+ valueKind: 'enum',
35182
+ allowedValues: ENUMS.configPersistenceStrategy,
35183
+ description: 'Define se preferências locais persistidas ou o contrato explícito do host governam a materialização corrente.',
35184
+ safetyNotes: 'Use input-first em commands e surfaces transitórias; isso impede que mode e estados operacionais antigos sobrescrevam o schema atual.',
35185
+ },
35174
35186
  {
35175
35187
  path: 'inputs.layoutPolicy',
35176
35188
  category: 'inputs',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisui/dynamic-form",
3
- "version": "9.0.4-rc.15",
3
+ "version": "9.0.4-rc.16",
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.15",
13
- "@praxisui/dynamic-fields": "^9.0.4-rc.15",
14
- "@praxisui/metadata-editor": "^9.0.4-rc.15",
15
- "@praxisui/rich-content": "^9.0.4-rc.15",
16
- "@praxisui/settings-panel": "^9.0.4-rc.15",
17
- "@praxisui/visual-builder": "^9.0.4-rc.15",
18
- "@praxisui/core": "^9.0.4-rc.15",
12
+ "@praxisui/ai": "^9.0.4-rc.16",
13
+ "@praxisui/dynamic-fields": "^9.0.4-rc.16",
14
+ "@praxisui/metadata-editor": "^9.0.4-rc.16",
15
+ "@praxisui/rich-content": "^9.0.4-rc.16",
16
+ "@praxisui/settings-panel": "^9.0.4-rc.16",
17
+ "@praxisui/visual-builder": "^9.0.4-rc.16",
18
+ "@praxisui/core": "^9.0.4-rc.16",
19
19
  "rxjs": "^7.8.0"
20
20
  },
21
21
  "dependencies": {
@@ -586,6 +586,7 @@ No ecossistema Praxis, ele funciona tanto como runtime final quanto como superfi
586
586
  | `enableCustomization` | `boolean` | `false` | Active | Habilita UX de customizacao do layout. |
587
587
  | `formId` | `string \| undefined` | `undefined` | Active | Chave de persistencia e identidade logica. |
588
588
  | `componentInstanceId` | `string \| undefined` | `undefined` | Active | Isola instancias com mesmo `formId`. |
589
+ | `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
590
  | `layout` | `FormLayout \| undefined` | `undefined` | Partial | Funciona como override estrutural em parte dos fluxos de layout/editor. |
590
591
  | `generatedLayoutPreset` | `'default' \| 'compactPresentation'` | `'default'` | Active | Usado apenas ao criar a configuracao inicial a partir de schema/metadata; nao reprocessa layouts persistidos ou authorados. |
591
592
  | `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. |
@@ -2776,7 +2776,7 @@ declare function buildDynamicFormRuleAuthoringContext(config: Pick<FormConfig, '
2776
2776
  * Manifesto de authoring canônico para o componente praxis-dynamic-form.
2777
2777
  * Este arquivo define as operações permitidas pela IA para editar formulários.
2778
2778
  *
2779
- * @version 1.5.0
2779
+ * @version 1.5.1
2780
2780
  * @status COMPLIANT - Alinhado com contrato v2, gate de aceitação e semântica local/schema-backed.
2781
2781
  */
2782
2782
  declare const PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST: ComponentAuthoringManifest;