@praxisui/dynamic-form 8.0.0-beta.8 → 8.0.0-beta.81
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 +172 -18
- package/docs/dynamic-form-authoring-document-semantics.md +80 -0
- package/docs/dynamic-form-llm-rule-authoring-guide.md +318 -0
- package/docs/dynamic-form-rules-authoring-plan.md +379 -0
- package/docs/hot-metadata-updates.md +141 -0
- package/docs/layout-items-visual-blocks.md +406 -0
- package/fesm2022/praxisui-dynamic-form-dynamic-form-agentic-authoring-turn-flow-CmFfx-VR.mjs +356 -0
- package/fesm2022/praxisui-dynamic-form.mjs +23734 -16254
- package/package.json +19 -12
- package/src/lib/components/praxis-form-actions/praxis-form-actions.json-api.md +441 -0
- package/src/lib/config-editor/praxis-dynamic-form-config-editor.json-api.md +481 -0
- package/src/lib/filter-form/praxis-filter-form.json-api.md +507 -0
- package/src/lib/json-config-editor/form-json-config-editor.json-api.md +491 -0
- package/src/lib/layout-editor/praxis-layout-editor.json-api.md +432 -0
- package/src/lib/praxis-dynamic-form.json-api.md +1014 -0
- package/{index.d.ts → types/praxisui-dynamic-form.d.ts} +673 -22
|
@@ -7,12 +7,12 @@ import { MatDialog } from '@angular/material/dialog';
|
|
|
7
7
|
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
8
8
|
import { CdkDragStart, CdkDragMove, CdkDragEnd, CdkDragDrop } from '@angular/cdk/drag-drop';
|
|
9
9
|
import * as _praxisui_core from '@praxisui/core';
|
|
10
|
-
import { AsyncConfigStorage, FormLayout, FieldMetadata, FormLayoutRule, FormRuleTargetType as FormRuleTargetType$1, PraxisJsonLogicService, FormSection, FormRow, FormColumn, FormConfig, FormActionButton, AiCapability, BackConfig, ApiEndpoint, ApiUrlEntry, FormHooksLayout, EndpointConfig, FormSubmitEvent, FormReadyEvent, FormValueChangeEvent, SyncResult, FormInitializationError, LoadingState, FormCustomActionEvent, FormActionConfirmationEvent, RichContentDocument, JsonLogicRecord, GenericCrudService, ConnectionStorage, DynamicFormService, ErrorMessageService, SchemaNormalizerService, ComponentMetadataRegistry, GlobalConfigService, ComponentKeyService, LoadingOrchestrator, ApiUrlConfig, PraxisLoadingRenderer, FormHooksRegistry, FormHookPreset, LoggerService, FormSectionHeaderAction, FormSectionHeaderConfig, FormConfigState, FieldDefinition, ComponentDocMeta, Breakpoint, IconPickerService, SurfaceOpenPayload, AiCapabilityCategory, AiValueKind,
|
|
10
|
+
import { AsyncConfigStorage, FormLayout, FieldMetadata, FormLayoutRule, FormRuleTargetType as FormRuleTargetType$1, PraxisJsonLogicService, FormSection, FormRow, FormColumn, FormConfig, FormLayoutItem, FormActionButton, AiCapability, BackConfig, RichBlockHostCapabilities, ApiEndpoint, ApiUrlEntry, FormHooksLayout, EndpointConfig, FormSubmitEvent, FormReadyEvent, FormValueChangeEvent, SyncResult, FormInitializationError, LoadingState, FormCustomActionEvent, FormActionConfirmationEvent, RichContentDocument, JsonLogicRecord, GenericCrudService, ConnectionStorage, DynamicFormService, ErrorMessageService, SchemaNormalizerService, ComponentMetadataRegistry, GlobalConfigService, ComponentKeyService, LoadingOrchestrator, ApiUrlConfig, PraxisLoadingRenderer, FormHooksRegistry, FormHookPreset, LoggerService, FormSectionHeaderAction, FormSectionHeaderConfig, FormConfigState, JsonLogicExpression, GlobalActionCatalogEntry, PraxisRuntimeConditionalEffectRule, PraxisRuntimeGlobalActionEffect, GlobalActionField, FieldDefinition, ComponentDocMeta, Breakpoint, DomainRuleRequestOptions, DomainRuleService, DomainRuleMaterialization, IconPickerService, GlobalActionRef, SurfaceOpenPayload, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, ComponentAuthoringManifest } from '@praxisui/core';
|
|
11
11
|
import * as rxjs from 'rxjs';
|
|
12
12
|
import { Observable, BehaviorSubject } from 'rxjs';
|
|
13
13
|
import { SettingsPanelService, SettingsValueProvider } from '@praxisui/settings-panel';
|
|
14
|
+
import { BaseAiAdapter, AiResponseCompileResult, PatchResult, PraxisAssistantShellLayout, PraxisAssistantTurnViewState, PraxisAssistantShellLabels, PraxisAssistantSessionSnapshot, PraxisAssistantShellQuickReply, PraxisAssistantShellMessage } from '@praxisui/ai';
|
|
14
15
|
import { KeyboardShortcutService } from '@praxisui/dynamic-fields';
|
|
15
|
-
import { BaseAiAdapter, PatchResult } from '@praxisui/ai';
|
|
16
16
|
import { RuleBuilderConfig, RuleBuilderState } from '@praxisui/visual-builder';
|
|
17
17
|
|
|
18
18
|
declare class FormLayoutService {
|
|
@@ -44,6 +44,15 @@ declare class FormContextService {
|
|
|
44
44
|
static ɵprov: i0.ɵɵInjectableDeclaration<FormContextService>;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
type RuleApplicationDiagnosticCode = 'missing-targets' | 'missing-effect' | 'unsupported-target-type' | 'field-target-not-found' | 'target-not-found' | 'invalid-condition' | 'invalid-value-expression' | 'computed-value-iteration-limit' | 'unsupported-property' | 'rule-evaluation-error';
|
|
48
|
+
interface RuleApplicationDiagnostic {
|
|
49
|
+
ruleId?: string;
|
|
50
|
+
ruleName?: string;
|
|
51
|
+
code: RuleApplicationDiagnosticCode;
|
|
52
|
+
targetType?: FormLayoutRule['targetType'];
|
|
53
|
+
targetId?: string;
|
|
54
|
+
details?: string[];
|
|
55
|
+
}
|
|
47
56
|
/**
|
|
48
57
|
* Structured properties resulting from rule evaluation.
|
|
49
58
|
*/
|
|
@@ -53,6 +62,15 @@ interface RuleApplicationResult {
|
|
|
53
62
|
actionProps: Record<string, Record<string, any>>;
|
|
54
63
|
rowProps: Record<string, Record<string, any>>;
|
|
55
64
|
columnProps: Record<string, Record<string, any>>;
|
|
65
|
+
visualBlockProps: Record<string, Record<string, any>>;
|
|
66
|
+
fieldValues: Record<string, any>;
|
|
67
|
+
formData: Record<string, any>;
|
|
68
|
+
diagnostics: RuleApplicationDiagnostic[];
|
|
69
|
+
}
|
|
70
|
+
type RuleApplicationTargetType = NonNullable<FormLayoutRule['targetType']>;
|
|
71
|
+
type RuleApplicationTargetIndex = Partial<Record<RuleApplicationTargetType, ReadonlySet<string>>>;
|
|
72
|
+
interface RuleApplicationContext {
|
|
73
|
+
targetIndex?: RuleApplicationTargetIndex;
|
|
56
74
|
}
|
|
57
75
|
declare class FormRulesService {
|
|
58
76
|
private readonly jsonLogic;
|
|
@@ -64,8 +82,15 @@ declare class FormRulesService {
|
|
|
64
82
|
* @param formRules The array of rules to process.
|
|
65
83
|
* @returns A RuleEvaluationResult object containing the visibility and required states for the fields.
|
|
66
84
|
*/
|
|
67
|
-
applyRules(formGroup: FormGroup, formRules: FormLayoutRule[]): RuleApplicationResult;
|
|
85
|
+
applyRules(formGroup: FormGroup, formRules: FormLayoutRule[], context?: RuleApplicationContext): RuleApplicationResult;
|
|
86
|
+
private ruleTargetExists;
|
|
87
|
+
private normalizeRuleTargetId;
|
|
68
88
|
private evaluateCondition;
|
|
89
|
+
private evaluateRuleValue;
|
|
90
|
+
private evaluateJsonLogicValue;
|
|
91
|
+
private resolveComputedRuleFormData;
|
|
92
|
+
private areRuleValuesEqual;
|
|
93
|
+
private addUnsupportedPropertyDiagnostics;
|
|
69
94
|
private setPath;
|
|
70
95
|
private deletePath;
|
|
71
96
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormRulesService, never>;
|
|
@@ -96,6 +121,7 @@ interface Operation {
|
|
|
96
121
|
sectionId?: string;
|
|
97
122
|
rowId?: string;
|
|
98
123
|
columnId?: string;
|
|
124
|
+
itemId?: string;
|
|
99
125
|
fieldName?: string;
|
|
100
126
|
sectionIndex?: number;
|
|
101
127
|
rowIndex?: number;
|
|
@@ -106,6 +132,7 @@ interface Operation {
|
|
|
106
132
|
sectionId?: string;
|
|
107
133
|
rowId?: string;
|
|
108
134
|
columnId?: string;
|
|
135
|
+
itemId?: string;
|
|
109
136
|
fieldName?: string;
|
|
110
137
|
sectionIndex?: number;
|
|
111
138
|
rowIndex?: number;
|
|
@@ -156,6 +183,23 @@ interface ValidationReport {
|
|
|
156
183
|
valid: boolean;
|
|
157
184
|
errors: string[];
|
|
158
185
|
}
|
|
186
|
+
type LocalFieldInsertionDiagnosticCode = 'missing-field-name' | 'missing-control-type' | 'field-name-already-exists' | 'schema-field-name-collision' | 'invalid-local-field-source';
|
|
187
|
+
interface LocalFieldInsertionDiagnostic {
|
|
188
|
+
code: LocalFieldInsertionDiagnosticCode;
|
|
189
|
+
severity: 'error' | 'warning';
|
|
190
|
+
message: string;
|
|
191
|
+
fieldName?: string;
|
|
192
|
+
}
|
|
193
|
+
interface InsertLocalFieldOptions {
|
|
194
|
+
atIndex?: number;
|
|
195
|
+
schemaFieldNames?: Iterable<string>;
|
|
196
|
+
correlationId?: string;
|
|
197
|
+
origin?: string;
|
|
198
|
+
}
|
|
199
|
+
interface InsertLocalFieldResult extends LayoutResult {
|
|
200
|
+
applied: boolean;
|
|
201
|
+
diagnostics: LocalFieldInsertionDiagnostic[];
|
|
202
|
+
}
|
|
159
203
|
declare class DynamicFormLayoutService {
|
|
160
204
|
private readonly changesSubject;
|
|
161
205
|
readonly changes$: rxjs.Observable<LayoutChange>;
|
|
@@ -178,6 +222,14 @@ declare class DynamicFormLayoutService {
|
|
|
178
222
|
private capitalizeFirstLetter;
|
|
179
223
|
private assertIndex;
|
|
180
224
|
private mutate;
|
|
225
|
+
private getFieldName;
|
|
226
|
+
private findFieldLayoutItemIndex;
|
|
227
|
+
private getLayoutInsertIndexForFieldIndex;
|
|
228
|
+
private applyLayoutItemsToColumn;
|
|
229
|
+
private insertFieldLayoutItem;
|
|
230
|
+
private removeFieldLayoutItem;
|
|
231
|
+
private hasLayoutItems;
|
|
232
|
+
private moveFieldLayoutItem;
|
|
181
233
|
moveSection(config: FormConfig, fromIndex: number, toIndex: number): LayoutResult;
|
|
182
234
|
insertSection(config: FormConfig, section: any, atIndex?: number): LayoutResult;
|
|
183
235
|
removeSection(config: FormConfig, index: number, _policy?: RemovePolicy): LayoutResult;
|
|
@@ -235,6 +287,44 @@ declare class DynamicFormLayoutService {
|
|
|
235
287
|
rowId: string;
|
|
236
288
|
columnId: string;
|
|
237
289
|
}, field: any, atIndex?: number): LayoutResult;
|
|
290
|
+
insertLocalFieldById(config: FormConfig, target: {
|
|
291
|
+
sectionId: string;
|
|
292
|
+
rowId: string;
|
|
293
|
+
columnId: string;
|
|
294
|
+
}, field: FieldMetadata, options?: InsertLocalFieldOptions): InsertLocalFieldResult;
|
|
295
|
+
insertLayoutItemById(config: FormConfig, target: {
|
|
296
|
+
sectionId: string;
|
|
297
|
+
rowId: string;
|
|
298
|
+
columnId: string;
|
|
299
|
+
}, item: FormLayoutItem, atIndex?: number): LayoutResult;
|
|
300
|
+
private prepareLocalFieldMetadata;
|
|
301
|
+
private validateLocalFieldInsertion;
|
|
302
|
+
moveLayoutItemById(config: FormConfig, from: {
|
|
303
|
+
sectionId: string;
|
|
304
|
+
rowId: string;
|
|
305
|
+
columnId: string;
|
|
306
|
+
itemId: string;
|
|
307
|
+
}, to: {
|
|
308
|
+
sectionId: string;
|
|
309
|
+
rowId: string;
|
|
310
|
+
columnId: string;
|
|
311
|
+
toIndex: number;
|
|
312
|
+
}, options?: {
|
|
313
|
+
policy?: RemovePolicy;
|
|
314
|
+
correlationId?: string;
|
|
315
|
+
origin?: string;
|
|
316
|
+
}): LayoutResult;
|
|
317
|
+
updateLayoutItemById(config: FormConfig, target: {
|
|
318
|
+
sectionId: string;
|
|
319
|
+
rowId: string;
|
|
320
|
+
columnId: string;
|
|
321
|
+
itemId: string;
|
|
322
|
+
}, item: FormLayoutItem): LayoutResult;
|
|
323
|
+
removeLayoutItemById(config: FormConfig, sectionId: string, rowId: string, columnId: string, itemId: string, options?: {
|
|
324
|
+
policy?: RemovePolicy;
|
|
325
|
+
correlationId?: string;
|
|
326
|
+
origin?: string;
|
|
327
|
+
}): LayoutResult;
|
|
238
328
|
removeFieldById(config: FormConfig, sectionId: string, rowId: string, columnId: string, fieldName: string, options?: {
|
|
239
329
|
policy?: RemovePolicy;
|
|
240
330
|
correlationId?: string;
|
|
@@ -349,6 +439,7 @@ declare class PraxisFormActionsComponent implements OnChanges, OnDestroy {
|
|
|
349
439
|
getInvalidSubmitHint(): string;
|
|
350
440
|
private applyOverrides;
|
|
351
441
|
private registerActionShortcuts;
|
|
442
|
+
private resolveButtonActionId;
|
|
352
443
|
private isSecondaryButton;
|
|
353
444
|
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFormActionsComponent, never>;
|
|
354
445
|
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>;
|
|
@@ -361,6 +452,10 @@ declare class PraxisFormActionsComponent implements OnChanges, OnDestroy {
|
|
|
361
452
|
interface FormAiHost {
|
|
362
453
|
config: FormConfig;
|
|
363
454
|
form: FormGroup;
|
|
455
|
+
mode?: 'create' | 'edit' | 'view';
|
|
456
|
+
enableCustomization?: boolean;
|
|
457
|
+
readonlyModeGlobal?: boolean | null;
|
|
458
|
+
effectiveReadonly?: boolean;
|
|
364
459
|
applyConfigFromAdapter(config: FormConfig): void;
|
|
365
460
|
}
|
|
366
461
|
|
|
@@ -374,13 +469,36 @@ declare class FormAiAdapter extends BaseAiAdapter<FormConfig> {
|
|
|
374
469
|
getCapabilities(): AiCapability[];
|
|
375
470
|
getTaskPresets(): Record<string, string[]>;
|
|
376
471
|
getRuntimeState(): Record<string, any>;
|
|
472
|
+
getAuthoringContext(): Record<string, any>;
|
|
473
|
+
compileAiResponse(response: Record<string, unknown>): AiResponseCompileResult | null;
|
|
377
474
|
createSnapshot(): FormConfig;
|
|
378
475
|
restoreSnapshot(snapshot: FormConfig): Promise<void>;
|
|
379
476
|
applyPatch(patch: Partial<FormConfig>, intent?: string): Promise<PatchResult>;
|
|
380
477
|
getContextDescription(): string;
|
|
381
478
|
private applyConfig;
|
|
382
479
|
private smartMergeFormConfig;
|
|
480
|
+
private extractIncomingRules;
|
|
481
|
+
private extractComponentEditOperationPatch;
|
|
482
|
+
private applyComponentEditOperation;
|
|
483
|
+
private applyLocalFieldAdd;
|
|
484
|
+
private applyFieldMetadataPatch;
|
|
485
|
+
private appendFieldToLayout;
|
|
486
|
+
private resolveFieldName;
|
|
487
|
+
private matchesText;
|
|
488
|
+
private normalizeSearchText;
|
|
489
|
+
private toBoolean;
|
|
490
|
+
private toSubmitPolicy;
|
|
491
|
+
private extractVisualBlockGuidanceOperationRule;
|
|
492
|
+
private coerceSingleOperationResponse;
|
|
493
|
+
private coerceOperationResponses;
|
|
494
|
+
private operationInputRecord;
|
|
495
|
+
private normalizeVisualBlockGuidanceOperationInput;
|
|
496
|
+
private visualBlockGuidanceParamsToRule;
|
|
497
|
+
private normalizeLlmRule;
|
|
498
|
+
private mergeRulesById;
|
|
383
499
|
private cloneConfig;
|
|
500
|
+
private asRecord;
|
|
501
|
+
private toNonEmptyString;
|
|
384
502
|
private isFilled;
|
|
385
503
|
}
|
|
386
504
|
|
|
@@ -481,6 +599,18 @@ interface DynamicFormApplyPlan {
|
|
|
481
599
|
diagnostics: EditorDiagnostic[];
|
|
482
600
|
}
|
|
483
601
|
|
|
602
|
+
interface DynamicFormConfigPatchChangeEvent {
|
|
603
|
+
inputPatch: {
|
|
604
|
+
config: FormConfig;
|
|
605
|
+
};
|
|
606
|
+
}
|
|
607
|
+
interface PraxisDynamicFormDomainRulesOptions {
|
|
608
|
+
enabled?: boolean;
|
|
609
|
+
targetArtifactKey?: string | null;
|
|
610
|
+
targetLayer?: string | null;
|
|
611
|
+
targetArtifactType?: string | null;
|
|
612
|
+
status?: string | null;
|
|
613
|
+
}
|
|
484
614
|
interface DynamicFieldRenderErrorEvent {
|
|
485
615
|
phase: 'executeRendering' | 'detectChanges';
|
|
486
616
|
fieldName: string;
|
|
@@ -506,6 +636,21 @@ type ResolvedSectionHeaderVisual = {
|
|
|
506
636
|
text?: string;
|
|
507
637
|
ariaLabel: string;
|
|
508
638
|
};
|
|
639
|
+
interface FormColumnFieldsRenderItem {
|
|
640
|
+
kind: 'fields';
|
|
641
|
+
id: string;
|
|
642
|
+
fields: FieldMetadata[];
|
|
643
|
+
}
|
|
644
|
+
interface FormColumnRichContentRenderItem {
|
|
645
|
+
kind: 'richContent';
|
|
646
|
+
id: string;
|
|
647
|
+
document: RichContentDocument;
|
|
648
|
+
layout: 'block' | 'inline';
|
|
649
|
+
rootClassName?: string | null;
|
|
650
|
+
className?: string | null;
|
|
651
|
+
style?: Record<string, any> | null;
|
|
652
|
+
}
|
|
653
|
+
type FormColumnRenderItem = FormColumnFieldsRenderItem | FormColumnRichContentRenderItem;
|
|
509
654
|
declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
510
655
|
private crud;
|
|
511
656
|
private http;
|
|
@@ -537,12 +682,20 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
537
682
|
private hookPresets?;
|
|
538
683
|
private logger?;
|
|
539
684
|
private readonly i18n;
|
|
685
|
+
private readonly injector;
|
|
686
|
+
private readonly aiApi;
|
|
687
|
+
private readonly assistantSessions;
|
|
688
|
+
private readonly aiTurnOrchestrator;
|
|
689
|
+
private readonly jsonLogic;
|
|
690
|
+
private readonly aiAssistantSessionEffect;
|
|
691
|
+
private readonly globalActions;
|
|
540
692
|
private readonly DEBUG;
|
|
541
693
|
private effectiveActionsCache?;
|
|
542
694
|
private effectiveActionsCacheBase?;
|
|
543
695
|
private effectiveActionsCacheOverride?;
|
|
544
696
|
private invalidRequiredFieldLabelsCache;
|
|
545
697
|
private invalidRequiredFieldLabelsSignature;
|
|
698
|
+
readonly richContentHostCapabilities: RichBlockHostCapabilities;
|
|
546
699
|
resourcePath?: string;
|
|
547
700
|
resourceId?: string | number;
|
|
548
701
|
initialValue?: Record<string, unknown> | null;
|
|
@@ -595,6 +748,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
595
748
|
/** Identifier for persisting layouts */
|
|
596
749
|
formId?: string;
|
|
597
750
|
componentInstanceId?: string;
|
|
751
|
+
configPersistenceStrategy: 'local-first' | 'input-first';
|
|
598
752
|
/** Optional layout to use instead of generated one */
|
|
599
753
|
layout?: FormLayout;
|
|
600
754
|
/** Optional navigation back config (from CRUD host) */
|
|
@@ -617,6 +771,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
617
771
|
disabledModeGlobal: boolean | null;
|
|
618
772
|
presentationModeGlobal: boolean | null;
|
|
619
773
|
visibleGlobal: boolean | null;
|
|
774
|
+
/** Opt-in loader for shared domain rule materializations persisted outside FormConfig. */
|
|
775
|
+
domainRules: PraxisDynamicFormDomainRulesOptions | boolean | null;
|
|
620
776
|
get effectivePresentation(): boolean;
|
|
621
777
|
get effectiveReadonly(): boolean;
|
|
622
778
|
get effectiveDisabledMode(): boolean | null;
|
|
@@ -632,6 +788,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
632
788
|
formCancel: EventEmitter<void>;
|
|
633
789
|
formReset: EventEmitter<void>;
|
|
634
790
|
configChange: EventEmitter<FormConfig>;
|
|
791
|
+
configPatchChange: EventEmitter<DynamicFormConfigPatchChangeEvent>;
|
|
635
792
|
formReady: EventEmitter<FormReadyEvent>;
|
|
636
793
|
valueChange: EventEmitter<FormValueChangeEvent>;
|
|
637
794
|
syncCompleted: EventEmitter<SyncResult>;
|
|
@@ -649,6 +806,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
649
806
|
}>;
|
|
650
807
|
/** Forwarded from DynamicFieldLoader to allow host-side observability. */
|
|
651
808
|
fieldRenderError: EventEmitter<DynamicFieldRenderErrorEvent>;
|
|
809
|
+
/** Emits runtime rule diagnostics so hosts can surface or log invalid rules. */
|
|
810
|
+
ruleDiagnosticsChange: EventEmitter<RuleApplicationDiagnostic[]>;
|
|
652
811
|
isLoading: boolean;
|
|
653
812
|
submitting: boolean;
|
|
654
813
|
submitError: string | null;
|
|
@@ -659,6 +818,13 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
659
818
|
private isInitialized;
|
|
660
819
|
form: FormGroup;
|
|
661
820
|
aiAdapter: FormAiAdapter;
|
|
821
|
+
aiAssistantOpen: boolean;
|
|
822
|
+
aiAssistantPrompt: string;
|
|
823
|
+
aiAssistantLayout: PraxisAssistantShellLayout;
|
|
824
|
+
aiAssistantViewState: PraxisAssistantTurnViewState;
|
|
825
|
+
readonly aiAssistantLabels: Partial<PraxisAssistantShellLabels>;
|
|
826
|
+
private aiAssistantController;
|
|
827
|
+
private aiAssistantStateSubscription;
|
|
662
828
|
fieldVisibility: {
|
|
663
829
|
[fieldName: string]: boolean;
|
|
664
830
|
};
|
|
@@ -667,6 +833,12 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
667
833
|
actionRuleProps: Record<string, Record<string, any>>;
|
|
668
834
|
private rowRuleProps;
|
|
669
835
|
private columnRuleProps;
|
|
836
|
+
private visualBlockRuleProps;
|
|
837
|
+
private materializedFormRules;
|
|
838
|
+
private materializedFormRulesLoadSignature;
|
|
839
|
+
private readonly formCommandRuleStates;
|
|
840
|
+
ruleApplicationDiagnostics: RuleApplicationDiagnostic[];
|
|
841
|
+
private ruleApplicationDiagnosticsSignature;
|
|
670
842
|
private pendingEntityId;
|
|
671
843
|
private loadedEntityId;
|
|
672
844
|
private hydratedEntityId;
|
|
@@ -677,6 +849,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
677
849
|
private schemaRootHooks?;
|
|
678
850
|
private destroy$;
|
|
679
851
|
private formValueChangesSubscription;
|
|
852
|
+
private dependencyPolicySubscription;
|
|
680
853
|
private formBuildCycleId;
|
|
681
854
|
private suppressedValueChangeBuildId;
|
|
682
855
|
private pendingBootstrapValueChangeBuildId;
|
|
@@ -787,6 +960,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
787
960
|
private hasSchemaBackedRuntime;
|
|
788
961
|
private hasRenderableConfig;
|
|
789
962
|
private initializeStandaloneConfig;
|
|
963
|
+
private initializeDisconnectedEmptyState;
|
|
790
964
|
private reloadForModeChange;
|
|
791
965
|
ngOnInit(): void;
|
|
792
966
|
ngOnChanges(changes: SimpleChanges): void;
|
|
@@ -800,24 +974,45 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
800
974
|
private createDefaultConfig;
|
|
801
975
|
private createConfigFromHostConfig;
|
|
802
976
|
private reconcileLoadedConfigWithServerSchema;
|
|
977
|
+
private hostConfigHasAuthoredLocalFieldsNotInLocalConfig;
|
|
803
978
|
private syncWithServer;
|
|
804
979
|
private loadEntity;
|
|
805
980
|
private buildFormFromConfig;
|
|
806
981
|
private resetFormValueChangesSubscription;
|
|
982
|
+
private resetDependencyPolicySubscription;
|
|
983
|
+
private setupEntityLookupDependencyPolicies;
|
|
984
|
+
private applyEntityLookupDependencyPolicy;
|
|
985
|
+
private isEntityLookupField;
|
|
986
|
+
private resolveFieldDependencyNames;
|
|
987
|
+
private allowEntityLookupLegacyRetention;
|
|
988
|
+
private hasMeaningfulDependencyValue;
|
|
989
|
+
private setEntityLookupDependencyConflict;
|
|
990
|
+
private clearEntityLookupDependencyConflict;
|
|
991
|
+
private resolveEntityLookupDependencyValidationMessage;
|
|
807
992
|
private scheduleValueChangeBootstrapRelease;
|
|
808
993
|
private hasInteractiveFormState;
|
|
809
994
|
private captureFormRuntimeState;
|
|
810
995
|
private getDirtyFieldNames;
|
|
996
|
+
private collectDirtyFieldNames;
|
|
811
997
|
private buildCurrentFormRuntimeContext;
|
|
812
998
|
private buildRestoreTargetContext;
|
|
813
999
|
private isCompatibleRuntimeStateContext;
|
|
814
1000
|
private restoreFormRuntimeState;
|
|
815
1001
|
private getNormalizedInitialValue;
|
|
1002
|
+
private normalizeFormPatchValue;
|
|
1003
|
+
private isDateControlMetadata;
|
|
1004
|
+
private coerceDateControlValue;
|
|
816
1005
|
/**
|
|
817
1006
|
* Backward-compatible required validation for DATE_RANGE controls.
|
|
818
1007
|
* Some core builds do not enforce required start/end for dateRange fields.
|
|
819
1008
|
*/
|
|
820
1009
|
private applyDateRangeRequiredValidators;
|
|
1010
|
+
/**
|
|
1011
|
+
* Backward-compatible required validation for multiple entity lookups.
|
|
1012
|
+
* Some form-control builders treat `required` correctly for single lookups but
|
|
1013
|
+
* do not mark empty collections as required when `multiple=true`.
|
|
1014
|
+
*/
|
|
1015
|
+
private applyEntityLookupCollectionRequiredValidators;
|
|
821
1016
|
private isMountAnimationDisabled;
|
|
822
1017
|
private triggerMountAnimation;
|
|
823
1018
|
protected getMountDurationVar(): string | null;
|
|
@@ -828,7 +1023,19 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
828
1023
|
private saveConnection;
|
|
829
1024
|
disconnect(): void;
|
|
830
1025
|
onToolbarRequestClose(): void;
|
|
1026
|
+
private getActiveFormRules;
|
|
1027
|
+
private refreshMaterializedFormRules;
|
|
1028
|
+
private resolveDomainRulesOptions;
|
|
831
1029
|
private evaluateAndApplyRules;
|
|
1030
|
+
private applyRuleComputedFieldValues;
|
|
1031
|
+
private evaluateAndDispatchFormCommandRules;
|
|
1032
|
+
private evaluateFormCommandCondition;
|
|
1033
|
+
private executeFormCommandGlobalAction;
|
|
1034
|
+
private isPotentiallyDestructiveFormCommandAction;
|
|
1035
|
+
private resolveFormCommandPath;
|
|
1036
|
+
private areRuleValuesEqual;
|
|
1037
|
+
private buildRuleApplicationTargetIndex;
|
|
1038
|
+
private setRuleApplicationDiagnostics;
|
|
832
1039
|
isSectionCollapsed(section?: FormSection): boolean;
|
|
833
1040
|
isSectionCollapsible(section?: FormSection): boolean;
|
|
834
1041
|
private getSectionRuleProps;
|
|
@@ -846,6 +1053,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
846
1053
|
getSectionHeaderAlign(section: FormSection): 'start' | 'center' | undefined;
|
|
847
1054
|
getSectionGapBottom(section: FormSection): number | null;
|
|
848
1055
|
getSectionTitleGapBottom(section: FormSection): number | null;
|
|
1056
|
+
getEffectiveSectionTitleGapBottom(section: FormSection): number;
|
|
1057
|
+
isSectionHeaderTitleOnly(section: FormSection): boolean;
|
|
849
1058
|
getSectionDescriptionGapBottom(section: FormSection): number | null;
|
|
850
1059
|
getSectionHeaderActionColor(action: FormSectionHeaderAction): 'primary' | 'accent' | 'warn' | undefined;
|
|
851
1060
|
getSectionHeaderActionTooltip(action: FormSectionHeaderAction): string;
|
|
@@ -888,11 +1097,19 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
888
1097
|
toggleSectionCollapse(event: Event, section: FormSection): void;
|
|
889
1098
|
sectionPanelId(section: FormSection, index: number): string;
|
|
890
1099
|
getSectionCollapsedSummary(section: FormSection): string;
|
|
1100
|
+
getColumnItems(column: FormColumn): FormLayoutItem[];
|
|
1101
|
+
getColumnRenderItems(column: FormColumn): FormColumnRenderItem[];
|
|
891
1102
|
getColumnFields(column: {
|
|
892
|
-
fields
|
|
1103
|
+
fields?: string[];
|
|
1104
|
+
items?: FormLayoutItem[];
|
|
893
1105
|
id?: string;
|
|
894
1106
|
}): FieldMetadata[];
|
|
1107
|
+
getRichContentLayoutItemDocument(item: FormLayoutItem): RichContentDocument | null;
|
|
1108
|
+
getRichContentLayoutItemLayout(item: FormLayoutItem): 'block' | 'inline';
|
|
1109
|
+
private getVisualBlockRuleProps;
|
|
1110
|
+
private isRichContentLayoutItemVisible;
|
|
895
1111
|
private getColumnFieldsSignature;
|
|
1112
|
+
private getColumnItemsSignature;
|
|
896
1113
|
private getColumnRuleProps;
|
|
897
1114
|
private buildFieldRuleMetadataOverrides;
|
|
898
1115
|
private normalizeRuleFieldOptions;
|
|
@@ -910,7 +1127,12 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
910
1127
|
private _getConfirmationMessageForAliases;
|
|
911
1128
|
private _showConfirmationDialog;
|
|
912
1129
|
onFormAction(event: PraxisFormActionEvent): void;
|
|
1130
|
+
private dispatchRichContentAction;
|
|
1131
|
+
private isRichContentActionAvailable;
|
|
1132
|
+
private hasRichContentCapability;
|
|
1133
|
+
private buildRichContentActionContext;
|
|
913
1134
|
private _executeAction;
|
|
1135
|
+
private getFormActionEventId;
|
|
914
1136
|
onSubmit(): Promise<void>;
|
|
915
1137
|
private navigateAfterSave;
|
|
916
1138
|
private shouldConfirmCancelOnDirty;
|
|
@@ -924,6 +1146,35 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
924
1146
|
* IMPORTANTE: Independe completamente do mode do formulário
|
|
925
1147
|
*/
|
|
926
1148
|
toggleEditMode(): void;
|
|
1149
|
+
openAiAssistant(): void;
|
|
1150
|
+
openAiAssistantFromSession(session: PraxisAssistantSessionSnapshot): void;
|
|
1151
|
+
closeAiAssistant(): void;
|
|
1152
|
+
onAiAssistantPromptChange(prompt: string): void;
|
|
1153
|
+
onAiAssistantSubmit(prompt: string): void;
|
|
1154
|
+
onAiAssistantApply(): void;
|
|
1155
|
+
onAiAssistantRetry(): void;
|
|
1156
|
+
onAiAssistantCancel(): void;
|
|
1157
|
+
onAiAssistantQuickReply(reply: PraxisAssistantShellQuickReply): void;
|
|
1158
|
+
onAiAssistantEditMessage(message: PraxisAssistantShellMessage): void;
|
|
1159
|
+
onAiAssistantResendMessage(message: PraxisAssistantShellMessage): void;
|
|
1160
|
+
onAiAssistantLayoutChange(layout: PraxisAssistantShellLayout): void;
|
|
1161
|
+
aiAssistantTriggerTestId(position: string): string;
|
|
1162
|
+
private initializeAiAssistantController;
|
|
1163
|
+
private buildAiAssistantContextItems;
|
|
1164
|
+
private buildAiAssistantContextSnapshot;
|
|
1165
|
+
private syncAiAssistantSession;
|
|
1166
|
+
private hasAiAssistantSessionState;
|
|
1167
|
+
private resolveAiAssistantSessionId;
|
|
1168
|
+
private resolveAiAssistantOwnerId;
|
|
1169
|
+
private resolveAiAssistantRouteKey;
|
|
1170
|
+
private resolveAiAssistantSummary;
|
|
1171
|
+
private resolveAiAssistantBadge;
|
|
1172
|
+
private resolveAiAssistantIcon;
|
|
1173
|
+
private resolveAiAssistantSelectedTarget;
|
|
1174
|
+
private toAiAssistantTargetKind;
|
|
1175
|
+
private toAiAssistantTargetId;
|
|
1176
|
+
private toAiAssistantTargetLabel;
|
|
1177
|
+
private toAiAssistantPath;
|
|
927
1178
|
openConfigEditor(): Promise<void>;
|
|
928
1179
|
onElementMouseEnter(event: MouseEvent, type: CanvasElementType, data: any, element?: HTMLElement): void;
|
|
929
1180
|
onElementMouseLeave(event: MouseEvent): void;
|
|
@@ -978,6 +1229,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
978
1229
|
private getControlTypeName;
|
|
979
1230
|
private applyNullDeletionPatch;
|
|
980
1231
|
private stripNullMarkersFromPatch;
|
|
1232
|
+
private mergeMetadataObjectPatch;
|
|
981
1233
|
private deleteMetadataPath;
|
|
982
1234
|
private getMetadataPath;
|
|
983
1235
|
/**
|
|
@@ -1006,6 +1258,11 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
1006
1258
|
field: FieldMetadata;
|
|
1007
1259
|
element: HTMLElement;
|
|
1008
1260
|
}): void;
|
|
1261
|
+
onFieldFocus(payload: {
|
|
1262
|
+
field: FieldMetadata;
|
|
1263
|
+
element: HTMLElement;
|
|
1264
|
+
}): void;
|
|
1265
|
+
private selectCanvasField;
|
|
1009
1266
|
onDragStarted(event: {
|
|
1010
1267
|
field: FieldMetadata;
|
|
1011
1268
|
index: number;
|
|
@@ -1050,6 +1307,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
1050
1307
|
private captureCurrentSchemaPrefsSnapshot;
|
|
1051
1308
|
private executeDynamicFormEditorApplyPlan;
|
|
1052
1309
|
private attachRuntimeMetadataToDynamicFormConfig;
|
|
1310
|
+
private emitConfigPatchChange;
|
|
1311
|
+
private cloneFormConfigForPatch;
|
|
1053
1312
|
private parsePresentationCssNumber;
|
|
1054
1313
|
private clearDynamicFormEditorPersistence;
|
|
1055
1314
|
private clearStoredPresentationSnapshots;
|
|
@@ -1069,7 +1328,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
1069
1328
|
private applyPresentationVars;
|
|
1070
1329
|
private applyPresentationConfig;
|
|
1071
1330
|
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; }]>;
|
|
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>;
|
|
1331
|
+
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; }; "configPersistenceStrategy": { "alias": "configPersistenceStrategy"; "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; }; "domainRules": { "alias": "domainRules"; "required": false; }; "customEndpoints": { "alias": "customEndpoints"; "required": false; }; }, { "formSubmit": "formSubmit"; "formCancel": "formCancel"; "formReset": "formReset"; "configChange": "configChange"; "configPatchChange": "configPatchChange"; "formReady": "formReady"; "valueChange": "valueChange"; "syncCompleted": "syncCompleted"; "initializationError": "initializationError"; "loadingStateChange": "loadingStateChange"; "enableCustomizationChange": "enableCustomizationChange"; "customAction": "customAction"; "actionConfirmation": "actionConfirmation"; "schemaStatusChange": "schemaStatusChange"; "fieldRenderError": "fieldRenderError"; "ruleDiagnosticsChange": "ruleDiagnosticsChange"; }, never, never, true, never>;
|
|
1073
1332
|
}
|
|
1074
1333
|
|
|
1075
1334
|
declare class FormConfigService {
|
|
@@ -1147,6 +1406,53 @@ declare class JsonConfigEditorComponent implements OnInit, OnDestroy {
|
|
|
1147
1406
|
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>;
|
|
1148
1407
|
}
|
|
1149
1408
|
|
|
1409
|
+
interface VisualBlockRuleNodeOption {
|
|
1410
|
+
id: string;
|
|
1411
|
+
label: string;
|
|
1412
|
+
kind: string;
|
|
1413
|
+
roles: Array<'text' | 'title' | 'message'>;
|
|
1414
|
+
}
|
|
1415
|
+
|
|
1416
|
+
type RuleAuthoringStatus = 'valid' | 'invalid-target' | 'invalid-condition' | 'unsupported-property' | 'sanitized-property' | 'runtime-only' | 'visual-builder-compatible' | 'llm-generated-pending-review';
|
|
1417
|
+
interface FormRulePropertyIssue {
|
|
1418
|
+
property: string;
|
|
1419
|
+
reason: 'unsupported-property' | 'invalid-value' | 'sanitized-value';
|
|
1420
|
+
}
|
|
1421
|
+
interface FormRuleTargetDiagnostic {
|
|
1422
|
+
type: NonNullable<FormLayoutRule['targetType']>;
|
|
1423
|
+
id: string;
|
|
1424
|
+
exists: boolean;
|
|
1425
|
+
}
|
|
1426
|
+
interface FormRuleDiagnostics {
|
|
1427
|
+
ruleId: string;
|
|
1428
|
+
ruleName?: string;
|
|
1429
|
+
status: RuleAuthoringStatus[];
|
|
1430
|
+
targetRefs: FormRuleTargetDiagnostic[];
|
|
1431
|
+
conditionRefs: string[];
|
|
1432
|
+
acceptedProperties: string[];
|
|
1433
|
+
rejectedProperties: string[];
|
|
1434
|
+
acceptedPropertiesWhenFalse: string[];
|
|
1435
|
+
rejectedPropertiesWhenFalse: string[];
|
|
1436
|
+
propertyIssues?: FormRulePropertyIssue[];
|
|
1437
|
+
propertyIssuesWhenFalse?: FormRulePropertyIssue[];
|
|
1438
|
+
runtimeOnlyReason?: string;
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
interface CommandRulePreviewModel {
|
|
1442
|
+
state: 'ready' | 'invalid';
|
|
1443
|
+
executionMode: 'preview-only';
|
|
1444
|
+
actionId: string;
|
|
1445
|
+
condition: JsonLogicExpression | null;
|
|
1446
|
+
payload?: unknown;
|
|
1447
|
+
payloadExpr?: string;
|
|
1448
|
+
policy: {
|
|
1449
|
+
trigger: 'on-condition-enter';
|
|
1450
|
+
distinct: boolean;
|
|
1451
|
+
distinctBy?: string;
|
|
1452
|
+
runOnInitialEvaluation?: boolean;
|
|
1453
|
+
};
|
|
1454
|
+
diagnostics: string[];
|
|
1455
|
+
}
|
|
1150
1456
|
declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, OnInit, OnDestroy {
|
|
1151
1457
|
private storage;
|
|
1152
1458
|
private configService;
|
|
@@ -1157,6 +1463,26 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1157
1463
|
ruleBuilderConfig: RuleBuilderConfig;
|
|
1158
1464
|
ruleBuilderState?: RuleBuilderState;
|
|
1159
1465
|
currentRules: FormLayoutRule[];
|
|
1466
|
+
selectedCommandRuleId: string;
|
|
1467
|
+
commandRuleCondition: JsonLogicExpression | null;
|
|
1468
|
+
commandRuleConditionJson: string;
|
|
1469
|
+
commandRuleActionId: string;
|
|
1470
|
+
commandRulePayloadJson: string;
|
|
1471
|
+
private commandRulePayloadExpr;
|
|
1472
|
+
commandRuleDistinct: boolean;
|
|
1473
|
+
commandRuleDistinctBy: string;
|
|
1474
|
+
commandRuleRunOnInitialEvaluation: boolean;
|
|
1475
|
+
commandRuleAuthoringError: string | null;
|
|
1476
|
+
commandRulePayloadFieldErrors: Record<string, string>;
|
|
1477
|
+
ruleDiagnostics: FormRuleDiagnostics[];
|
|
1478
|
+
visualBlockNodeOptions: Record<string, VisualBlockRuleNodeOption[]>;
|
|
1479
|
+
ruleDiagnosticsSummary: {
|
|
1480
|
+
total: number;
|
|
1481
|
+
invalid: number;
|
|
1482
|
+
runtimeOnly: number;
|
|
1483
|
+
unsupported: number;
|
|
1484
|
+
pendingReview: number;
|
|
1485
|
+
};
|
|
1160
1486
|
private initialConfig;
|
|
1161
1487
|
private initialDocument;
|
|
1162
1488
|
private readonly openedWithCanonicalDocument;
|
|
@@ -1200,13 +1526,16 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1200
1526
|
};
|
|
1201
1527
|
private destroy$;
|
|
1202
1528
|
private hasProcessedInitialRuleState;
|
|
1529
|
+
private jsonEditorIsValid;
|
|
1530
|
+
private globalActionValidationIssues;
|
|
1531
|
+
readonly globalActionCatalog: GlobalActionCatalogEntry[];
|
|
1203
1532
|
isDirty$: BehaviorSubject<boolean>;
|
|
1204
1533
|
isValid$: BehaviorSubject<boolean>;
|
|
1205
1534
|
isBusy$: BehaviorSubject<boolean>;
|
|
1206
1535
|
private lastRulesSignature;
|
|
1207
1536
|
private readonly DEBUG;
|
|
1208
1537
|
private debugLog;
|
|
1209
|
-
constructor(storage: AsyncConfigStorage, configService: FormConfigService, settingsPanel: SettingsPanelService, cdr: ChangeDetectorRef, injectedData?: any);
|
|
1538
|
+
constructor(storage: AsyncConfigStorage, configService: FormConfigService, settingsPanel: SettingsPanelService, cdr: ChangeDetectorRef, globalActionCatalogSource?: ReadonlyArray<GlobalActionCatalogEntry[]>, injectedData?: any);
|
|
1210
1539
|
ngOnInit(): void;
|
|
1211
1540
|
reset(): void;
|
|
1212
1541
|
updateDirtyState(reason?: string): void;
|
|
@@ -1216,7 +1545,53 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1216
1545
|
onJsonValidationChange(result: JsonValidationResult): void;
|
|
1217
1546
|
onJsonEditorEvent(_event: JsonEditorEvent): void;
|
|
1218
1547
|
onConfigChange(newConfig: FormConfig): void;
|
|
1548
|
+
private updateValidityState;
|
|
1549
|
+
private collectGlobalActionValidationIssues;
|
|
1550
|
+
private collectGlobalActionValidationTargets;
|
|
1551
|
+
private findGlobalActionCatalogEntry;
|
|
1552
|
+
private buildGlobalActionCatalog;
|
|
1219
1553
|
onRulesChanged(state: RuleBuilderState): void;
|
|
1554
|
+
onRulePropertiesChanged(rules: FormLayoutRule[]): void;
|
|
1555
|
+
get commandRules(): PraxisRuntimeConditionalEffectRule<PraxisRuntimeGlobalActionEffect>[];
|
|
1556
|
+
get selectedCommandRule(): PraxisRuntimeConditionalEffectRule<PraxisRuntimeGlobalActionEffect> | undefined;
|
|
1557
|
+
onCommandRuleSelectionChange(): void;
|
|
1558
|
+
onCommandActionChange(): void;
|
|
1559
|
+
onCommandConditionChanged(condition: JsonLogicExpression | null): void;
|
|
1560
|
+
addCommandRule(): void;
|
|
1561
|
+
applyCommandRule(): void;
|
|
1562
|
+
deleteCommandRule(): void;
|
|
1563
|
+
get commandRuleActionSchema(): _praxisui_core.GlobalActionUiSchema | undefined;
|
|
1564
|
+
shouldShowCommandActionField(field: GlobalActionField): boolean;
|
|
1565
|
+
isCommandActionFieldRequired(field: GlobalActionField): boolean;
|
|
1566
|
+
isCommandActionFieldMissing(field: GlobalActionField): boolean;
|
|
1567
|
+
hasCommandActionFieldError(key: string): boolean;
|
|
1568
|
+
getCommandActionFieldError(key: string): string;
|
|
1569
|
+
get commandRulePreview(): CommandRulePreviewModel;
|
|
1570
|
+
getCommandActionFieldValue(field: GlobalActionField): any;
|
|
1571
|
+
onCommandActionFieldChange(field: GlobalActionField, value: any): void;
|
|
1572
|
+
private initializeCommandRuleEditor;
|
|
1573
|
+
private loadCommandRuleEditor;
|
|
1574
|
+
private updateCommandRules;
|
|
1575
|
+
private parseCommandRuleCondition;
|
|
1576
|
+
private parseOptionalJson;
|
|
1577
|
+
private parseCommandPayloadObject;
|
|
1578
|
+
private collectCommandActionFieldValues;
|
|
1579
|
+
private setCommandActionFieldError;
|
|
1580
|
+
private clearCommandActionFieldError;
|
|
1581
|
+
private nextCommandRuleId;
|
|
1582
|
+
private getDefaultCommandActionId;
|
|
1583
|
+
private formatGlobalActionIssue;
|
|
1584
|
+
private computeRuleDiagnosticsSummary;
|
|
1585
|
+
getRuleStatusLabel(diagnostic: FormRuleDiagnostics): string;
|
|
1586
|
+
getRuleStatusTone(diagnostic: FormRuleDiagnostics): 'ok' | 'warn' | 'error';
|
|
1587
|
+
canAcceptPendingLlmRule(diagnostic: FormRuleDiagnostics): boolean;
|
|
1588
|
+
canApplyRulePropertyFix(diagnostic: FormRuleDiagnostics): boolean;
|
|
1589
|
+
applyRulePropertyFix(ruleId: string): void;
|
|
1590
|
+
acceptPendingLlmRule(ruleId: string): void;
|
|
1591
|
+
getRuleDiagnosticDetails(diagnostic: FormRuleDiagnostics): string[];
|
|
1592
|
+
private getRulePropertyIssueNames;
|
|
1593
|
+
private markLlmRuleAccepted;
|
|
1594
|
+
private refreshRuleDiagnostics;
|
|
1220
1595
|
get jsonDocument(): DynamicFormAuthoringDocument;
|
|
1221
1596
|
onBackConfigChange(): void;
|
|
1222
1597
|
isBindingsBlockPersisted(): boolean;
|
|
@@ -1229,7 +1604,15 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1229
1604
|
onPresentationPrefsChange(reason: string): void;
|
|
1230
1605
|
onSchemaPrefsChange(reason: string): void;
|
|
1231
1606
|
private createRuleBuilderConfig;
|
|
1607
|
+
private getVisualBuilderRulePropertySchema;
|
|
1232
1608
|
private mapMetadataToSchema;
|
|
1609
|
+
private getVisualBlockTargetLabel;
|
|
1610
|
+
private getRuleFieldLabel;
|
|
1611
|
+
private getRuleFieldDescription;
|
|
1612
|
+
private refreshVisualBlockNodeOptions;
|
|
1613
|
+
private collectVisualBlockNodeOptions;
|
|
1614
|
+
private getVisualBlockNodeRoles;
|
|
1615
|
+
private findRichContentNodeText;
|
|
1233
1616
|
private mapDataTypeToFieldType;
|
|
1234
1617
|
ngOnDestroy(): void;
|
|
1235
1618
|
onLayoutSelect(event: any): void;
|
|
@@ -1248,7 +1631,7 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1248
1631
|
private toPresentationSnapshot;
|
|
1249
1632
|
private toSchemaPrefsSnapshot;
|
|
1250
1633
|
private toBackConfigSnapshot;
|
|
1251
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicFormConfigEditor, [null, null, null, null, { optional: true; }]>;
|
|
1634
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicFormConfigEditor, [null, null, null, null, { optional: true; }, { optional: true; }]>;
|
|
1252
1635
|
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicFormConfigEditor, "praxis-dynamic-form-config-editor", never, {}, {}, never, never, true, never>;
|
|
1253
1636
|
}
|
|
1254
1637
|
interface FormConfigLike {
|
|
@@ -1286,6 +1669,7 @@ declare class PraxisFilterForm implements OnChanges, OnDestroy {
|
|
|
1286
1669
|
private hasExplicitDefaultValue;
|
|
1287
1670
|
onFormSubmit(): void;
|
|
1288
1671
|
getColumnFields(column: FormColumn): FieldMetadata[];
|
|
1672
|
+
getColumnClasses(column: FormColumn): string | null;
|
|
1289
1673
|
get fieldMetadata(): FieldMetadata[];
|
|
1290
1674
|
get hasLayout(): boolean;
|
|
1291
1675
|
trackBySection(i: number, section: FormSection): string;
|
|
@@ -1300,6 +1684,37 @@ declare const PRAXIS_FILTER_FORM_COMPONENT_METADATA: ComponentDocMeta;
|
|
|
1300
1684
|
/** Provider to register PraxisFilterForm metadata. */
|
|
1301
1685
|
declare function providePraxisFilterFormMetadata(): Provider;
|
|
1302
1686
|
|
|
1687
|
+
interface PraxisFilterFormWidgetEditorInputs {
|
|
1688
|
+
config?: FormConfig | null;
|
|
1689
|
+
formId?: string;
|
|
1690
|
+
resourcePath?: string;
|
|
1691
|
+
mode?: DynamicFormMode | string;
|
|
1692
|
+
[key: string]: unknown;
|
|
1693
|
+
}
|
|
1694
|
+
interface PraxisFilterFormWidgetEditorValue {
|
|
1695
|
+
inputs: PraxisFilterFormWidgetEditorInputs;
|
|
1696
|
+
}
|
|
1697
|
+
declare class PraxisFilterFormWidgetConfigEditor implements SettingsValueProvider, AfterViewInit, OnDestroy {
|
|
1698
|
+
inputs: PraxisFilterFormWidgetEditorInputs | null;
|
|
1699
|
+
widgetKey?: string;
|
|
1700
|
+
formEditor?: PraxisDynamicFormConfigEditor;
|
|
1701
|
+
readonly isDirty$: BehaviorSubject<boolean>;
|
|
1702
|
+
readonly isValid$: BehaviorSubject<boolean>;
|
|
1703
|
+
readonly isBusy$: BehaviorSubject<boolean>;
|
|
1704
|
+
private readonly subscription;
|
|
1705
|
+
ngAfterViewInit(): void;
|
|
1706
|
+
ngOnDestroy(): void;
|
|
1707
|
+
getSettingsValue(): PraxisFilterFormWidgetEditorValue;
|
|
1708
|
+
onSave(): PraxisFilterFormWidgetEditorValue;
|
|
1709
|
+
reset(): void;
|
|
1710
|
+
private initializeChildEditor;
|
|
1711
|
+
private buildValue;
|
|
1712
|
+
private createDocumentFromInputs;
|
|
1713
|
+
private normalizeMode;
|
|
1714
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilterFormWidgetConfigEditor, never>;
|
|
1715
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFilterFormWidgetConfigEditor, "praxis-filter-form-widget-config-editor", never, { "inputs": { "alias": "inputs"; "required": false; }; "widgetKey": { "alias": "widgetKey"; "required": false; }; }, {}, never, never, true, never>;
|
|
1716
|
+
}
|
|
1717
|
+
|
|
1303
1718
|
/** Tokens for theme colors used across the layout editor. */
|
|
1304
1719
|
declare enum LayoutColorToken {
|
|
1305
1720
|
Surface = "--md-sys-color-surface",
|
|
@@ -1323,11 +1738,53 @@ declare class LayoutPrefsService {
|
|
|
1323
1738
|
static ɵprov: i0.ɵɵInjectableDeclaration<LayoutPrefsService>;
|
|
1324
1739
|
}
|
|
1325
1740
|
|
|
1741
|
+
type VisualBlockPresetId = 'text' | 'notice' | 'divider' | 'infoCard' | 'callout' | 'keyValueList' | 'recordSummary' | 'lookupCard' | 'disclosure' | 'emptyState';
|
|
1742
|
+
interface VisualBlockPreset {
|
|
1743
|
+
id: VisualBlockPresetId;
|
|
1744
|
+
labelKey: string;
|
|
1745
|
+
icon: string;
|
|
1746
|
+
}
|
|
1747
|
+
|
|
1326
1748
|
interface FieldDropEvent {
|
|
1327
1749
|
event: CdkDragDrop<any>;
|
|
1328
1750
|
sectionIndex: number;
|
|
1329
1751
|
rowIndex: number;
|
|
1330
1752
|
}
|
|
1753
|
+
interface VisualBlockEvent {
|
|
1754
|
+
sectionIndex: number;
|
|
1755
|
+
rowIndex: number;
|
|
1756
|
+
columnIndex: number;
|
|
1757
|
+
itemId: string;
|
|
1758
|
+
}
|
|
1759
|
+
interface AddVisualBlockEvent {
|
|
1760
|
+
sectionIndex: number;
|
|
1761
|
+
rowIndex: number;
|
|
1762
|
+
columnIndex: number;
|
|
1763
|
+
presetId: VisualBlockPresetId;
|
|
1764
|
+
}
|
|
1765
|
+
interface AddApiFieldEvent {
|
|
1766
|
+
sectionIndex: number;
|
|
1767
|
+
rowIndex: number;
|
|
1768
|
+
columnIndex: number;
|
|
1769
|
+
fieldName: string;
|
|
1770
|
+
}
|
|
1771
|
+
interface AddLocalFieldEvent {
|
|
1772
|
+
sectionIndex: number;
|
|
1773
|
+
rowIndex: number;
|
|
1774
|
+
columnIndex: number;
|
|
1775
|
+
}
|
|
1776
|
+
interface EditFieldEvent {
|
|
1777
|
+
sectionIndex: number;
|
|
1778
|
+
rowIndex: number;
|
|
1779
|
+
columnIndex: number;
|
|
1780
|
+
fieldName: string;
|
|
1781
|
+
}
|
|
1782
|
+
interface MoveVisualBlockEvent extends VisualBlockEvent {
|
|
1783
|
+
direction: -1 | 1;
|
|
1784
|
+
}
|
|
1785
|
+
interface MoveVisualBlockToColumnEvent extends VisualBlockEvent {
|
|
1786
|
+
targetColumnIndex: number;
|
|
1787
|
+
}
|
|
1331
1788
|
/**
|
|
1332
1789
|
* Editor component for configuring sections, rows and fields of a dynamic form.
|
|
1333
1790
|
* Provides a collapsible palette of available fields.
|
|
@@ -1337,13 +1794,19 @@ declare class LayoutEditorComponent implements OnInit {
|
|
|
1337
1794
|
configChange: EventEmitter<FormConfig>;
|
|
1338
1795
|
paletteCollapsed: boolean;
|
|
1339
1796
|
protected readonly prefs: LayoutPrefsService;
|
|
1797
|
+
private readonly layoutService;
|
|
1798
|
+
private readonly settingsPanel;
|
|
1799
|
+
private readonly i18n;
|
|
1800
|
+
private visualBlockIdSequence;
|
|
1801
|
+
private localFieldSequence;
|
|
1340
1802
|
protected readonly colorTokens: typeof LayoutColorToken;
|
|
1341
1803
|
selected: {
|
|
1342
|
-
type: 'section' | 'row' | 'column' | 'field';
|
|
1804
|
+
type: 'section' | 'row' | 'column' | 'field' | 'visualBlock';
|
|
1343
1805
|
sectionIndex?: number;
|
|
1344
1806
|
rowIndex?: number;
|
|
1345
1807
|
columnIndex?: number;
|
|
1346
1808
|
fieldName?: string;
|
|
1809
|
+
itemId?: string;
|
|
1347
1810
|
} | null;
|
|
1348
1811
|
gapGlobal: number;
|
|
1349
1812
|
setGapGlobal(val: number | string): void;
|
|
@@ -1368,6 +1831,7 @@ declare class LayoutEditorComponent implements OnInit {
|
|
|
1368
1831
|
* Fields that are not yet placed in any section/column of the layout.
|
|
1369
1832
|
*/
|
|
1370
1833
|
get availableFields(): FieldMetadata[];
|
|
1834
|
+
t(key: string, params?: Record<string, string | number | boolean | null | undefined>): string;
|
|
1371
1835
|
get columnDropListIds(): string[];
|
|
1372
1836
|
getColumnId(sectionIndex: number, rowIndex: number, columnIndex: number): string;
|
|
1373
1837
|
private parseColumnId;
|
|
@@ -1378,10 +1842,30 @@ declare class LayoutEditorComponent implements OnInit {
|
|
|
1378
1842
|
selectRow(sectionIndex: number, rowIndex: number): void;
|
|
1379
1843
|
selectColumn(sectionIndex: number, rowIndex: number, columnIndex: number): void;
|
|
1380
1844
|
dropField({ event }: FieldDropEvent): void;
|
|
1845
|
+
private getColumnLayoutItemByIndex;
|
|
1846
|
+
private getColumnTargetByIndex;
|
|
1847
|
+
private getLayoutItemTargetByIndex;
|
|
1381
1848
|
dropSection(event: CdkDragDrop<FormSection[]>): void;
|
|
1382
1849
|
addSection(): void;
|
|
1383
1850
|
removeSection(index: number): void;
|
|
1384
1851
|
onSectionUpdated(index: number, updatedSection: FormSection): void;
|
|
1852
|
+
addVisualBlockToColumn(event: AddVisualBlockEvent): void;
|
|
1853
|
+
private createVisualBlockItemId;
|
|
1854
|
+
addApiFieldToColumn(event: AddApiFieldEvent): void;
|
|
1855
|
+
addLocalFieldToColumn(event: AddLocalFieldEvent): void;
|
|
1856
|
+
openFieldMetadataEditor(event: EditFieldEvent): void;
|
|
1857
|
+
private openFieldMetadataEditorInternal;
|
|
1858
|
+
private applyFieldMetadataPatch;
|
|
1859
|
+
private createLocalFieldName;
|
|
1860
|
+
openVisualBlockEditor(event: {
|
|
1861
|
+
sectionIndex: number;
|
|
1862
|
+
rowIndex: number;
|
|
1863
|
+
columnIndex: number;
|
|
1864
|
+
itemId: string;
|
|
1865
|
+
}): void;
|
|
1866
|
+
moveVisualBlock(event: MoveVisualBlockEvent): void;
|
|
1867
|
+
moveVisualBlockToColumn(event: MoveVisualBlockToColumnEvent): void;
|
|
1868
|
+
removeVisualBlock(event: VisualBlockEvent): void;
|
|
1385
1869
|
private emitNewConfig;
|
|
1386
1870
|
onApplyStyleToAll(patch: Partial<FormSection>): void;
|
|
1387
1871
|
trackBySection(index: number, s: FormSection & {
|
|
@@ -1394,15 +1878,17 @@ declare class LayoutEditorComponent implements OnInit {
|
|
|
1394
1878
|
declare class RowConfiguratorComponent implements OnChanges {
|
|
1395
1879
|
row: FormRow;
|
|
1396
1880
|
fieldMetadata: FieldMetadata[];
|
|
1881
|
+
availableFields: FieldMetadata[];
|
|
1397
1882
|
sectionIndex: number;
|
|
1398
1883
|
rowIndex: number;
|
|
1399
1884
|
isLastRow: boolean;
|
|
1400
1885
|
selected: {
|
|
1401
|
-
type: 'section' | 'row' | 'column' | 'field';
|
|
1886
|
+
type: 'section' | 'row' | 'column' | 'field' | 'visualBlock';
|
|
1402
1887
|
sectionIndex?: number;
|
|
1403
1888
|
rowIndex?: number;
|
|
1404
1889
|
columnIndex?: number;
|
|
1405
1890
|
fieldName?: string;
|
|
1891
|
+
itemId?: string;
|
|
1406
1892
|
} | null;
|
|
1407
1893
|
availableFieldsListId: string | null;
|
|
1408
1894
|
connectedDropListIds: string[];
|
|
@@ -1412,8 +1898,51 @@ declare class RowConfiguratorComponent implements OnChanges {
|
|
|
1412
1898
|
remove: EventEmitter<void>;
|
|
1413
1899
|
applyRowGapAll: EventEmitter<number>;
|
|
1414
1900
|
fieldDrop: EventEmitter<CdkDragDrop<any, any, any>>;
|
|
1901
|
+
addVisualBlock: EventEmitter<{
|
|
1902
|
+
rowIndex: number;
|
|
1903
|
+
columnIndex: number;
|
|
1904
|
+
presetId: VisualBlockPresetId;
|
|
1905
|
+
}>;
|
|
1906
|
+
addApiField: EventEmitter<{
|
|
1907
|
+
rowIndex: number;
|
|
1908
|
+
columnIndex: number;
|
|
1909
|
+
fieldName: string;
|
|
1910
|
+
}>;
|
|
1911
|
+
addLocalField: EventEmitter<{
|
|
1912
|
+
rowIndex: number;
|
|
1913
|
+
columnIndex: number;
|
|
1914
|
+
}>;
|
|
1915
|
+
editField: EventEmitter<{
|
|
1916
|
+
rowIndex: number;
|
|
1917
|
+
columnIndex: number;
|
|
1918
|
+
fieldName: string;
|
|
1919
|
+
}>;
|
|
1920
|
+
editVisualBlock: EventEmitter<{
|
|
1921
|
+
rowIndex: number;
|
|
1922
|
+
columnIndex: number;
|
|
1923
|
+
itemId: string;
|
|
1924
|
+
}>;
|
|
1925
|
+
moveVisualBlock: EventEmitter<{
|
|
1926
|
+
rowIndex: number;
|
|
1927
|
+
columnIndex: number;
|
|
1928
|
+
itemId: string;
|
|
1929
|
+
direction: -1 | 1;
|
|
1930
|
+
}>;
|
|
1931
|
+
moveVisualBlockToColumn: EventEmitter<{
|
|
1932
|
+
rowIndex: number;
|
|
1933
|
+
columnIndex: number;
|
|
1934
|
+
targetColumnIndex: number;
|
|
1935
|
+
itemId: string;
|
|
1936
|
+
}>;
|
|
1937
|
+
removeVisualBlock: EventEmitter<{
|
|
1938
|
+
rowIndex: number;
|
|
1939
|
+
columnIndex: number;
|
|
1940
|
+
itemId: string;
|
|
1941
|
+
}>;
|
|
1415
1942
|
select: EventEmitter<any>;
|
|
1416
1943
|
activeDropIndex: number | null;
|
|
1944
|
+
protected readonly visualBlockPresets: readonly VisualBlockPreset[];
|
|
1945
|
+
private readonly i18n;
|
|
1417
1946
|
private hoverTimer;
|
|
1418
1947
|
protected readonly breakpoints: Breakpoint[];
|
|
1419
1948
|
previewBreakpoint: Breakpoint;
|
|
@@ -1426,11 +1955,26 @@ declare class RowConfiguratorComponent implements OnChanges {
|
|
|
1426
1955
|
ngOnChanges(changes: SimpleChanges): void;
|
|
1427
1956
|
private rebuildConnectedColumnsCache;
|
|
1428
1957
|
getFieldByName(fieldName: string): FieldMetadata;
|
|
1429
|
-
|
|
1958
|
+
getColumnLayoutItems(column: FormColumn): FormLayoutItem[];
|
|
1959
|
+
trackLayoutItem(_: number, item: FormLayoutItem): string;
|
|
1960
|
+
hasColumnContent(column: FormColumn): boolean;
|
|
1961
|
+
getVisualBlockLabel(item: FormLayoutItem): string;
|
|
1962
|
+
private findRichContentLabel;
|
|
1963
|
+
private findRichNodeLabel;
|
|
1964
|
+
t(key: string, params?: Record<string, string | number | boolean | null | undefined>): string;
|
|
1965
|
+
getFieldLabel(field: FieldMetadata): string;
|
|
1966
|
+
selectVisualBlock(columnIndex: number, item: FormLayoutItem, event: Event): void;
|
|
1967
|
+
openVisualBlockEditor(columnIndex: number, item: FormLayoutItem, event: Event): void;
|
|
1968
|
+
moveVisualBlockItem(columnIndex: number, item: FormLayoutItem, direction: -1 | 1, event: Event): void;
|
|
1969
|
+
canMoveVisualBlockToColumn(columnIndex: number, direction: -1 | 1): boolean;
|
|
1970
|
+
moveVisualBlockToAdjacentColumn(columnIndex: number, item: FormLayoutItem, direction: -1 | 1, event: Event): void;
|
|
1971
|
+
removeVisualBlockItem(columnIndex: number, item: FormLayoutItem, event: Event): void;
|
|
1972
|
+
drop(event: CdkDragDrop<FormLayoutItem[], FormLayoutItem[] | FieldMetadata[], FormLayoutItem | FieldMetadata>): void;
|
|
1430
1973
|
selectRow(): void;
|
|
1431
1974
|
openColumnConfig(index: number): void;
|
|
1432
1975
|
selectColumn(index: number, event: MouseEvent): void;
|
|
1433
|
-
selectField(fieldName: string, event: MouseEvent): void;
|
|
1976
|
+
selectField(fieldName: string, columnIndex: number, event: MouseEvent): void;
|
|
1977
|
+
openFieldEditor(fieldName: string, columnIndex: number, event: Event): void;
|
|
1434
1978
|
openRowMenu(): void;
|
|
1435
1979
|
onMenuClosed(): void;
|
|
1436
1980
|
onDropEnter(index: number): void;
|
|
@@ -1444,6 +1988,9 @@ declare class RowConfiguratorComponent implements OnChanges {
|
|
|
1444
1988
|
removeRow(): void;
|
|
1445
1989
|
moveColumn(index: number, direction: number): void;
|
|
1446
1990
|
clearColumn(index: number): void;
|
|
1991
|
+
addVisualBlockToColumn(index: number, presetId: VisualBlockPresetId): void;
|
|
1992
|
+
addApiFieldToColumn(index: number, fieldName: string): void;
|
|
1993
|
+
addLocalFieldToColumn(index: number): void;
|
|
1447
1994
|
addFieldToColumn(index: number): void;
|
|
1448
1995
|
getColumnId(index: number): string;
|
|
1449
1996
|
private generateId;
|
|
@@ -1467,7 +2014,7 @@ declare class RowConfiguratorComponent implements OnChanges {
|
|
|
1467
2014
|
adjustOffset(columnIndex: number, delta: number): void;
|
|
1468
2015
|
getSuggestedSpan(columnIndex: number): number | null;
|
|
1469
2016
|
static ɵfac: i0.ɵɵFactoryDeclaration<RowConfiguratorComponent, never>;
|
|
1470
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<RowConfiguratorComponent, "praxis-row-configurator", never, { "row": { "alias": "row"; "required": false; }; "fieldMetadata": { "alias": "fieldMetadata"; "required": false; }; "sectionIndex": { "alias": "sectionIndex"; "required": false; }; "rowIndex": { "alias": "rowIndex"; "required": false; }; "isLastRow": { "alias": "isLastRow"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "availableFieldsListId": { "alias": "availableFieldsListId"; "required": false; }; "connectedDropListIds": { "alias": "connectedDropListIds"; "required": false; }; "gapGlobal": { "alias": "gapGlobal"; "required": false; }; }, { "rowChange": "rowChange"; "remove": "remove"; "applyRowGapAll": "applyRowGapAll"; "fieldDrop": "fieldDrop"; "select": "select"; }, never, never, true, never>;
|
|
2017
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RowConfiguratorComponent, "praxis-row-configurator", never, { "row": { "alias": "row"; "required": false; }; "fieldMetadata": { "alias": "fieldMetadata"; "required": false; }; "availableFields": { "alias": "availableFields"; "required": false; }; "sectionIndex": { "alias": "sectionIndex"; "required": false; }; "rowIndex": { "alias": "rowIndex"; "required": false; }; "isLastRow": { "alias": "isLastRow"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "availableFieldsListId": { "alias": "availableFieldsListId"; "required": false; }; "connectedDropListIds": { "alias": "connectedDropListIds"; "required": false; }; "gapGlobal": { "alias": "gapGlobal"; "required": false; }; }, { "rowChange": "rowChange"; "remove": "remove"; "applyRowGapAll": "applyRowGapAll"; "fieldDrop": "fieldDrop"; "addVisualBlock": "addVisualBlock"; "addApiField": "addApiField"; "addLocalField": "addLocalField"; "editField": "editField"; "editVisualBlock": "editVisualBlock"; "moveVisualBlock": "moveVisualBlock"; "moveVisualBlockToColumn": "moveVisualBlockToColumn"; "removeVisualBlock": "removeVisualBlock"; "select": "select"; }, never, never, true, never>;
|
|
1471
2018
|
}
|
|
1472
2019
|
|
|
1473
2020
|
declare class FieldConfiguratorComponent {
|
|
@@ -1485,11 +2032,69 @@ declare class FieldConfiguratorComponent {
|
|
|
1485
2032
|
static ɵcmp: i0.ɵɵComponentDeclaration<FieldConfiguratorComponent, "praxis-field-configurator", never, { "field": { "alias": "field"; "required": false; }; }, {}, never, never, true, never>;
|
|
1486
2033
|
}
|
|
1487
2034
|
|
|
2035
|
+
interface PraxisDynamicFormWidgetEditorInputs {
|
|
2036
|
+
config?: FormConfig | null;
|
|
2037
|
+
mode?: DynamicFormMode;
|
|
2038
|
+
formId?: string;
|
|
2039
|
+
componentInstanceId?: string;
|
|
2040
|
+
backConfig?: BackConfig;
|
|
2041
|
+
notifyIfOutdated?: 'inline' | 'snackbar' | 'both' | 'none';
|
|
2042
|
+
snoozeMs?: number;
|
|
2043
|
+
autoOpenSettingsOnOutdated?: boolean;
|
|
2044
|
+
[key: string]: unknown;
|
|
2045
|
+
}
|
|
2046
|
+
interface PraxisDynamicFormWidgetEditorValue {
|
|
2047
|
+
inputs: PraxisDynamicFormWidgetEditorInputs;
|
|
2048
|
+
}
|
|
2049
|
+
declare class PraxisDynamicFormWidgetConfigEditor implements SettingsValueProvider, AfterViewInit, OnDestroy {
|
|
2050
|
+
inputs: PraxisDynamicFormWidgetEditorInputs | null;
|
|
2051
|
+
widgetKey?: string;
|
|
2052
|
+
formEditor?: PraxisDynamicFormConfigEditor;
|
|
2053
|
+
readonly isDirty$: BehaviorSubject<boolean>;
|
|
2054
|
+
readonly isValid$: BehaviorSubject<boolean>;
|
|
2055
|
+
readonly isBusy$: BehaviorSubject<boolean>;
|
|
2056
|
+
private readonly subscription;
|
|
2057
|
+
ngAfterViewInit(): void;
|
|
2058
|
+
ngOnDestroy(): void;
|
|
2059
|
+
getSettingsValue(): PraxisDynamicFormWidgetEditorValue;
|
|
2060
|
+
onSave(): PraxisDynamicFormWidgetEditorValue;
|
|
2061
|
+
reset(): void;
|
|
2062
|
+
private initializeChildEditor;
|
|
2063
|
+
private buildValue;
|
|
2064
|
+
private createDocumentFromInputs;
|
|
2065
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicFormWidgetConfigEditor, never>;
|
|
2066
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicFormWidgetConfigEditor, "praxis-dynamic-form-widget-config-editor", never, { "inputs": { "alias": "inputs"; "required": false; }; "widgetKey": { "alias": "widgetKey"; "required": false; }; }, {}, never, never, true, never>;
|
|
2067
|
+
}
|
|
2068
|
+
|
|
1488
2069
|
/** Metadata for PraxisDynamicForm component */
|
|
1489
2070
|
declare const PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA: ComponentDocMeta;
|
|
1490
2071
|
/** Provider para auto-registrar metadados do componente Dynamic Form. */
|
|
1491
2072
|
declare function providePraxisDynamicFormMetadata(): Provider;
|
|
1492
2073
|
|
|
2074
|
+
interface DomainRuleFormRulesRequestOptions extends DomainRuleRequestOptions {
|
|
2075
|
+
targetLayer?: string;
|
|
2076
|
+
targetArtifactType?: string;
|
|
2077
|
+
status?: string;
|
|
2078
|
+
}
|
|
2079
|
+
type DomainRuleMaterializedFormLayoutRule = FormLayoutRule & {
|
|
2080
|
+
metadata?: Record<string, unknown>;
|
|
2081
|
+
};
|
|
2082
|
+
declare class DomainRuleFormRulesService {
|
|
2083
|
+
private readonly domainRules;
|
|
2084
|
+
constructor(domainRules: DomainRuleService);
|
|
2085
|
+
listRulesForForm(targetArtifactKey: string, options?: DomainRuleFormRulesRequestOptions): Observable<DomainRuleMaterializedFormLayoutRule[]>;
|
|
2086
|
+
materializationsToFormRules(materializations: DomainRuleMaterialization[] | null | undefined): DomainRuleMaterializedFormLayoutRule[];
|
|
2087
|
+
materializationToFormRule(materialization: DomainRuleMaterialization): DomainRuleMaterializedFormLayoutRule | null;
|
|
2088
|
+
private asDirectFormRule;
|
|
2089
|
+
private visualBlockGuidanceToRule;
|
|
2090
|
+
private withDomainMetadata;
|
|
2091
|
+
private asRecord;
|
|
2092
|
+
private asStringArray;
|
|
2093
|
+
private resolveString;
|
|
2094
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DomainRuleFormRulesService, never>;
|
|
2095
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DomainRuleFormRulesService>;
|
|
2096
|
+
}
|
|
2097
|
+
|
|
1493
2098
|
declare function isRuleSatisfied(rule: FormLayoutRule, data: unknown): boolean;
|
|
1494
2099
|
/**
|
|
1495
2100
|
* Applies all visibility rules to the provided data and
|
|
@@ -1581,6 +2186,7 @@ type ActionCatalogOption = {
|
|
|
1581
2186
|
id: string;
|
|
1582
2187
|
label: string;
|
|
1583
2188
|
description?: string;
|
|
2189
|
+
payloadSchema?: GlobalActionCatalogEntry['payloadSchema'];
|
|
1584
2190
|
param?: {
|
|
1585
2191
|
required?: boolean;
|
|
1586
2192
|
label?: string;
|
|
@@ -1634,7 +2240,6 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
|
|
|
1634
2240
|
isBusy$: BehaviorSubject<boolean>;
|
|
1635
2241
|
private readonly globalActionCatalogSource;
|
|
1636
2242
|
private readonly i18n;
|
|
1637
|
-
readonly legacyActionSpecs: _praxisui_core.GlobalActionSpec[];
|
|
1638
2243
|
readonly globalActionCatalog: ActionCatalogOption[];
|
|
1639
2244
|
readonly customActionValue = "__custom__";
|
|
1640
2245
|
private destroy$;
|
|
@@ -1654,12 +2259,12 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
|
|
|
1654
2259
|
label?: string;
|
|
1655
2260
|
}): string;
|
|
1656
2261
|
getHeaderActionSpecById(id: string): ActionCatalogOption | undefined;
|
|
1657
|
-
getHeaderActionSelectValue(value?: string): string;
|
|
1658
|
-
getHeaderActionParam(value?: string): string;
|
|
1659
|
-
getHeaderActionCustomValue(value?: string): string;
|
|
1660
|
-
getHeaderGlobalActionSchema(value?: string): _praxisui_core.GlobalActionUiSchema | undefined;
|
|
1661
|
-
getHeaderSurfaceOpenActionPayload(value?: string): SurfaceOpenPayload;
|
|
1662
|
-
isHeaderActionParamMissing(value?: string): boolean;
|
|
2262
|
+
getHeaderActionSelectValue(value?: string, globalAction?: GlobalActionRef): string;
|
|
2263
|
+
getHeaderActionParam(value?: string, globalAction?: GlobalActionRef): string;
|
|
2264
|
+
getHeaderActionCustomValue(value?: string, globalAction?: GlobalActionRef): string;
|
|
2265
|
+
getHeaderGlobalActionSchema(value?: string, globalAction?: GlobalActionRef): _praxisui_core.GlobalActionUiSchema | undefined;
|
|
2266
|
+
getHeaderSurfaceOpenActionPayload(value?: string, globalAction?: GlobalActionRef): SurfaceOpenPayload;
|
|
2267
|
+
isHeaderActionParamMissing(value?: string, globalAction?: GlobalActionRef): boolean;
|
|
1663
2268
|
onHeaderActionSelectChange(index: number, value: string): void;
|
|
1664
2269
|
onHeaderActionParamChange(index: number, value: string): void;
|
|
1665
2270
|
onHeaderActionCustomChange(index: number, value: string): void;
|
|
@@ -1693,6 +2298,7 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
|
|
|
1693
2298
|
private normalizeHeaderActions;
|
|
1694
2299
|
private mapCatalogEntryToActionSpec;
|
|
1695
2300
|
private getActionCatalogDescription;
|
|
2301
|
+
private normalizeHeaderGlobalAction;
|
|
1696
2302
|
private headerActionStyleValidator;
|
|
1697
2303
|
private stringifyHeaderActionStyle;
|
|
1698
2304
|
private parseHeaderActionStyle;
|
|
@@ -1881,7 +2487,8 @@ declare enum FormRuleTargetType {
|
|
|
1881
2487
|
Section = "section",
|
|
1882
2488
|
Action = "action",
|
|
1883
2489
|
Row = "row",
|
|
1884
|
-
Column = "column"
|
|
2490
|
+
Column = "column",
|
|
2491
|
+
VisualBlock = "visualBlock"
|
|
1885
2492
|
}
|
|
1886
2493
|
declare enum FormRuleContext {
|
|
1887
2494
|
Visibility = "visibility",
|
|
@@ -1973,5 +2580,49 @@ declare const FORM_COMPONENT_AI_CAPABILITIES: CapabilityCatalog;
|
|
|
1973
2580
|
*/
|
|
1974
2581
|
declare function getFormAiCatalog(formConfig?: FormConfig): AiCapabilityCatalog;
|
|
1975
2582
|
|
|
1976
|
-
|
|
1977
|
-
|
|
2583
|
+
type DynamicFormRuleTargetType = NonNullable<FormLayoutRule['targetType']>;
|
|
2584
|
+
interface DynamicFormRuleAuthoringField {
|
|
2585
|
+
name: string;
|
|
2586
|
+
label?: string;
|
|
2587
|
+
type?: string;
|
|
2588
|
+
source?: string;
|
|
2589
|
+
submitPolicy?: string;
|
|
2590
|
+
}
|
|
2591
|
+
interface DynamicFormRuleAuthoringTarget {
|
|
2592
|
+
id: string;
|
|
2593
|
+
label?: string;
|
|
2594
|
+
}
|
|
2595
|
+
interface DynamicFormRuleAuthoringVisualBlockNode {
|
|
2596
|
+
id: string;
|
|
2597
|
+
label: string;
|
|
2598
|
+
kind: string;
|
|
2599
|
+
roles: Array<'text' | 'title' | 'message'>;
|
|
2600
|
+
}
|
|
2601
|
+
type DynamicFormRuleAuthoringTargets = Record<DynamicFormRuleTargetType, string[]>;
|
|
2602
|
+
type DynamicFormRuleAuthoringTargetDetails = Record<DynamicFormRuleTargetType, DynamicFormRuleAuthoringTarget[]>;
|
|
2603
|
+
type DynamicFormAllowedRuleProperties = Record<DynamicFormRuleTargetType, string[]>;
|
|
2604
|
+
interface DynamicFormRuleAuthoringContext {
|
|
2605
|
+
component: 'praxis-dynamic-form';
|
|
2606
|
+
capabilityCatalogVersion: string;
|
|
2607
|
+
fields: DynamicFormRuleAuthoringField[];
|
|
2608
|
+
targets: DynamicFormRuleAuthoringTargets;
|
|
2609
|
+
targetDetails: DynamicFormRuleAuthoringTargetDetails;
|
|
2610
|
+
allowedRuleProperties: DynamicFormAllowedRuleProperties;
|
|
2611
|
+
visualBlockNodes: Record<string, DynamicFormRuleAuthoringVisualBlockNode[]>;
|
|
2612
|
+
existingRules: FormLayoutRule[];
|
|
2613
|
+
diagnostics: FormRuleDiagnostics[];
|
|
2614
|
+
guardrails: string[];
|
|
2615
|
+
}
|
|
2616
|
+
declare function buildDynamicFormRuleAuthoringContext(config: Pick<FormConfig, 'fieldMetadata' | 'sections' | 'actions' | 'formRules'>): DynamicFormRuleAuthoringContext;
|
|
2617
|
+
|
|
2618
|
+
/**
|
|
2619
|
+
* Manifesto de authoring canônico para o componente praxis-dynamic-form.
|
|
2620
|
+
* Este arquivo define as operações permitidas pela IA para editar formulários.
|
|
2621
|
+
*
|
|
2622
|
+
* @version 1.5.0
|
|
2623
|
+
* @status COMPLIANT - Alinhado com contrato v2, gate de aceitação e semântica local/schema-backed.
|
|
2624
|
+
*/
|
|
2625
|
+
declare const PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST: ComponentAuthoringManifest;
|
|
2626
|
+
|
|
2627
|
+
export { ActionsEditorComponent, CanvasStateService, CanvasToolbarComponent, ColumnEditorComponent, DomainRuleFormRulesService, DynamicFormLayoutService, FORM_AI_CAPABILITIES, FORM_COMPONENT_AI_CAPABILITIES, FieldConfiguratorComponent, FieldEditorComponent, FormConfigService, FormContextService, FormLayoutService, FormRulesService, JsonConfigEditorComponent, LayoutColorToken, LayoutEditorComponent, LayoutPrefsService, PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST, PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA, PRAXIS_FILTER_FORM_COMPONENT_METADATA, PraxisDynamicForm, PraxisDynamicFormConfigEditor, PraxisDynamicFormWidgetConfigEditor, PraxisFilterForm, PraxisFilterFormWidgetConfigEditor, PraxisFormActionsComponent, RowConfiguratorComponent, RowEditorComponent, SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER, SectionEditorComponent, TASK_PRESETS, applyVisibilityRules, buildDynamicFormApplyPlan, buildDynamicFormRuleAuthoringContext, createDynamicFormAuthoringDocument, formLayoutRulesToBuilderState, getFormAiCatalog, getFormCapabilities, getFormEnum, isRuleSatisfied, normalizeDateArrays, normalizeDynamicFormAuthoringDocument, parseLegacyOrDynamicFormDocument, providePraxisDynamicFormMetadata, providePraxisFilterFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput };
|
|
2628
|
+
export type { CanvasElement, CanvasElementType, CanvasPathPart, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, DomainRuleFormRulesRequestOptions, DomainRuleMaterializedFormLayoutRule, DynamicFieldRenderErrorEvent, DynamicFormAllowedRuleProperties, DynamicFormApplyPlan, DynamicFormAuthoringDocument, DynamicFormBindings, DynamicFormConfigPatchChangeEvent, DynamicFormContextSnapshot, DynamicFormMode, DynamicFormPresentationSnapshot, DynamicFormProjectionContext, DynamicFormResolvedRuntimeContract, DynamicFormRuleAuthoringContext, DynamicFormRuleAuthoringField, DynamicFormRuleAuthoringTarget, DynamicFormRuleAuthoringTargetDetails, DynamicFormRuleAuthoringTargets, DynamicFormRuleAuthoringVisualBlockNode, DynamicFormRuleTargetType, DynamicFormRuntimeContext, DynamicFormRuntimeValueSource, DynamicFormSchemaPrefsSnapshot, DynamicFormValidationContext, EditorDiagnostic, EditorDocument, FieldPath, FieldPathContainer, FieldPathWithIndex, Capability as FormComponentCapability, CapabilityCatalog as FormComponentCapabilityCatalog, CapabilityCategory as FormComponentCapabilityCategory, ValueKind as FormComponentValueKind, FormConfigLike, IdPath, InsertLocalFieldOptions, InsertLocalFieldResult, JsonEditorEvent, JsonValidationResult, LayoutChange, LayoutResult, LocalFieldInsertionDiagnostic, LocalFieldInsertionDiagnosticCode, Operation, Path, PathWithIndex, PraxisDynamicFormDomainRulesOptions, PraxisDynamicFormWidgetEditorInputs, PraxisDynamicFormWidgetEditorValue, PraxisFilterFormWidgetEditorInputs, PraxisFilterFormWidgetEditorValue, PraxisFormActionEvent, RemovePolicy, RuleApplicationContext, RuleApplicationDiagnostic, RuleApplicationDiagnosticCode, RuleApplicationResult, RuleApplicationTargetIndex, RuleApplicationTargetType, ValidationReport, ValueKind$1 as ValueKind };
|