@praxisui/dynamic-form 8.0.0-beta.0 → 8.0.0-beta.2
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 +581 -97
- package/index.d.ts +56 -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)
|
|
@@ -586,6 +621,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
586
621
|
get effectiveReadonly(): boolean;
|
|
587
622
|
get effectiveDisabledMode(): boolean | null;
|
|
588
623
|
get effectiveFormIsValid(): boolean;
|
|
624
|
+
get invalidRequiredFieldLabels(): string[];
|
|
589
625
|
/** Value propagated to DynamicFieldLoader; null allows per-field metadata */
|
|
590
626
|
get presentationForLoader(): boolean | null;
|
|
591
627
|
/** Custom endpoints for CRUD operations */
|
|
@@ -649,6 +685,12 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
649
685
|
private lastCorrelationId?;
|
|
650
686
|
private currentDnD?;
|
|
651
687
|
private columnFieldsCache;
|
|
688
|
+
private rowClassesCache;
|
|
689
|
+
private rowStylesCache;
|
|
690
|
+
private sectionClassesCache;
|
|
691
|
+
private sectionStylesCache;
|
|
692
|
+
private columnClassesCache;
|
|
693
|
+
private columnStylesCache;
|
|
652
694
|
private lastFieldPatchSig;
|
|
653
695
|
private lastFieldPatchAt;
|
|
654
696
|
schemaOutdated: boolean;
|
|
@@ -664,6 +706,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
664
706
|
get formBlocksAfterDocument(): RichContentDocument;
|
|
665
707
|
get beforeActionsPlacement(): 'insideLastSection' | 'afterSections';
|
|
666
708
|
get actionPlacement(): 'insideLastSection' | 'afterSections' | 'top';
|
|
709
|
+
get effectiveActions(): FormConfig['actions'];
|
|
667
710
|
/**
|
|
668
711
|
* Precedence for editorial rich-content interpolation:
|
|
669
712
|
* 1. form runtime context
|
|
@@ -740,6 +783,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
740
783
|
private formInputsKey;
|
|
741
784
|
private crudBackKey;
|
|
742
785
|
private tryInitializeForm;
|
|
786
|
+
private hasExplicitSchemaUrl;
|
|
787
|
+
private hasSchemaBackedRuntime;
|
|
743
788
|
private hasRenderableConfig;
|
|
744
789
|
private initializeStandaloneConfig;
|
|
745
790
|
private reloadForModeChange;
|
|
@@ -748,9 +793,13 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
748
793
|
private blurAllInputs;
|
|
749
794
|
private initializeForm;
|
|
750
795
|
private handleInitializationError;
|
|
796
|
+
private loadConfigFailOpen;
|
|
797
|
+
private resolveFieldLabel;
|
|
751
798
|
private getErrorMessage;
|
|
752
799
|
private persistFormConfig;
|
|
753
800
|
private createDefaultConfig;
|
|
801
|
+
private createConfigFromHostConfig;
|
|
802
|
+
private reconcileLoadedConfigWithServerSchema;
|
|
754
803
|
private syncWithServer;
|
|
755
804
|
private loadEntity;
|
|
756
805
|
private buildFormFromConfig;
|
|
@@ -758,6 +807,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
758
807
|
private scheduleValueChangeBootstrapRelease;
|
|
759
808
|
private hasInteractiveFormState;
|
|
760
809
|
private captureFormRuntimeState;
|
|
810
|
+
private getDirtyFieldNames;
|
|
761
811
|
private buildCurrentFormRuntimeContext;
|
|
762
812
|
private buildRestoreTargetContext;
|
|
763
813
|
private isCompatibleRuntimeStateContext;
|
|
@@ -833,6 +883,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
833
883
|
hasEditorialVisualContext(): boolean;
|
|
834
884
|
private applyBorderPropsToStyle;
|
|
835
885
|
private resolveRuleVisibility;
|
|
886
|
+
private resolveFieldVisibility;
|
|
887
|
+
private isFieldMetadataHidden;
|
|
836
888
|
toggleSectionCollapse(event: Event, section: FormSection): void;
|
|
837
889
|
sectionPanelId(section: FormSection, index: number): string;
|
|
838
890
|
getSectionCollapsedSummary(section: FormSection): string;
|
|
@@ -840,6 +892,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
840
892
|
fields: string[];
|
|
841
893
|
id?: string;
|
|
842
894
|
}): FieldMetadata[];
|
|
895
|
+
private getColumnFieldsSignature;
|
|
843
896
|
private getColumnRuleProps;
|
|
844
897
|
private buildFieldRuleMetadataOverrides;
|
|
845
898
|
private normalizeRuleFieldOptions;
|
|
@@ -1010,12 +1063,13 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
1010
1063
|
private getSchemaWithCache;
|
|
1011
1064
|
private isReactiveValidationEnabled;
|
|
1012
1065
|
private getReactiveValidationDebounceMs;
|
|
1066
|
+
private waitForGlobalConfigReadyForSchema;
|
|
1013
1067
|
private setupReactiveValidation;
|
|
1014
1068
|
private logRowGapsSnapshot;
|
|
1015
1069
|
private applyPresentationVars;
|
|
1016
1070
|
private applyPresentationConfig;
|
|
1017
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; }]>;
|
|
1018
|
-
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>;
|
|
1019
1073
|
}
|
|
1020
1074
|
|
|
1021
1075
|
declare class FormConfigService {
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/dynamic-form",
|
|
3
|
-
"version": "8.0.0-beta.
|
|
3
|
+
"version": "8.0.0-beta.2",
|
|
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.
|
|
10
|
-
"@praxisui/settings-panel": "^8.0.0-beta.
|
|
11
|
-
"@praxisui/visual-builder": "^8.0.0-beta.
|
|
12
|
-
"@praxisui/core": "^8.0.0-beta.
|
|
13
|
-
"@praxisui/cron-builder": "^8.0.0-beta.
|
|
9
|
+
"@praxisui/rich-content": "^8.0.0-beta.2",
|
|
10
|
+
"@praxisui/settings-panel": "^8.0.0-beta.2",
|
|
11
|
+
"@praxisui/visual-builder": "^8.0.0-beta.2",
|
|
12
|
+
"@praxisui/core": "^8.0.0-beta.2",
|
|
13
|
+
"@praxisui/cron-builder": "^8.0.0-beta.2"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"tslib": "^2.3.0",
|