@praxisui/dynamic-form 8.0.0-beta.8 → 8.0.0-beta.9

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 CHANGED
@@ -720,6 +720,7 @@ Apache-2.0 – see the `LICENSE` packaged with this library or the repository ro
720
720
  - Fluxo de Schema (ETag/304, schemaId, reconciliação): `projects/praxis-core/docs/schema-flow.md` (canônico) e `docs/schemas/fluxo-schema.md` (resumo operacional)
721
721
  - Guia de implementação e metadados da cascata: `docs/CASCADE-NATIVA.md`
722
722
  - Padrões de endpoints (Options vs Filter) para selects: `projects/praxis-dynamic-fields/docs/generic-crud-service.md` (canônico) e `docs/DEVS-GENERIC-CRUD-SERVICE.md` (resumo operacional)
723
+ - Recipe oficial de Entity Lookup corporativo com `RESOURCE_ENTITY`, `dependsOn`, `dependencyFilterMap`, reidratação por `by-ids` e política de seleção: `examples/ai-recipes/praxis-dynamic-form.entity-lookup-procurement.json`
723
724
 
724
725
  ## Verificação de Schema (ETag/If-None-Match)
725
726
 
@@ -9082,6 +9082,7 @@ class PraxisDynamicForm {
9082
9082
  materialDesign: fieldMeta.materialDesign,
9083
9083
  clearButton: fieldMeta.clearButton,
9084
9084
  extra: fieldMeta.extra,
9085
+ optionSource: fieldMeta.optionSource,
9085
9086
  controlType,
9086
9087
  };
9087
9088
  // Seed específicos para NUMBER (numericTextBox)
@@ -9843,6 +9844,22 @@ class PraxisDynamicForm {
9843
9844
  });
9844
9845
  return out;
9845
9846
  }
9847
+ mergeMetadataObjectPatch(current, patch) {
9848
+ if (!patch || typeof patch !== 'object' || Array.isArray(patch)) {
9849
+ return patch;
9850
+ }
9851
+ const base = current && typeof current === 'object' && !Array.isArray(current)
9852
+ ? { ...current }
9853
+ : {};
9854
+ Object.entries(patch).forEach(([key, value]) => {
9855
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
9856
+ base[key] = this.mergeMetadataObjectPatch(base[key], value);
9857
+ return;
9858
+ }
9859
+ base[key] = value;
9860
+ });
9861
+ return base;
9862
+ }
9846
9863
  deleteMetadataPath(target, path) {
9847
9864
  if (!target || typeof path !== 'string' || !path.trim())
9848
9865
  return;
@@ -10034,6 +10051,9 @@ class PraxisDynamicForm {
10034
10051
  fm.dataAttributes = patch.dataAttributes;
10035
10052
  }
10036
10053
  }
10054
+ if (patch.optionSource !== undefined) {
10055
+ fm.optionSource = this.mergeMetadataObjectPatch(fm.optionSource, patch.optionSource);
10056
+ }
10037
10057
  // Generic extras passthrough: merge into fm.extra to allow component-specific appearance/behavior
10038
10058
  if (patch.extra !== undefined) {
10039
10059
  const currExtra = (fm.extra && typeof fm.extra === 'object') ? fm.extra : {};
@@ -19432,6 +19452,7 @@ class PraxisDynamicFormConfigEditor {
19432
19452
  file: FieldType.STRING,
19433
19453
  url: FieldType.URL,
19434
19454
  boolean: FieldType.BOOLEAN,
19455
+ array: FieldType.JSON,
19435
19456
  json: FieldType.JSON,
19436
19457
  };
19437
19458
  return mapping[dataType ?? 'text'];
package/index.d.ts CHANGED
@@ -978,6 +978,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
978
978
  private getControlTypeName;
979
979
  private applyNullDeletionPatch;
980
980
  private stripNullMarkersFromPatch;
981
+ private mergeMetadataObjectPatch;
981
982
  private deleteMetadataPath;
982
983
  private getMetadataPath;
983
984
  /**
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@praxisui/dynamic-form",
3
- "version": "8.0.0-beta.8",
3
+ "version": "8.0.0-beta.9",
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": "^20.0.0",
7
7
  "@angular/core": "^20.0.0",
8
8
  "@angular/cdk": "^20.0.0",
9
- "@praxisui/rich-content": "^8.0.0-beta.8",
10
- "@praxisui/settings-panel": "^8.0.0-beta.8",
11
- "@praxisui/visual-builder": "^8.0.0-beta.8",
12
- "@praxisui/core": "^8.0.0-beta.8",
13
- "@praxisui/cron-builder": "^8.0.0-beta.8"
9
+ "@praxisui/rich-content": "^8.0.0-beta.9",
10
+ "@praxisui/settings-panel": "^8.0.0-beta.9",
11
+ "@praxisui/visual-builder": "^8.0.0-beta.9",
12
+ "@praxisui/core": "^8.0.0-beta.9",
13
+ "@praxisui/cron-builder": "^8.0.0-beta.9"
14
14
  },
15
15
  "dependencies": {
16
16
  "tslib": "^2.3.0",