@praxisui/dynamic-form 1.0.0-beta.61 → 1.0.0-beta.62

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/index.d.ts CHANGED
@@ -343,6 +343,94 @@ declare class FormAiAdapter extends BaseAiAdapter<FormConfig> {
343
343
  private isFilled;
344
344
  }
345
345
 
346
+ interface EditorDocument<TConfig, TBindings = unknown> {
347
+ kind: string;
348
+ version: number;
349
+ config: TConfig;
350
+ bindings?: TBindings;
351
+ }
352
+ interface EditorDiagnostic {
353
+ level: 'error' | 'warning' | 'info';
354
+ code: string;
355
+ message: string;
356
+ path?: string;
357
+ }
358
+ type DynamicFormMode = 'create' | 'edit' | 'view';
359
+ interface DynamicFormBindings {
360
+ mode?: DynamicFormMode;
361
+ }
362
+ interface DynamicFormPresentationSnapshot {
363
+ labelPosition?: 'above' | 'left';
364
+ labelFontSize?: number | null;
365
+ valueFontSize?: number | null;
366
+ compact?: boolean;
367
+ density?: 'comfortable' | 'cozy' | 'compact';
368
+ labelWidth?: number | null;
369
+ labelAlign?: 'start' | 'center' | 'end';
370
+ valueAlign?: 'start' | 'center' | 'end';
371
+ }
372
+ interface DynamicFormSchemaPrefsSnapshot {
373
+ notifyIfOutdated?: 'inline' | 'snackbar' | 'both' | 'none';
374
+ snoozeMs?: number;
375
+ autoOpenSettingsOnOutdated?: boolean;
376
+ }
377
+ interface DynamicFormContextSnapshot {
378
+ backConfig?: BackConfig;
379
+ presentation?: DynamicFormPresentationSnapshot;
380
+ schemaPrefs?: DynamicFormSchemaPrefsSnapshot;
381
+ }
382
+ interface DynamicFormAuthoringDocument extends EditorDocument<FormConfig, DynamicFormBindings> {
383
+ kind: 'praxis.dynamic-form.editor';
384
+ version: 1;
385
+ contextSnapshot?: DynamicFormContextSnapshot;
386
+ }
387
+ interface DynamicFormValidationContext {
388
+ server?: {
389
+ schemaHash?: string;
390
+ };
391
+ }
392
+ interface DynamicFormProjectionContext {
393
+ mode?: DynamicFormMode;
394
+ }
395
+ interface DynamicFormRuntimeContext {
396
+ currentBindings?: DynamicFormBindings;
397
+ currentContextSnapshot?: DynamicFormContextSnapshot;
398
+ server?: {
399
+ schemaHash?: string;
400
+ };
401
+ }
402
+ interface DynamicFormApplyPlan {
403
+ canonicalConfig: FormConfig;
404
+ bindingsPatch?: DynamicFormBindings;
405
+ contextSnapshot?: DynamicFormContextSnapshot;
406
+ persistence?: {
407
+ saveConfig?: boolean;
408
+ saveBindings?: boolean;
409
+ saveContextSnapshot?: boolean;
410
+ };
411
+ runtime?: {
412
+ rebindMode?: boolean;
413
+ clearMode?: boolean;
414
+ rebuildForm?: boolean;
415
+ refreshPresentation?: boolean;
416
+ clearPresentation?: boolean;
417
+ refreshSchemaState?: boolean;
418
+ clearSchemaState?: boolean;
419
+ refreshBackNavigation?: boolean;
420
+ clearBackNavigation?: boolean;
421
+ };
422
+ metadata?: {
423
+ attachSchemaSnapshot?: boolean;
424
+ };
425
+ diff?: {
426
+ modeChanged?: boolean;
427
+ presentationChanged?: boolean;
428
+ schemaPrefsChanged?: boolean;
429
+ backConfigChanged?: boolean;
430
+ };
431
+ diagnostics: EditorDiagnostic[];
432
+ }
433
+
346
434
  interface DynamicFieldRenderErrorEvent {
347
435
  phase: 'executeRendering' | 'detectChanges';
348
436
  fieldName: string;
@@ -509,6 +597,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
509
597
  get formBlocksBefore(): WidgetDefinition[];
510
598
  get formBlocksAfter(): WidgetDefinition[];
511
599
  get formBlocksBeforeActions(): WidgetDefinition[];
600
+ get beforeActionsPlacement(): 'insideLastSection' | 'afterSections';
512
601
  get actionPlacement(): 'insideLastSection' | 'afterSections' | 'top';
513
602
  /**
514
603
  * Precedence for editorial widget interpolation:
@@ -615,6 +704,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
615
704
  isSectionVisible(section?: FormSection): boolean;
616
705
  getSectionTitle(section: FormSection): string | undefined;
617
706
  getSectionDescription(section: FormSection): string | undefined;
707
+ getSectionAppearance(section: FormSection): 'card' | 'plain' | 'step' | undefined;
708
+ getSectionStepLabel(section: FormSection): string | undefined;
618
709
  getSectionTitleColor(section: FormSection): string | undefined;
619
710
  getSectionDescriptionColor(section: FormSection): string | undefined;
620
711
  getSectionTitleStyle(section: FormSection): string | undefined;
@@ -781,8 +872,20 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
781
872
  trackBySection(index: number, section: FormSection): string;
782
873
  trackByRow(index: number, row: FormRow): string;
783
874
  trackByColumn(index: number, column: FormColumn): string;
784
- /** Apply configuration updates coming from external adapters (e.g., AI) in a controlled way. */
875
+ /** Apply configuration or canonical authoring updates coming from external adapters (e.g., AI). */
785
876
  applyConfigFromAdapter(nextConfig: FormConfig): void;
877
+ applyConfigFromAdapter(nextConfig: DynamicFormAuthoringDocument): void;
878
+ private buildDynamicFormEditorRuntimeContext;
879
+ private captureCurrentContextSnapshot;
880
+ private captureCurrentPresentationSnapshot;
881
+ private captureCurrentSchemaPrefsSnapshot;
882
+ private executeDynamicFormEditorApplyPlan;
883
+ private attachRuntimeMetadataToDynamicFormConfig;
884
+ private parsePresentationCssNumber;
885
+ private clearDynamicFormEditorPersistence;
886
+ private clearStoredPresentationSnapshots;
887
+ private resetPresentationVarsToDefaults;
888
+ private resetSchemaPrefsToDefaults;
786
889
  retryInitialization(): void;
787
890
  getErrorTitle(): string;
788
891
  showDetailedError(): void;
@@ -827,7 +930,9 @@ declare class FormConfigService {
827
930
  interface JsonValidationResult {
828
931
  isValid: boolean;
829
932
  error?: string;
933
+ document?: DynamicFormAuthoringDocument;
830
934
  config?: FormConfig;
935
+ diagnostics?: EditorDiagnostic[];
831
936
  }
832
937
  interface JsonEditorEvent {
833
938
  type: 'apply' | 'format' | 'validation';
@@ -837,12 +942,15 @@ declare class JsonConfigEditorComponent implements OnInit, OnDestroy {
837
942
  private cdr;
838
943
  private configService;
839
944
  config: FormConfig | null;
945
+ document: DynamicFormAuthoringDocument | null;
840
946
  configChange: EventEmitter<FormConfig>;
947
+ documentChange: EventEmitter<DynamicFormAuthoringDocument>;
841
948
  validationChange: EventEmitter<JsonValidationResult>;
842
949
  editorEvent: EventEmitter<JsonEditorEvent>;
843
950
  jsonText: string;
844
951
  isValidJson: boolean;
845
952
  jsonError: string;
953
+ diagnostics: EditorDiagnostic[];
846
954
  private destroy$;
847
955
  private jsonTextChanges$;
848
956
  constructor(cdr: ChangeDetectorRef, configService: FormConfigService);
@@ -852,18 +960,20 @@ declare class JsonConfigEditorComponent implements OnInit, OnDestroy {
852
960
  applyJsonChanges(): void;
853
961
  formatJson(): void;
854
962
  updateJsonFromConfig(config: FormConfig): void;
963
+ updateJsonFromDocument(document: DynamicFormAuthoringDocument): void;
855
964
  /**
856
965
  * Força atualização do JSON com a configuração atual
857
966
  */
858
967
  refreshJson(): void;
859
968
  getCurrentConfig(): FormConfig | null;
969
+ getCurrentDocument(): DynamicFormAuthoringDocument | null;
860
970
  hasChanges(): boolean;
861
971
  private validateJson;
862
972
  private updateValidationState;
863
973
  insertHooksTemplate(): void;
864
974
  enableReactiveValidation(): void;
865
975
  static ɵfac: i0.ɵɵFactoryDeclaration<JsonConfigEditorComponent, never>;
866
- static ɵcmp: i0.ɵɵComponentDeclaration<JsonConfigEditorComponent, "form-json-config-editor", never, { "config": { "alias": "config"; "required": false; }; }, { "configChange": "configChange"; "validationChange": "validationChange"; "editorEvent": "editorEvent"; }, never, never, true, never>;
976
+ static ɵcmp: i0.ɵɵComponentDeclaration<JsonConfigEditorComponent, "form-json-config-editor", never, { "config": { "alias": "config"; "required": false; }; "document": { "alias": "document"; "required": false; }; }, { "configChange": "configChange"; "documentChange": "documentChange"; "validationChange": "validationChange"; "editorEvent": "editorEvent"; }, never, never, true, never>;
867
977
  }
868
978
 
869
979
  declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, OnInit, OnDestroy {
@@ -877,10 +987,14 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
877
987
  ruleBuilderState?: RuleBuilderState;
878
988
  currentRules: FormLayoutRule[];
879
989
  private initialConfig;
990
+ private initialDocument;
991
+ private readonly openedWithCanonicalDocument;
880
992
  backConfig?: BackConfig;
993
+ private includeBackConfigBlock;
881
994
  formId?: string;
882
995
  componentKeyId?: string;
883
996
  inputMode: 'create' | 'edit' | 'view';
997
+ private includeBindingsBlock;
884
998
  private readonly editorMode;
885
999
  isPresentationMode: boolean;
886
1000
  truncatePreview: boolean;
@@ -905,6 +1019,8 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
905
1019
  snoozeMs: number;
906
1020
  autoOpenSettingsOnOutdated: boolean;
907
1021
  };
1022
+ private includePresentationBlock;
1023
+ private includeSchemaPrefsBlock;
908
1024
  serverMeta?: {
909
1025
  serverHash?: string;
910
1026
  lastVerifiedAt?: string;
@@ -923,11 +1039,20 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
923
1039
  updateDirtyState(reason?: string): void;
924
1040
  getSettingsValue(): any;
925
1041
  onSave(): any;
926
- onJsonConfigChange(newConfig: FormConfig): void;
1042
+ onJsonConfigChange(newValue: FormConfig | DynamicFormAuthoringDocument): void;
927
1043
  onJsonValidationChange(result: JsonValidationResult): void;
928
1044
  onJsonEditorEvent(_event: JsonEditorEvent): void;
929
1045
  onConfigChange(newConfig: FormConfig): void;
930
1046
  onRulesChanged(state: RuleBuilderState): void;
1047
+ get jsonDocument(): DynamicFormAuthoringDocument;
1048
+ onBackConfigChange(): void;
1049
+ isBindingsBlockPersisted(): boolean;
1050
+ isPresentationBlockPersisted(): boolean;
1051
+ isSchemaPrefsBlockPersisted(): boolean;
1052
+ isBackConfigBlockPersisted(): boolean;
1053
+ onInputModeChange(): void;
1054
+ onPresentationPrefsChange(reason: string): void;
1055
+ onSchemaPrefsChange(reason: string): void;
931
1056
  private createRuleBuilderConfig;
932
1057
  private mapMetadataToSchema;
933
1058
  private mapDataTypeToFieldType;
@@ -940,6 +1065,13 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
940
1065
  restoreHintsDefaults(): void;
941
1066
  private loadPrefsFromStorage;
942
1067
  private normalizeMode;
1068
+ private buildAuthoringDocument;
1069
+ private createBackConfigState;
1070
+ private mergePresentationPrefs;
1071
+ private mergeSchemaPrefs;
1072
+ private toPresentationSnapshot;
1073
+ private toSchemaPrefsSnapshot;
1074
+ private toBackConfigSnapshot;
943
1075
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicFormConfigEditor, [null, null, null, null, { optional: true; }]>;
944
1076
  static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicFormConfigEditor, "praxis-dynamic-form-config-editor", never, {}, {}, never, never, true, never>;
945
1077
  }
@@ -1208,6 +1340,25 @@ declare function normalizeDateArrays(data: any): any;
1208
1340
  declare const SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER: Provider;
1209
1341
  declare function provideSettingsPanelDynamicForm(): Provider;
1210
1342
 
1343
+ declare function createDynamicFormAuthoringDocument(source: {
1344
+ config?: unknown;
1345
+ bindings?: unknown;
1346
+ contextSnapshot?: unknown;
1347
+ }): DynamicFormAuthoringDocument;
1348
+ declare function parseLegacyOrDynamicFormDocument(raw: unknown): DynamicFormAuthoringDocument;
1349
+ declare function normalizeDynamicFormAuthoringDocument(doc: DynamicFormAuthoringDocument): DynamicFormAuthoringDocument;
1350
+ declare function validateDynamicFormAuthoringDocument(doc: DynamicFormAuthoringDocument, context?: DynamicFormValidationContext): EditorDiagnostic[];
1351
+ declare function validateDynamicFormAuthoringInput(raw: unknown, context?: DynamicFormValidationContext): EditorDiagnostic[];
1352
+ declare function toCanonicalDynamicFormConfig(doc: DynamicFormAuthoringDocument, _context?: DynamicFormProjectionContext): FormConfig;
1353
+ declare function buildDynamicFormApplyPlan(doc: DynamicFormAuthoringDocument, runtime?: DynamicFormRuntimeContext, options?: {
1354
+ saveConfig?: boolean;
1355
+ saveBindings?: boolean;
1356
+ saveContextSnapshot?: boolean;
1357
+ attachSchemaSnapshot?: boolean;
1358
+ replaceContext?: boolean;
1359
+ }): DynamicFormApplyPlan;
1360
+ declare function serializeDynamicFormAuthoringDocument(doc: DynamicFormAuthoringDocument): unknown;
1361
+
1211
1362
  declare class CanvasToolbarComponent {
1212
1363
  selectedElement: CanvasElement | null;
1213
1364
  editMetadata: EventEmitter<void>;
@@ -1242,6 +1393,8 @@ declare class CanvasToolbarComponent {
1242
1393
  }
1243
1394
 
1244
1395
  interface EditableFormSection extends FormSection {
1396
+ appearance?: 'card' | 'plain' | 'step';
1397
+ stepLabel?: string;
1245
1398
  collapsible?: boolean;
1246
1399
  collapsed?: boolean;
1247
1400
  order?: number;
@@ -1566,5 +1719,5 @@ declare const FORM_COMPONENT_AI_CAPABILITIES: CapabilityCatalog;
1566
1719
  */
1567
1720
  declare function getFormAiCatalog(formConfig?: FormConfig): AiCapabilityCatalog;
1568
1721
 
1569
- export { ActionsEditorComponent, CanvasStateService, CanvasToolbarComponent, ColumnEditorComponent, DynamicFormLayoutService, FORM_AI_CAPABILITIES, FORM_COMPONENT_AI_CAPABILITIES, FieldConfiguratorComponent, FieldEditorComponent, FormConfigService, FormContextService, FormLayoutService, JsonConfigEditorComponent, LayoutColorToken, LayoutEditorComponent, LayoutPrefsService, PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA, PraxisDynamicForm, PraxisDynamicFormConfigEditor, PraxisFilterForm, PraxisFormActionsComponent, RowConfiguratorComponent, RowEditorComponent, SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER, SectionEditorComponent, TASK_PRESETS, applyVisibilityRules, formLayoutRulesToBuilderState, getFormAiCatalog, getFormCapabilities, getFormEnum, isRuleSatisfied, normalizeDateArrays, providePraxisDynamicFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, stripLegacyFieldMetadata };
1570
- export type { CanvasElement, CanvasElementType, CanvasPathPart, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, DynamicFieldRenderErrorEvent, FieldPath, FieldPathContainer, FieldPathWithIndex, Capability as FormComponentCapability, CapabilityCatalog as FormComponentCapabilityCatalog, CapabilityCategory as FormComponentCapabilityCategory, ValueKind as FormComponentValueKind, FormConfigLike, IdPath, JsonEditorEvent, JsonValidationResult, LayoutChange, LayoutResult, Operation, Path, PathWithIndex, PraxisFormActionEvent, RemovePolicy, ValidationReport, ValueKind$1 as ValueKind };
1722
+ export { ActionsEditorComponent, CanvasStateService, CanvasToolbarComponent, ColumnEditorComponent, DynamicFormLayoutService, FORM_AI_CAPABILITIES, FORM_COMPONENT_AI_CAPABILITIES, FieldConfiguratorComponent, FieldEditorComponent, FormConfigService, FormContextService, FormLayoutService, JsonConfigEditorComponent, LayoutColorToken, LayoutEditorComponent, LayoutPrefsService, PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA, PraxisDynamicForm, PraxisDynamicFormConfigEditor, PraxisFilterForm, PraxisFormActionsComponent, RowConfiguratorComponent, RowEditorComponent, SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER, SectionEditorComponent, TASK_PRESETS, applyVisibilityRules, buildDynamicFormApplyPlan, createDynamicFormAuthoringDocument, formLayoutRulesToBuilderState, getFormAiCatalog, getFormCapabilities, getFormEnum, isRuleSatisfied, normalizeDateArrays, normalizeDynamicFormAuthoringDocument, parseLegacyOrDynamicFormDocument, providePraxisDynamicFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput };
1723
+ export type { CanvasElement, CanvasElementType, CanvasPathPart, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, DynamicFieldRenderErrorEvent, DynamicFormApplyPlan, DynamicFormAuthoringDocument, DynamicFormBindings, DynamicFormContextSnapshot, DynamicFormMode, DynamicFormPresentationSnapshot, DynamicFormProjectionContext, DynamicFormRuntimeContext, DynamicFormSchemaPrefsSnapshot, DynamicFormValidationContext, EditorDiagnostic, EditorDocument, FieldPath, FieldPathContainer, FieldPathWithIndex, Capability as FormComponentCapability, CapabilityCatalog as FormComponentCapabilityCatalog, CapabilityCategory as FormComponentCapabilityCategory, ValueKind as FormComponentValueKind, FormConfigLike, IdPath, JsonEditorEvent, JsonValidationResult, LayoutChange, LayoutResult, Operation, Path, PathWithIndex, PraxisFormActionEvent, RemovePolicy, ValidationReport, ValueKind$1 as ValueKind };
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@praxisui/dynamic-form",
3
- "version": "1.0.0-beta.61",
3
+ "version": "1.0.0-beta.62",
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/settings-panel": "^1.0.0-beta.61",
10
- "@praxisui/visual-builder": "^1.0.0-beta.61",
11
- "@praxisui/specification-core": "^1.0.0-beta.61",
12
- "@praxisui/specification": "^1.0.0-beta.61",
13
- "@praxisui/core": "^1.0.0-beta.61",
14
- "@praxisui/cron-builder": "^1.0.0-beta.61"
9
+ "@praxisui/settings-panel": "^1.0.0-beta.62",
10
+ "@praxisui/visual-builder": "^1.0.0-beta.62",
11
+ "@praxisui/specification-core": "^1.0.0-beta.62",
12
+ "@praxisui/specification": "^1.0.0-beta.62",
13
+ "@praxisui/core": "^1.0.0-beta.62",
14
+ "@praxisui/cron-builder": "^1.0.0-beta.62"
15
15
  },
16
16
  "dependencies": {
17
17
  "tslib": "^2.3.0",
@@ -25,17 +25,18 @@
25
25
  "type": "git",
26
26
  "url": "https://github.com/codexrodrigues/praxis-ui-angular"
27
27
  },
28
- "homepage": "https://github.com/codexrodrigues/praxis-ui-angular#readme",
28
+ "homepage": "https://praxisui.dev",
29
29
  "bugs": {
30
30
  "url": "https://github.com/codexrodrigues/praxis-ui-angular/issues"
31
31
  },
32
32
  "keywords": [
33
33
  "angular",
34
34
  "praxisui",
35
- "forms",
36
35
  "dynamic-form",
37
36
  "metadata",
38
- "ui"
37
+ "schema-driven",
38
+ "forms",
39
+ "runtime-config"
39
40
  ],
40
41
  "sideEffects": false,
41
42
  "module": "fesm2022/praxisui-dynamic-form.mjs",