@praxisui/dynamic-form 3.0.0-beta.9 → 4.0.0-beta.0

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
@@ -1,12 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnChanges, OnDestroy, EventEmitter, SimpleChanges, OnInit, ChangeDetectorRef, Provider, AfterViewInit, ElementRef } from '@angular/core';
2
+ import { OnChanges, OnDestroy, EventEmitter, SimpleChanges, OnInit, ChangeDetectorRef, NgZone, Provider, AfterViewInit, ElementRef } from '@angular/core';
3
+ import { HttpClient } from '@angular/common/http';
3
4
  import { FormGroup, FormBuilder, FormArray } from '@angular/forms';
4
5
  import { Router, ActivatedRoute } from '@angular/router';
5
6
  import { MatDialog } from '@angular/material/dialog';
6
7
  import { MatSnackBar } from '@angular/material/snack-bar';
7
8
  import { CdkDragStart, CdkDragMove, CdkDragEnd, CdkDragDrop } from '@angular/cdk/drag-drop';
8
9
  import * as _praxisui_core from '@praxisui/core';
9
- import { AsyncConfigStorage, FormLayout, FieldMetadata, FormLayoutRule, FormRuleTargetType as FormRuleTargetType$1, FormSection, FormRow, FormColumn, FormConfig, FormActionButton, BackConfig, FormHooksLayout, EndpointConfig, FormSubmitEvent, FormReadyEvent, FormValueChangeEvent, SyncResult, FormInitializationError, LoadingState, FormCustomActionEvent, FormActionConfirmationEvent, WidgetEventEnvelope, WidgetDefinition, GenericCrudService, ConnectionStorage, DynamicFormService, ErrorMessageService, SchemaNormalizerService, ComponentMetadataRegistry, GlobalConfigService, ComponentKeyService, LoadingOrchestrator, PraxisLoadingRenderer, FormHooksRegistry, FormHookPreset, LoggerService, FormSectionHeaderAction, FormSectionHeaderConfig, FormConfigState, FieldDefinition, ComponentDocMeta, Breakpoint, IconPickerService, SurfaceOpenPayload, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
10
+ import { AsyncConfigStorage, FormLayout, FieldMetadata, FormLayoutRule, FormRuleTargetType as FormRuleTargetType$1, FormSection, FormRow, FormColumn, FormConfig, FormActionButton, BackConfig, ApiEndpoint, ApiUrlEntry, FormHooksLayout, EndpointConfig, FormSubmitEvent, FormReadyEvent, FormValueChangeEvent, SyncResult, FormInitializationError, LoadingState, FormCustomActionEvent, FormActionConfirmationEvent, WidgetEventEnvelope, WidgetDefinition, GenericCrudService, ConnectionStorage, DynamicFormService, ErrorMessageService, SchemaNormalizerService, ComponentMetadataRegistry, GlobalConfigService, ComponentKeyService, LoadingOrchestrator, ApiUrlConfig, PraxisLoadingRenderer, FormHooksRegistry, FormHookPreset, LoggerService, FormSectionHeaderAction, FormSectionHeaderConfig, FormConfigState, FieldDefinition, ComponentDocMeta, Breakpoint, IconPickerService, SurfaceOpenPayload, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
10
11
  import * as rxjs from 'rxjs';
11
12
  import { Observable, BehaviorSubject } from 'rxjs';
12
13
  import { SettingsPanelService, SettingsValueProvider } from '@praxisui/settings-panel';
@@ -399,6 +400,14 @@ interface DynamicFormValidationContext {
399
400
  schemaHash?: string;
400
401
  };
401
402
  }
403
+ type DynamicFormRuntimeValueSource = 'runtime-input' | 'legacy-crud';
404
+ interface DynamicFormResolvedRuntimeContract {
405
+ schemaUrl?: string;
406
+ schemaSource?: DynamicFormRuntimeValueSource;
407
+ submitUrl?: string;
408
+ submitMethod?: 'post' | 'put' | 'patch';
409
+ submitSource?: DynamicFormRuntimeValueSource;
410
+ }
402
411
  interface DynamicFormProjectionContext {
403
412
  mode?: DynamicFormMode;
404
413
  }
@@ -408,6 +417,7 @@ interface DynamicFormRuntimeContext {
408
417
  server?: {
409
418
  schemaHash?: string;
410
419
  };
420
+ resolvedContract?: DynamicFormResolvedRuntimeContract;
411
421
  }
412
422
  interface DynamicFormApplyPlan {
413
423
  canonicalConfig: FormConfig;
@@ -468,6 +478,7 @@ type ResolvedSectionHeaderVisual = {
468
478
  };
469
479
  declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
470
480
  private crud;
481
+ private http;
471
482
  private fb;
472
483
  private cdr;
473
484
  private layoutService;
@@ -487,6 +498,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
487
498
  private global;
488
499
  private componentKeys;
489
500
  private loadingOrchestrator;
501
+ private ngZone;
502
+ private apiUrlConfig;
490
503
  private loadingRenderer?;
491
504
  private router?;
492
505
  private route?;
@@ -511,6 +524,18 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
511
524
  * 'filter' usa o schema do DTO de filtro (via /schemas/filtered no POST /filter request)
512
525
  */
513
526
  schemaSource: 'resource' | 'filter';
527
+ /** Canonical schema URL published by the backend surface catalog. */
528
+ schemaUrl?: string | null;
529
+ /** Canonical submit URL published by the backend surface catalog. */
530
+ submitUrl?: string | null;
531
+ /** Canonical submit method published by the backend surface catalog. */
532
+ submitMethod?: string | null;
533
+ /** Canonical response schema URL exposed for runtime diagnostics/follow-up. */
534
+ responseSchemaUrl?: string | null;
535
+ /** API endpoint entry used to resolve relative canonical URLs in detached hosts. */
536
+ apiEndpointKey?: ApiEndpoint | string | null;
537
+ /** Resolved API entry carried by detached hosts when route-scoped API_URL is not inherited. */
538
+ apiUrlEntry?: ApiUrlEntry | null;
514
539
  /**
515
540
  * CUSTOMIZAÇÃO DE LAYOUT - NÃO confundir com edição de dados do formulário
516
541
  *
@@ -613,6 +638,9 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
613
638
  private lastSchemaMeta?;
614
639
  private schemaRootHooks?;
615
640
  private destroy$;
641
+ private formValueChangesSubscription;
642
+ private formBuildCycleId;
643
+ private suppressedValueChangeBuildId;
616
644
  private readonly sectionHeaderBlobUrlCache;
617
645
  private readonly sectionHeaderObjectUrls;
618
646
  private lastCorrelationId?;
@@ -682,12 +710,21 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
682
710
  private mountAnimationTimer;
683
711
  protected isMounting: boolean;
684
712
  private hasBuiltFormFromConfig;
685
- constructor(crud: GenericCrudService<any>, fb: FormBuilder, cdr: ChangeDetectorRef, layoutService: FormLayoutService, contextService: FormContextService, rulesService: FormRulesService, settingsPanel: SettingsPanelService, dialog: MatDialog, asyncConfigStorage: AsyncConfigStorage, connectionStorage: ConnectionStorage, dynamicForm: DynamicFormService, snackBar: MatSnackBar, canvasState: CanvasStateService, dynamicLayout: DynamicFormLayoutService, errorMessages: ErrorMessageService, schemaNormalizer: SchemaNormalizerService, componentMetaRegistry: ComponentMetadataRegistry, global: GlobalConfigService, componentKeys: ComponentKeyService, loadingOrchestrator: LoadingOrchestrator, loadingRenderer?: PraxisLoadingRenderer | undefined, router?: Router | undefined, route?: ActivatedRoute | undefined, hooksRegistry?: FormHooksRegistry | undefined, hookPresets?: FormHookPreset[] | null | undefined, logger?: LoggerService | undefined);
713
+ constructor(crud: GenericCrudService<any>, http: HttpClient, fb: FormBuilder, cdr: ChangeDetectorRef, layoutService: FormLayoutService, contextService: FormContextService, rulesService: FormRulesService, settingsPanel: SettingsPanelService, dialog: MatDialog, asyncConfigStorage: AsyncConfigStorage, connectionStorage: ConnectionStorage, dynamicForm: DynamicFormService, snackBar: MatSnackBar, canvasState: CanvasStateService, dynamicLayout: DynamicFormLayoutService, errorMessages: ErrorMessageService, schemaNormalizer: SchemaNormalizerService, componentMetaRegistry: ComponentMetadataRegistry, global: GlobalConfigService, componentKeys: ComponentKeyService, loadingOrchestrator: LoadingOrchestrator, ngZone: NgZone, apiUrlConfig: ApiUrlConfig, loadingRenderer?: PraxisLoadingRenderer | undefined, router?: Router | undefined, route?: ActivatedRoute | undefined, hooksRegistry?: FormHooksRegistry | undefined, hookPresets?: FormHookPreset[] | null | undefined, logger?: LoggerService | undefined);
686
714
  private emitLoadingState;
687
715
  private buildLoadingContext;
688
716
  private beginLoading;
689
717
  private endLoading;
690
718
  private runHooks;
719
+ private resolveSubmitOperation;
720
+ private buildSubmitRequest;
721
+ private normalizeSubmitMethod;
722
+ private resolveSubmitHref;
723
+ private resolveApiHref;
724
+ private resolveApiOrigin;
725
+ private resolveApiEntry;
726
+ private configureCrudRuntime;
727
+ private unwrapRestApiResponse;
691
728
  private resolveStageDeclarations;
692
729
  private resolvePresetDeclarations;
693
730
  get shouldShowConfigControls(): boolean;
@@ -712,6 +749,9 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
712
749
  private syncWithServer;
713
750
  private loadEntity;
714
751
  private buildFormFromConfig;
752
+ private resetFormValueChangesSubscription;
753
+ private scheduleValueChangeBootstrapRelease;
754
+ private hasInteractiveFormState;
715
755
  private captureFormRuntimeState;
716
756
  private buildCurrentFormRuntimeContext;
717
757
  private buildRestoreTargetContext;
@@ -939,6 +979,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
939
979
  applyConfigFromAdapter(nextConfig: FormConfig): void;
940
980
  applyConfigFromAdapter(nextConfig: DynamicFormAuthoringDocument): void;
941
981
  private buildDynamicFormEditorRuntimeContext;
982
+ private buildResolvedRuntimeContractForEditor;
983
+ private readLegacySchemaUrlForEditor;
942
984
  private captureCurrentContextSnapshot;
943
985
  private captureCurrentPresentationSnapshot;
944
986
  private captureCurrentSchemaPrefsSnapshot;
@@ -952,6 +994,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
952
994
  retryInitialization(): void;
953
995
  getErrorTitle(): string;
954
996
  showDetailedError(): void;
997
+ private tryBuildExplicitSchemaContext;
955
998
  private buildSchemaContext;
956
999
  private getSchemaWithCache;
957
1000
  private isReactiveValidationEnabled;
@@ -960,8 +1003,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
960
1003
  private logRowGapsSnapshot;
961
1004
  private applyPresentationVars;
962
1005
  private applyPresentationConfig;
963
- static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicForm, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
964
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicForm, "praxis-dynamic-form", never, { "resourcePath": { "alias": "resourcePath"; "required": false; }; "resourceId": { "alias": "resourceId"; "required": false; }; "editorialContext": { "alias": "editorialContext"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "config": { "alias": "config"; "required": false; }; "schemaSource": { "alias": "schemaSource"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "backConfig": { "alias": "backConfig"; "required": false; }; "hooks": { "alias": "hooks"; "required": false; }; "removeEmptyContainersOnSave": { "alias": "removeEmptyContainersOnSave"; "required": false; }; "reactiveValidation": { "alias": "reactiveValidation"; "required": false; }; "reactiveValidationDebounceMs": { "alias": "reactiveValidationDebounceMs"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "readonlyModeGlobal": { "alias": "readonlyModeGlobal"; "required": false; }; "disabledModeGlobal": { "alias": "disabledModeGlobal"; "required": false; }; "presentationModeGlobal": { "alias": "presentationModeGlobal"; "required": false; }; "visibleGlobal": { "alias": "visibleGlobal"; "required": false; }; "customEndpoints": { "alias": "customEndpoints"; "required": false; }; }, { "formSubmit": "formSubmit"; "formCancel": "formCancel"; "formReset": "formReset"; "configChange": "configChange"; "formReady": "formReady"; "valueChange": "valueChange"; "syncCompleted": "syncCompleted"; "initializationError": "initializationError"; "loadingStateChange": "loadingStateChange"; "enableCustomizationChange": "enableCustomizationChange"; "customAction": "customAction"; "actionConfirmation": "actionConfirmation"; "schemaStatusChange": "schemaStatusChange"; "fieldRenderError": "fieldRenderError"; "widgetEvent": "widgetEvent"; }, never, never, true, never>;
1006
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicForm, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
1007
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicForm, "praxis-dynamic-form", never, { "resourcePath": { "alias": "resourcePath"; "required": false; }; "resourceId": { "alias": "resourceId"; "required": false; }; "editorialContext": { "alias": "editorialContext"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "config": { "alias": "config"; "required": false; }; "schemaSource": { "alias": "schemaSource"; "required": false; }; "schemaUrl": { "alias": "schemaUrl"; "required": false; }; "submitUrl": { "alias": "submitUrl"; "required": false; }; "submitMethod": { "alias": "submitMethod"; "required": false; }; "responseSchemaUrl": { "alias": "responseSchemaUrl"; "required": false; }; "apiEndpointKey": { "alias": "apiEndpointKey"; "required": false; }; "apiUrlEntry": { "alias": "apiUrlEntry"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "backConfig": { "alias": "backConfig"; "required": false; }; "hooks": { "alias": "hooks"; "required": false; }; "removeEmptyContainersOnSave": { "alias": "removeEmptyContainersOnSave"; "required": false; }; "reactiveValidation": { "alias": "reactiveValidation"; "required": false; }; "reactiveValidationDebounceMs": { "alias": "reactiveValidationDebounceMs"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "readonlyModeGlobal": { "alias": "readonlyModeGlobal"; "required": false; }; "disabledModeGlobal": { "alias": "disabledModeGlobal"; "required": false; }; "presentationModeGlobal": { "alias": "presentationModeGlobal"; "required": false; }; "visibleGlobal": { "alias": "visibleGlobal"; "required": false; }; "customEndpoints": { "alias": "customEndpoints"; "required": false; }; }, { "formSubmit": "formSubmit"; "formCancel": "formCancel"; "formReset": "formReset"; "configChange": "configChange"; "formReady": "formReady"; "valueChange": "valueChange"; "syncCompleted": "syncCompleted"; "initializationError": "initializationError"; "loadingStateChange": "loadingStateChange"; "enableCustomizationChange": "enableCustomizationChange"; "customAction": "customAction"; "actionConfirmation": "actionConfirmation"; "schemaStatusChange": "schemaStatusChange"; "fieldRenderError": "fieldRenderError"; "widgetEvent": "widgetEvent"; }, never, never, true, never>;
965
1008
  }
966
1009
 
967
1010
  declare class FormConfigService {
@@ -1052,6 +1095,8 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1052
1095
  private initialConfig;
1053
1096
  private initialDocument;
1054
1097
  private readonly openedWithCanonicalDocument;
1098
+ readonly runtimeContext?: DynamicFormRuntimeContext;
1099
+ readonly runtimeContract?: DynamicFormResolvedRuntimeContract;
1055
1100
  backConfig?: BackConfig;
1056
1101
  private includeBackConfigBlock;
1057
1102
  formId?: string;
@@ -1113,6 +1158,8 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1113
1158
  isPresentationBlockPersisted(): boolean;
1114
1159
  isSchemaPrefsBlockPersisted(): boolean;
1115
1160
  isBackConfigBlockPersisted(): boolean;
1161
+ hasResolvedRuntimeContract(): boolean;
1162
+ describeRuntimeSource(source?: DynamicFormRuntimeValueSource): string;
1116
1163
  onInputModeChange(): void;
1117
1164
  onPresentationPrefsChange(reason: string): void;
1118
1165
  onSchemaPrefsChange(reason: string): void;
@@ -1129,6 +1176,7 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
1129
1176
  private loadPrefsFromStorage;
1130
1177
  private normalizeMode;
1131
1178
  private buildAuthoringDocument;
1179
+ private normalizeResolvedRuntimeContract;
1132
1180
  private createBackConfigState;
1133
1181
  private mergePresentationPrefs;
1134
1182
  private mergeSchemaPrefs;
@@ -1169,6 +1217,8 @@ declare class PraxisFilterForm implements OnChanges, OnDestroy {
1169
1217
  ngOnChanges(changes: SimpleChanges): void;
1170
1218
  ngOnDestroy(): void;
1171
1219
  private buildForm;
1220
+ private buildRestorableValues;
1221
+ private hasExplicitDefaultValue;
1172
1222
  onFormSubmit(): void;
1173
1223
  getColumnFields(column: FormColumn): FieldMetadata[];
1174
1224
  get fieldMetadata(): FieldMetadata[];
@@ -1859,4 +1909,4 @@ declare const FORM_COMPONENT_AI_CAPABILITIES: CapabilityCatalog;
1859
1909
  declare function getFormAiCatalog(formConfig?: FormConfig): AiCapabilityCatalog;
1860
1910
 
1861
1911
  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, PRAXIS_FILTER_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, providePraxisFilterFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput };
1862
- 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 };
1912
+ 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, DynamicFormResolvedRuntimeContract, DynamicFormRuntimeContext, DynamicFormRuntimeValueSource, 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": "3.0.0-beta.9",
3
+ "version": "4.0.0-beta.0",
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": "^3.0.0-beta.9",
10
- "@praxisui/visual-builder": "^3.0.0-beta.9",
11
- "@praxisui/specification-core": "^3.0.0-beta.9",
12
- "@praxisui/specification": "^3.0.0-beta.9",
13
- "@praxisui/core": "^3.0.0-beta.9",
14
- "@praxisui/cron-builder": "^3.0.0-beta.9"
9
+ "@praxisui/settings-panel": "^4.0.0-beta.0",
10
+ "@praxisui/visual-builder": "^4.0.0-beta.0",
11
+ "@praxisui/specification-core": "^4.0.0-beta.0",
12
+ "@praxisui/specification": "^4.0.0-beta.0",
13
+ "@praxisui/core": "^4.0.0-beta.0",
14
+ "@praxisui/cron-builder": "^4.0.0-beta.0"
15
15
  },
16
16
  "dependencies": {
17
17
  "tslib": "^2.3.0",