@praxisui/dynamic-form 7.0.0-beta.0 → 8.0.0-beta.1
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 +74 -4
- package/fesm2022/praxisui-dynamic-form.mjs +618 -99
- package/index.d.ts +60 -2
- package/package.json +6 -6
package/index.d.ts
CHANGED
|
@@ -280,6 +280,28 @@ interface PraxisFormActionEvent {
|
|
|
280
280
|
}
|
|
281
281
|
declare class PraxisFormActionsComponent implements OnChanges, OnDestroy {
|
|
282
282
|
private shortcuts;
|
|
283
|
+
private readonly i18n;
|
|
284
|
+
private actionButtonsCache;
|
|
285
|
+
private actionButtonsCacheSource?;
|
|
286
|
+
private actionButtonsCacheOverrides?;
|
|
287
|
+
private formActionsClassesCacheSource?;
|
|
288
|
+
private formActionsClassesCache;
|
|
289
|
+
private viewClassMapCacheSource?;
|
|
290
|
+
private viewClassMapCacheEditorialContext?;
|
|
291
|
+
private viewClassMapCache;
|
|
292
|
+
private visibleButtonsCacheSource;
|
|
293
|
+
private visibleButtonsCache;
|
|
294
|
+
private collapsedButtonsCacheSource;
|
|
295
|
+
private collapsedButtonsCache;
|
|
296
|
+
private primaryButtonsCacheSource;
|
|
297
|
+
private primaryButtonsCache;
|
|
298
|
+
private secondaryButtonsCacheSource;
|
|
299
|
+
private secondaryButtonsCache;
|
|
300
|
+
private buttonClassCache;
|
|
301
|
+
private buttonStylesCache;
|
|
302
|
+
private invalidSubmitHintCacheSignature;
|
|
303
|
+
private invalidSubmitHintCacheValue;
|
|
304
|
+
private readonly invalidSubmitHint;
|
|
283
305
|
/** Configuration object describing form action buttons */
|
|
284
306
|
actions?: FormConfig['actions'];
|
|
285
307
|
/** Whether the actions are rendered inside an editorial visual context */
|
|
@@ -290,6 +312,8 @@ declare class PraxisFormActionsComponent implements OnChanges, OnDestroy {
|
|
|
290
312
|
formIsValid: boolean;
|
|
291
313
|
/** Optional error message displayed above the actions */
|
|
292
314
|
submitError?: string | null;
|
|
315
|
+
/** Visible required fields that currently block submit */
|
|
316
|
+
invalidRequiredFieldLabels: string[];
|
|
293
317
|
/** Identifier used when registering keyboard shortcuts */
|
|
294
318
|
formId?: string;
|
|
295
319
|
/** Overrides coming from runtime rules */
|
|
@@ -308,6 +332,8 @@ declare class PraxisFormActionsComponent implements OnChanges, OnDestroy {
|
|
|
308
332
|
};
|
|
309
333
|
getMatColor(btn: FormActionButton | undefined): 'primary' | 'accent' | 'warn' | undefined;
|
|
310
334
|
getActionButtons(): FormActionButton[];
|
|
335
|
+
private computeActionButtons;
|
|
336
|
+
private refreshActionButtons;
|
|
311
337
|
getVisibleButtons(): FormActionButton[];
|
|
312
338
|
getCollapsedButtons(): FormActionButton[];
|
|
313
339
|
isSplitLayout(): boolean;
|
|
@@ -319,11 +345,13 @@ declare class PraxisFormActionsComponent implements OnChanges, OnDestroy {
|
|
|
319
345
|
};
|
|
320
346
|
getButtonStyles(button: FormActionButton): Record<string, any> | null;
|
|
321
347
|
isActionButtonDisabled(button: FormActionButton): boolean;
|
|
348
|
+
shouldShowInvalidSubmitHint(): boolean;
|
|
349
|
+
getInvalidSubmitHint(): string;
|
|
322
350
|
private applyOverrides;
|
|
323
351
|
private registerActionShortcuts;
|
|
324
352
|
private isSecondaryButton;
|
|
325
353
|
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFormActionsComponent, never>;
|
|
326
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFormActionsComponent, "praxis-form-actions", never, { "actions": { "alias": "actions"; "required": false; }; "editorialVisualContext": { "alias": "editorialVisualContext"; "required": false; }; "isSubmitting": { "alias": "isSubmitting"; "required": false; }; "formIsValid": { "alias": "formIsValid"; "required": false; }; "submitError": { "alias": "submitError"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "actionOverrides": { "alias": "actionOverrides"; "required": false; }; }, { "action": "action"; }, never, never, true, never>;
|
|
354
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFormActionsComponent, "praxis-form-actions", never, { "actions": { "alias": "actions"; "required": false; }; "editorialVisualContext": { "alias": "editorialVisualContext"; "required": false; }; "isSubmitting": { "alias": "isSubmitting"; "required": false; }; "formIsValid": { "alias": "formIsValid"; "required": false; }; "submitError": { "alias": "submitError"; "required": false; }; "invalidRequiredFieldLabels": { "alias": "invalidRequiredFieldLabels"; "required": false; }; "formId": { "alias": "formId"; "required": false; }; "actionOverrides": { "alias": "actionOverrides"; "required": false; }; }, { "action": "action"; }, never, never, true, never>;
|
|
327
355
|
}
|
|
328
356
|
|
|
329
357
|
/**
|
|
@@ -510,6 +538,11 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
510
538
|
private logger?;
|
|
511
539
|
private readonly i18n;
|
|
512
540
|
private readonly DEBUG;
|
|
541
|
+
private effectiveActionsCache?;
|
|
542
|
+
private effectiveActionsCacheBase?;
|
|
543
|
+
private effectiveActionsCacheOverride?;
|
|
544
|
+
private invalidRequiredFieldLabelsCache;
|
|
545
|
+
private invalidRequiredFieldLabelsSignature;
|
|
513
546
|
resourcePath?: string;
|
|
514
547
|
resourceId?: string | number;
|
|
515
548
|
initialValue?: Record<string, unknown> | null;
|
|
@@ -521,6 +554,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
521
554
|
editorialContext: Record<string, unknown> | null;
|
|
522
555
|
mode: 'create' | 'edit' | 'view';
|
|
523
556
|
config: FormConfig;
|
|
557
|
+
/** Optional host-level overrides for the rendered form action bar. */
|
|
558
|
+
actions?: FormConfig['actions'] | null;
|
|
524
559
|
/**
|
|
525
560
|
* Fonte de schema para construir o formulário.
|
|
526
561
|
* 'resource' (padrão) usa o schema do recurso (/{resource}/schemas -> .../all response)
|
|
@@ -584,6 +619,9 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
584
619
|
visibleGlobal: boolean | null;
|
|
585
620
|
get effectivePresentation(): boolean;
|
|
586
621
|
get effectiveReadonly(): boolean;
|
|
622
|
+
get effectiveDisabledMode(): boolean | null;
|
|
623
|
+
get effectiveFormIsValid(): boolean;
|
|
624
|
+
get invalidRequiredFieldLabels(): string[];
|
|
587
625
|
/** Value propagated to DynamicFieldLoader; null allows per-field metadata */
|
|
588
626
|
get presentationForLoader(): boolean | null;
|
|
589
627
|
/** Custom endpoints for CRUD operations */
|
|
@@ -633,6 +671,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
633
671
|
private loadedEntityId;
|
|
634
672
|
private hydratedEntityId;
|
|
635
673
|
private loadedEntityData;
|
|
674
|
+
private entityHydrationPending;
|
|
636
675
|
private schemaCache;
|
|
637
676
|
private lastSchemaMeta?;
|
|
638
677
|
private schemaRootHooks?;
|
|
@@ -640,11 +679,18 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
640
679
|
private formValueChangesSubscription;
|
|
641
680
|
private formBuildCycleId;
|
|
642
681
|
private suppressedValueChangeBuildId;
|
|
682
|
+
private pendingBootstrapValueChangeBuildId;
|
|
643
683
|
private readonly sectionHeaderBlobUrlCache;
|
|
644
684
|
private readonly sectionHeaderObjectUrls;
|
|
645
685
|
private lastCorrelationId?;
|
|
646
686
|
private currentDnD?;
|
|
647
687
|
private columnFieldsCache;
|
|
688
|
+
private rowClassesCache;
|
|
689
|
+
private rowStylesCache;
|
|
690
|
+
private sectionClassesCache;
|
|
691
|
+
private sectionStylesCache;
|
|
692
|
+
private columnClassesCache;
|
|
693
|
+
private columnStylesCache;
|
|
648
694
|
private lastFieldPatchSig;
|
|
649
695
|
private lastFieldPatchAt;
|
|
650
696
|
schemaOutdated: boolean;
|
|
@@ -660,6 +706,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
660
706
|
get formBlocksAfterDocument(): RichContentDocument;
|
|
661
707
|
get beforeActionsPlacement(): 'insideLastSection' | 'afterSections';
|
|
662
708
|
get actionPlacement(): 'insideLastSection' | 'afterSections' | 'top';
|
|
709
|
+
get effectiveActions(): FormConfig['actions'];
|
|
663
710
|
/**
|
|
664
711
|
* Precedence for editorial rich-content interpolation:
|
|
665
712
|
* 1. form runtime context
|
|
@@ -736,6 +783,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
736
783
|
private formInputsKey;
|
|
737
784
|
private crudBackKey;
|
|
738
785
|
private tryInitializeForm;
|
|
786
|
+
private hasExplicitSchemaUrl;
|
|
787
|
+
private hasSchemaBackedRuntime;
|
|
739
788
|
private hasRenderableConfig;
|
|
740
789
|
private initializeStandaloneConfig;
|
|
741
790
|
private reloadForModeChange;
|
|
@@ -744,9 +793,13 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
744
793
|
private blurAllInputs;
|
|
745
794
|
private initializeForm;
|
|
746
795
|
private handleInitializationError;
|
|
796
|
+
private loadConfigFailOpen;
|
|
797
|
+
private resolveFieldLabel;
|
|
747
798
|
private getErrorMessage;
|
|
748
799
|
private persistFormConfig;
|
|
749
800
|
private createDefaultConfig;
|
|
801
|
+
private createConfigFromHostConfig;
|
|
802
|
+
private reconcileLoadedConfigWithServerSchema;
|
|
750
803
|
private syncWithServer;
|
|
751
804
|
private loadEntity;
|
|
752
805
|
private buildFormFromConfig;
|
|
@@ -754,6 +807,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
754
807
|
private scheduleValueChangeBootstrapRelease;
|
|
755
808
|
private hasInteractiveFormState;
|
|
756
809
|
private captureFormRuntimeState;
|
|
810
|
+
private getDirtyFieldNames;
|
|
757
811
|
private buildCurrentFormRuntimeContext;
|
|
758
812
|
private buildRestoreTargetContext;
|
|
759
813
|
private isCompatibleRuntimeStateContext;
|
|
@@ -829,6 +883,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
829
883
|
hasEditorialVisualContext(): boolean;
|
|
830
884
|
private applyBorderPropsToStyle;
|
|
831
885
|
private resolveRuleVisibility;
|
|
886
|
+
private resolveFieldVisibility;
|
|
887
|
+
private isFieldMetadataHidden;
|
|
832
888
|
toggleSectionCollapse(event: Event, section: FormSection): void;
|
|
833
889
|
sectionPanelId(section: FormSection, index: number): string;
|
|
834
890
|
getSectionCollapsedSummary(section: FormSection): string;
|
|
@@ -836,6 +892,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
836
892
|
fields: string[];
|
|
837
893
|
id?: string;
|
|
838
894
|
}): FieldMetadata[];
|
|
895
|
+
private getColumnFieldsSignature;
|
|
839
896
|
private getColumnRuleProps;
|
|
840
897
|
private buildFieldRuleMetadataOverrides;
|
|
841
898
|
private normalizeRuleFieldOptions;
|
|
@@ -1006,12 +1063,13 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
1006
1063
|
private getSchemaWithCache;
|
|
1007
1064
|
private isReactiveValidationEnabled;
|
|
1008
1065
|
private getReactiveValidationDebounceMs;
|
|
1066
|
+
private waitForGlobalConfigReadyForSchema;
|
|
1009
1067
|
private setupReactiveValidation;
|
|
1010
1068
|
private logRowGapsSnapshot;
|
|
1011
1069
|
private applyPresentationVars;
|
|
1012
1070
|
private applyPresentationConfig;
|
|
1013
1071
|
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; }]>;
|
|
1014
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicForm, "praxis-dynamic-form", never, { "resourcePath": { "alias": "resourcePath"; "required": false; }; "resourceId": { "alias": "resourceId"; "required": false; }; "initialValue": { "alias": "initialValue"; "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"; }, never, never, true, never>;
|
|
1072
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicForm, "praxis-dynamic-form", never, { "resourcePath": { "alias": "resourcePath"; "required": false; }; "resourceId": { "alias": "resourceId"; "required": false; }; "initialValue": { "alias": "initialValue"; "required": false; }; "editorialContext": { "alias": "editorialContext"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "config": { "alias": "config"; "required": false; }; "actions": { "alias": "actions"; "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"; }, never, never, true, never>;
|
|
1015
1073
|
}
|
|
1016
1074
|
|
|
1017
1075
|
declare class FormConfigService {
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/dynamic-form",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.0-beta.1",
|
|
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": "^
|
|
10
|
-
"@praxisui/settings-panel": "^
|
|
11
|
-
"@praxisui/visual-builder": "^
|
|
12
|
-
"@praxisui/core": "^
|
|
13
|
-
"@praxisui/cron-builder": "^
|
|
9
|
+
"@praxisui/rich-content": "^8.0.0-beta.1",
|
|
10
|
+
"@praxisui/settings-panel": "^8.0.0-beta.1",
|
|
11
|
+
"@praxisui/visual-builder": "^8.0.0-beta.1",
|
|
12
|
+
"@praxisui/core": "^8.0.0-beta.1",
|
|
13
|
+
"@praxisui/cron-builder": "^8.0.0-beta.1"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"tslib": "^2.3.0",
|