@praxisui/dynamic-form 8.0.0-beta.3 → 8.0.0-beta.31
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-IcmiP6u5.mjs +335 -0
- package/fesm2022/praxisui-dynamic-form.mjs +9493 -2144
- package/index.d.ts +670 -22
- package/package.json +12 -6
- 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
CHANGED
|
@@ -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, AiCapabilityCatalog } from '@praxisui/core';
|
|
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, AiValueKind, AiCapabilityCatalog, 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,14 +974,26 @@ 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;
|
|
@@ -818,6 +1004,12 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
818
1004
|
* Some core builds do not enforce required start/end for dateRange fields.
|
|
819
1005
|
*/
|
|
820
1006
|
private applyDateRangeRequiredValidators;
|
|
1007
|
+
/**
|
|
1008
|
+
* Backward-compatible required validation for multiple entity lookups.
|
|
1009
|
+
* Some form-control builders treat `required` correctly for single lookups but
|
|
1010
|
+
* do not mark empty collections as required when `multiple=true`.
|
|
1011
|
+
*/
|
|
1012
|
+
private applyEntityLookupCollectionRequiredValidators;
|
|
821
1013
|
private isMountAnimationDisabled;
|
|
822
1014
|
private triggerMountAnimation;
|
|
823
1015
|
protected getMountDurationVar(): string | null;
|
|
@@ -828,7 +1020,19 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
828
1020
|
private saveConnection;
|
|
829
1021
|
disconnect(): void;
|
|
830
1022
|
onToolbarRequestClose(): void;
|
|
1023
|
+
private getActiveFormRules;
|
|
1024
|
+
private refreshMaterializedFormRules;
|
|
1025
|
+
private resolveDomainRulesOptions;
|
|
831
1026
|
private evaluateAndApplyRules;
|
|
1027
|
+
private applyRuleComputedFieldValues;
|
|
1028
|
+
private evaluateAndDispatchFormCommandRules;
|
|
1029
|
+
private evaluateFormCommandCondition;
|
|
1030
|
+
private executeFormCommandGlobalAction;
|
|
1031
|
+
private isPotentiallyDestructiveFormCommandAction;
|
|
1032
|
+
private resolveFormCommandPath;
|
|
1033
|
+
private areRuleValuesEqual;
|
|
1034
|
+
private buildRuleApplicationTargetIndex;
|
|
1035
|
+
private setRuleApplicationDiagnostics;
|
|
832
1036
|
isSectionCollapsed(section?: FormSection): boolean;
|
|
833
1037
|
isSectionCollapsible(section?: FormSection): boolean;
|
|
834
1038
|
private getSectionRuleProps;
|
|
@@ -846,6 +1050,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
846
1050
|
getSectionHeaderAlign(section: FormSection): 'start' | 'center' | undefined;
|
|
847
1051
|
getSectionGapBottom(section: FormSection): number | null;
|
|
848
1052
|
getSectionTitleGapBottom(section: FormSection): number | null;
|
|
1053
|
+
getEffectiveSectionTitleGapBottom(section: FormSection): number;
|
|
1054
|
+
isSectionHeaderTitleOnly(section: FormSection): boolean;
|
|
849
1055
|
getSectionDescriptionGapBottom(section: FormSection): number | null;
|
|
850
1056
|
getSectionHeaderActionColor(action: FormSectionHeaderAction): 'primary' | 'accent' | 'warn' | undefined;
|
|
851
1057
|
getSectionHeaderActionTooltip(action: FormSectionHeaderAction): string;
|
|
@@ -888,11 +1094,19 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
888
1094
|
toggleSectionCollapse(event: Event, section: FormSection): void;
|
|
889
1095
|
sectionPanelId(section: FormSection, index: number): string;
|
|
890
1096
|
getSectionCollapsedSummary(section: FormSection): string;
|
|
1097
|
+
getColumnItems(column: FormColumn): FormLayoutItem[];
|
|
1098
|
+
getColumnRenderItems(column: FormColumn): FormColumnRenderItem[];
|
|
891
1099
|
getColumnFields(column: {
|
|
892
|
-
fields
|
|
1100
|
+
fields?: string[];
|
|
1101
|
+
items?: FormLayoutItem[];
|
|
893
1102
|
id?: string;
|
|
894
1103
|
}): FieldMetadata[];
|
|
1104
|
+
getRichContentLayoutItemDocument(item: FormLayoutItem): RichContentDocument | null;
|
|
1105
|
+
getRichContentLayoutItemLayout(item: FormLayoutItem): 'block' | 'inline';
|
|
1106
|
+
private getVisualBlockRuleProps;
|
|
1107
|
+
private isRichContentLayoutItemVisible;
|
|
895
1108
|
private getColumnFieldsSignature;
|
|
1109
|
+
private getColumnItemsSignature;
|
|
896
1110
|
private getColumnRuleProps;
|
|
897
1111
|
private buildFieldRuleMetadataOverrides;
|
|
898
1112
|
private normalizeRuleFieldOptions;
|
|
@@ -910,7 +1124,12 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
910
1124
|
private _getConfirmationMessageForAliases;
|
|
911
1125
|
private _showConfirmationDialog;
|
|
912
1126
|
onFormAction(event: PraxisFormActionEvent): void;
|
|
1127
|
+
private dispatchRichContentAction;
|
|
1128
|
+
private isRichContentActionAvailable;
|
|
1129
|
+
private hasRichContentCapability;
|
|
1130
|
+
private buildRichContentActionContext;
|
|
913
1131
|
private _executeAction;
|
|
1132
|
+
private getFormActionEventId;
|
|
914
1133
|
onSubmit(): Promise<void>;
|
|
915
1134
|
private navigateAfterSave;
|
|
916
1135
|
private shouldConfirmCancelOnDirty;
|
|
@@ -924,6 +1143,35 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
924
1143
|
* IMPORTANTE: Independe completamente do mode do formulário
|
|
925
1144
|
*/
|
|
926
1145
|
toggleEditMode(): void;
|
|
1146
|
+
openAiAssistant(): void;
|
|
1147
|
+
openAiAssistantFromSession(session: PraxisAssistantSessionSnapshot): void;
|
|
1148
|
+
closeAiAssistant(): void;
|
|
1149
|
+
onAiAssistantPromptChange(prompt: string): void;
|
|
1150
|
+
onAiAssistantSubmit(prompt: string): void;
|
|
1151
|
+
onAiAssistantApply(): void;
|
|
1152
|
+
onAiAssistantRetry(): void;
|
|
1153
|
+
onAiAssistantCancel(): void;
|
|
1154
|
+
onAiAssistantQuickReply(reply: PraxisAssistantShellQuickReply): void;
|
|
1155
|
+
onAiAssistantEditMessage(message: PraxisAssistantShellMessage): void;
|
|
1156
|
+
onAiAssistantResendMessage(message: PraxisAssistantShellMessage): void;
|
|
1157
|
+
onAiAssistantLayoutChange(layout: PraxisAssistantShellLayout): void;
|
|
1158
|
+
aiAssistantTriggerTestId(position: string): string;
|
|
1159
|
+
private initializeAiAssistantController;
|
|
1160
|
+
private buildAiAssistantContextItems;
|
|
1161
|
+
private buildAiAssistantContextSnapshot;
|
|
1162
|
+
private syncAiAssistantSession;
|
|
1163
|
+
private hasAiAssistantSessionState;
|
|
1164
|
+
private resolveAiAssistantSessionId;
|
|
1165
|
+
private resolveAiAssistantOwnerId;
|
|
1166
|
+
private resolveAiAssistantRouteKey;
|
|
1167
|
+
private resolveAiAssistantSummary;
|
|
1168
|
+
private resolveAiAssistantBadge;
|
|
1169
|
+
private resolveAiAssistantIcon;
|
|
1170
|
+
private resolveAiAssistantSelectedTarget;
|
|
1171
|
+
private toAiAssistantTargetKind;
|
|
1172
|
+
private toAiAssistantTargetId;
|
|
1173
|
+
private toAiAssistantTargetLabel;
|
|
1174
|
+
private toAiAssistantPath;
|
|
927
1175
|
openConfigEditor(): Promise<void>;
|
|
928
1176
|
onElementMouseEnter(event: MouseEvent, type: CanvasElementType, data: any, element?: HTMLElement): void;
|
|
929
1177
|
onElementMouseLeave(event: MouseEvent): void;
|
|
@@ -978,6 +1226,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
978
1226
|
private getControlTypeName;
|
|
979
1227
|
private applyNullDeletionPatch;
|
|
980
1228
|
private stripNullMarkersFromPatch;
|
|
1229
|
+
private mergeMetadataObjectPatch;
|
|
981
1230
|
private deleteMetadataPath;
|
|
982
1231
|
private getMetadataPath;
|
|
983
1232
|
/**
|
|
@@ -1006,6 +1255,11 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
1006
1255
|
field: FieldMetadata;
|
|
1007
1256
|
element: HTMLElement;
|
|
1008
1257
|
}): void;
|
|
1258
|
+
onFieldFocus(payload: {
|
|
1259
|
+
field: FieldMetadata;
|
|
1260
|
+
element: HTMLElement;
|
|
1261
|
+
}): void;
|
|
1262
|
+
private selectCanvasField;
|
|
1009
1263
|
onDragStarted(event: {
|
|
1010
1264
|
field: FieldMetadata;
|
|
1011
1265
|
index: number;
|
|
@@ -1050,6 +1304,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
1050
1304
|
private captureCurrentSchemaPrefsSnapshot;
|
|
1051
1305
|
private executeDynamicFormEditorApplyPlan;
|
|
1052
1306
|
private attachRuntimeMetadataToDynamicFormConfig;
|
|
1307
|
+
private emitConfigPatchChange;
|
|
1308
|
+
private cloneFormConfigForPatch;
|
|
1053
1309
|
private parsePresentationCssNumber;
|
|
1054
1310
|
private clearDynamicFormEditorPersistence;
|
|
1055
1311
|
private clearStoredPresentationSnapshots;
|
|
@@ -1069,7 +1325,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
|
|
|
1069
1325
|
private applyPresentationVars;
|
|
1070
1326
|
private applyPresentationConfig;
|
|
1071
1327
|
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>;
|
|
1328
|
+
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
1329
|
}
|
|
1074
1330
|
|
|
1075
1331
|
declare class FormConfigService {
|
|
@@ -1147,6 +1403,53 @@ declare class JsonConfigEditorComponent implements OnInit, OnDestroy {
|
|
|
1147
1403
|
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
1404
|
}
|
|
1149
1405
|
|
|
1406
|
+
interface VisualBlockRuleNodeOption {
|
|
1407
|
+
id: string;
|
|
1408
|
+
label: string;
|
|
1409
|
+
kind: string;
|
|
1410
|
+
roles: Array<'text' | 'title' | 'message'>;
|
|
1411
|
+
}
|
|
1412
|
+
|
|
1413
|
+
type RuleAuthoringStatus = 'valid' | 'invalid-target' | 'invalid-condition' | 'unsupported-property' | 'sanitized-property' | 'runtime-only' | 'visual-builder-compatible' | 'llm-generated-pending-review';
|
|
1414
|
+
interface FormRulePropertyIssue {
|
|
1415
|
+
property: string;
|
|
1416
|
+
reason: 'unsupported-property' | 'invalid-value' | 'sanitized-value';
|
|
1417
|
+
}
|
|
1418
|
+
interface FormRuleTargetDiagnostic {
|
|
1419
|
+
type: NonNullable<FormLayoutRule['targetType']>;
|
|
1420
|
+
id: string;
|
|
1421
|
+
exists: boolean;
|
|
1422
|
+
}
|
|
1423
|
+
interface FormRuleDiagnostics {
|
|
1424
|
+
ruleId: string;
|
|
1425
|
+
ruleName?: string;
|
|
1426
|
+
status: RuleAuthoringStatus[];
|
|
1427
|
+
targetRefs: FormRuleTargetDiagnostic[];
|
|
1428
|
+
conditionRefs: string[];
|
|
1429
|
+
acceptedProperties: string[];
|
|
1430
|
+
rejectedProperties: string[];
|
|
1431
|
+
acceptedPropertiesWhenFalse: string[];
|
|
1432
|
+
rejectedPropertiesWhenFalse: string[];
|
|
1433
|
+
propertyIssues?: FormRulePropertyIssue[];
|
|
1434
|
+
propertyIssuesWhenFalse?: FormRulePropertyIssue[];
|
|
1435
|
+
runtimeOnlyReason?: string;
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1438
|
+
interface CommandRulePreviewModel {
|
|
1439
|
+
state: 'ready' | 'invalid';
|
|
1440
|
+
executionMode: 'preview-only';
|
|
1441
|
+
actionId: string;
|
|
1442
|
+
condition: JsonLogicExpression | null;
|
|
1443
|
+
payload?: unknown;
|
|
1444
|
+
payloadExpr?: string;
|
|
1445
|
+
policy: {
|
|
1446
|
+
trigger: 'on-condition-enter';
|
|
1447
|
+
distinct: boolean;
|
|
1448
|
+
distinctBy?: string;
|
|
1449
|
+
runOnInitialEvaluation?: boolean;
|
|
1450
|
+
};
|
|
1451
|
+
diagnostics: string[];
|
|
1452
|
+
}
|
|
1150
1453
|
declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, OnInit, OnDestroy {
|
|
1151
1454
|
private storage;
|
|
1152
1455
|
private configService;
|
|
@@ -1157,6 +1460,26 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1157
1460
|
ruleBuilderConfig: RuleBuilderConfig;
|
|
1158
1461
|
ruleBuilderState?: RuleBuilderState;
|
|
1159
1462
|
currentRules: FormLayoutRule[];
|
|
1463
|
+
selectedCommandRuleId: string;
|
|
1464
|
+
commandRuleCondition: JsonLogicExpression | null;
|
|
1465
|
+
commandRuleConditionJson: string;
|
|
1466
|
+
commandRuleActionId: string;
|
|
1467
|
+
commandRulePayloadJson: string;
|
|
1468
|
+
private commandRulePayloadExpr;
|
|
1469
|
+
commandRuleDistinct: boolean;
|
|
1470
|
+
commandRuleDistinctBy: string;
|
|
1471
|
+
commandRuleRunOnInitialEvaluation: boolean;
|
|
1472
|
+
commandRuleAuthoringError: string | null;
|
|
1473
|
+
commandRulePayloadFieldErrors: Record<string, string>;
|
|
1474
|
+
ruleDiagnostics: FormRuleDiagnostics[];
|
|
1475
|
+
visualBlockNodeOptions: Record<string, VisualBlockRuleNodeOption[]>;
|
|
1476
|
+
ruleDiagnosticsSummary: {
|
|
1477
|
+
total: number;
|
|
1478
|
+
invalid: number;
|
|
1479
|
+
runtimeOnly: number;
|
|
1480
|
+
unsupported: number;
|
|
1481
|
+
pendingReview: number;
|
|
1482
|
+
};
|
|
1160
1483
|
private initialConfig;
|
|
1161
1484
|
private initialDocument;
|
|
1162
1485
|
private readonly openedWithCanonicalDocument;
|
|
@@ -1200,13 +1523,16 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1200
1523
|
};
|
|
1201
1524
|
private destroy$;
|
|
1202
1525
|
private hasProcessedInitialRuleState;
|
|
1526
|
+
private jsonEditorIsValid;
|
|
1527
|
+
private globalActionValidationIssues;
|
|
1528
|
+
readonly globalActionCatalog: GlobalActionCatalogEntry[];
|
|
1203
1529
|
isDirty$: BehaviorSubject<boolean>;
|
|
1204
1530
|
isValid$: BehaviorSubject<boolean>;
|
|
1205
1531
|
isBusy$: BehaviorSubject<boolean>;
|
|
1206
1532
|
private lastRulesSignature;
|
|
1207
1533
|
private readonly DEBUG;
|
|
1208
1534
|
private debugLog;
|
|
1209
|
-
constructor(storage: AsyncConfigStorage, configService: FormConfigService, settingsPanel: SettingsPanelService, cdr: ChangeDetectorRef, injectedData?: any);
|
|
1535
|
+
constructor(storage: AsyncConfigStorage, configService: FormConfigService, settingsPanel: SettingsPanelService, cdr: ChangeDetectorRef, globalActionCatalogSource?: ReadonlyArray<GlobalActionCatalogEntry[]>, injectedData?: any);
|
|
1210
1536
|
ngOnInit(): void;
|
|
1211
1537
|
reset(): void;
|
|
1212
1538
|
updateDirtyState(reason?: string): void;
|
|
@@ -1216,7 +1542,53 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1216
1542
|
onJsonValidationChange(result: JsonValidationResult): void;
|
|
1217
1543
|
onJsonEditorEvent(_event: JsonEditorEvent): void;
|
|
1218
1544
|
onConfigChange(newConfig: FormConfig): void;
|
|
1545
|
+
private updateValidityState;
|
|
1546
|
+
private collectGlobalActionValidationIssues;
|
|
1547
|
+
private collectGlobalActionValidationTargets;
|
|
1548
|
+
private findGlobalActionCatalogEntry;
|
|
1549
|
+
private buildGlobalActionCatalog;
|
|
1219
1550
|
onRulesChanged(state: RuleBuilderState): void;
|
|
1551
|
+
onRulePropertiesChanged(rules: FormLayoutRule[]): void;
|
|
1552
|
+
get commandRules(): PraxisRuntimeConditionalEffectRule<PraxisRuntimeGlobalActionEffect>[];
|
|
1553
|
+
get selectedCommandRule(): PraxisRuntimeConditionalEffectRule<PraxisRuntimeGlobalActionEffect> | undefined;
|
|
1554
|
+
onCommandRuleSelectionChange(): void;
|
|
1555
|
+
onCommandActionChange(): void;
|
|
1556
|
+
onCommandConditionChanged(condition: JsonLogicExpression | null): void;
|
|
1557
|
+
addCommandRule(): void;
|
|
1558
|
+
applyCommandRule(): void;
|
|
1559
|
+
deleteCommandRule(): void;
|
|
1560
|
+
get commandRuleActionSchema(): _praxisui_core.GlobalActionUiSchema | undefined;
|
|
1561
|
+
shouldShowCommandActionField(field: GlobalActionField): boolean;
|
|
1562
|
+
isCommandActionFieldRequired(field: GlobalActionField): boolean;
|
|
1563
|
+
isCommandActionFieldMissing(field: GlobalActionField): boolean;
|
|
1564
|
+
hasCommandActionFieldError(key: string): boolean;
|
|
1565
|
+
getCommandActionFieldError(key: string): string;
|
|
1566
|
+
get commandRulePreview(): CommandRulePreviewModel;
|
|
1567
|
+
getCommandActionFieldValue(field: GlobalActionField): any;
|
|
1568
|
+
onCommandActionFieldChange(field: GlobalActionField, value: any): void;
|
|
1569
|
+
private initializeCommandRuleEditor;
|
|
1570
|
+
private loadCommandRuleEditor;
|
|
1571
|
+
private updateCommandRules;
|
|
1572
|
+
private parseCommandRuleCondition;
|
|
1573
|
+
private parseOptionalJson;
|
|
1574
|
+
private parseCommandPayloadObject;
|
|
1575
|
+
private collectCommandActionFieldValues;
|
|
1576
|
+
private setCommandActionFieldError;
|
|
1577
|
+
private clearCommandActionFieldError;
|
|
1578
|
+
private nextCommandRuleId;
|
|
1579
|
+
private getDefaultCommandActionId;
|
|
1580
|
+
private formatGlobalActionIssue;
|
|
1581
|
+
private computeRuleDiagnosticsSummary;
|
|
1582
|
+
getRuleStatusLabel(diagnostic: FormRuleDiagnostics): string;
|
|
1583
|
+
getRuleStatusTone(diagnostic: FormRuleDiagnostics): 'ok' | 'warn' | 'error';
|
|
1584
|
+
canAcceptPendingLlmRule(diagnostic: FormRuleDiagnostics): boolean;
|
|
1585
|
+
canApplyRulePropertyFix(diagnostic: FormRuleDiagnostics): boolean;
|
|
1586
|
+
applyRulePropertyFix(ruleId: string): void;
|
|
1587
|
+
acceptPendingLlmRule(ruleId: string): void;
|
|
1588
|
+
getRuleDiagnosticDetails(diagnostic: FormRuleDiagnostics): string[];
|
|
1589
|
+
private getRulePropertyIssueNames;
|
|
1590
|
+
private markLlmRuleAccepted;
|
|
1591
|
+
private refreshRuleDiagnostics;
|
|
1220
1592
|
get jsonDocument(): DynamicFormAuthoringDocument;
|
|
1221
1593
|
onBackConfigChange(): void;
|
|
1222
1594
|
isBindingsBlockPersisted(): boolean;
|
|
@@ -1229,7 +1601,15 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1229
1601
|
onPresentationPrefsChange(reason: string): void;
|
|
1230
1602
|
onSchemaPrefsChange(reason: string): void;
|
|
1231
1603
|
private createRuleBuilderConfig;
|
|
1604
|
+
private getVisualBuilderRulePropertySchema;
|
|
1232
1605
|
private mapMetadataToSchema;
|
|
1606
|
+
private getVisualBlockTargetLabel;
|
|
1607
|
+
private getRuleFieldLabel;
|
|
1608
|
+
private getRuleFieldDescription;
|
|
1609
|
+
private refreshVisualBlockNodeOptions;
|
|
1610
|
+
private collectVisualBlockNodeOptions;
|
|
1611
|
+
private getVisualBlockNodeRoles;
|
|
1612
|
+
private findRichContentNodeText;
|
|
1233
1613
|
private mapDataTypeToFieldType;
|
|
1234
1614
|
ngOnDestroy(): void;
|
|
1235
1615
|
onLayoutSelect(event: any): void;
|
|
@@ -1248,7 +1628,7 @@ declare class PraxisDynamicFormConfigEditor implements SettingsValueProvider, On
|
|
|
1248
1628
|
private toPresentationSnapshot;
|
|
1249
1629
|
private toSchemaPrefsSnapshot;
|
|
1250
1630
|
private toBackConfigSnapshot;
|
|
1251
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicFormConfigEditor, [null, null, null, null, { optional: true; }]>;
|
|
1631
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicFormConfigEditor, [null, null, null, null, { optional: true; }, { optional: true; }]>;
|
|
1252
1632
|
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisDynamicFormConfigEditor, "praxis-dynamic-form-config-editor", never, {}, {}, never, never, true, never>;
|
|
1253
1633
|
}
|
|
1254
1634
|
interface FormConfigLike {
|
|
@@ -1286,6 +1666,7 @@ declare class PraxisFilterForm implements OnChanges, OnDestroy {
|
|
|
1286
1666
|
private hasExplicitDefaultValue;
|
|
1287
1667
|
onFormSubmit(): void;
|
|
1288
1668
|
getColumnFields(column: FormColumn): FieldMetadata[];
|
|
1669
|
+
getColumnClasses(column: FormColumn): string | null;
|
|
1289
1670
|
get fieldMetadata(): FieldMetadata[];
|
|
1290
1671
|
get hasLayout(): boolean;
|
|
1291
1672
|
trackBySection(i: number, section: FormSection): string;
|
|
@@ -1300,6 +1681,37 @@ declare const PRAXIS_FILTER_FORM_COMPONENT_METADATA: ComponentDocMeta;
|
|
|
1300
1681
|
/** Provider to register PraxisFilterForm metadata. */
|
|
1301
1682
|
declare function providePraxisFilterFormMetadata(): Provider;
|
|
1302
1683
|
|
|
1684
|
+
interface PraxisFilterFormWidgetEditorInputs {
|
|
1685
|
+
config?: FormConfig | null;
|
|
1686
|
+
formId?: string;
|
|
1687
|
+
resourcePath?: string;
|
|
1688
|
+
mode?: DynamicFormMode | string;
|
|
1689
|
+
[key: string]: unknown;
|
|
1690
|
+
}
|
|
1691
|
+
interface PraxisFilterFormWidgetEditorValue {
|
|
1692
|
+
inputs: PraxisFilterFormWidgetEditorInputs;
|
|
1693
|
+
}
|
|
1694
|
+
declare class PraxisFilterFormWidgetConfigEditor implements SettingsValueProvider, AfterViewInit, OnDestroy {
|
|
1695
|
+
inputs: PraxisFilterFormWidgetEditorInputs | null;
|
|
1696
|
+
widgetKey?: string;
|
|
1697
|
+
formEditor?: PraxisDynamicFormConfigEditor;
|
|
1698
|
+
readonly isDirty$: BehaviorSubject<boolean>;
|
|
1699
|
+
readonly isValid$: BehaviorSubject<boolean>;
|
|
1700
|
+
readonly isBusy$: BehaviorSubject<boolean>;
|
|
1701
|
+
private readonly subscription;
|
|
1702
|
+
ngAfterViewInit(): void;
|
|
1703
|
+
ngOnDestroy(): void;
|
|
1704
|
+
getSettingsValue(): PraxisFilterFormWidgetEditorValue;
|
|
1705
|
+
onSave(): PraxisFilterFormWidgetEditorValue;
|
|
1706
|
+
reset(): void;
|
|
1707
|
+
private initializeChildEditor;
|
|
1708
|
+
private buildValue;
|
|
1709
|
+
private createDocumentFromInputs;
|
|
1710
|
+
private normalizeMode;
|
|
1711
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisFilterFormWidgetConfigEditor, never>;
|
|
1712
|
+
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>;
|
|
1713
|
+
}
|
|
1714
|
+
|
|
1303
1715
|
/** Tokens for theme colors used across the layout editor. */
|
|
1304
1716
|
declare enum LayoutColorToken {
|
|
1305
1717
|
Surface = "--md-sys-color-surface",
|
|
@@ -1323,11 +1735,53 @@ declare class LayoutPrefsService {
|
|
|
1323
1735
|
static ɵprov: i0.ɵɵInjectableDeclaration<LayoutPrefsService>;
|
|
1324
1736
|
}
|
|
1325
1737
|
|
|
1738
|
+
type VisualBlockPresetId = 'text' | 'notice' | 'divider' | 'infoCard' | 'callout' | 'keyValueList' | 'recordSummary' | 'lookupCard' | 'disclosure' | 'emptyState';
|
|
1739
|
+
interface VisualBlockPreset {
|
|
1740
|
+
id: VisualBlockPresetId;
|
|
1741
|
+
labelKey: string;
|
|
1742
|
+
icon: string;
|
|
1743
|
+
}
|
|
1744
|
+
|
|
1326
1745
|
interface FieldDropEvent {
|
|
1327
1746
|
event: CdkDragDrop<any>;
|
|
1328
1747
|
sectionIndex: number;
|
|
1329
1748
|
rowIndex: number;
|
|
1330
1749
|
}
|
|
1750
|
+
interface VisualBlockEvent {
|
|
1751
|
+
sectionIndex: number;
|
|
1752
|
+
rowIndex: number;
|
|
1753
|
+
columnIndex: number;
|
|
1754
|
+
itemId: string;
|
|
1755
|
+
}
|
|
1756
|
+
interface AddVisualBlockEvent {
|
|
1757
|
+
sectionIndex: number;
|
|
1758
|
+
rowIndex: number;
|
|
1759
|
+
columnIndex: number;
|
|
1760
|
+
presetId: VisualBlockPresetId;
|
|
1761
|
+
}
|
|
1762
|
+
interface AddApiFieldEvent {
|
|
1763
|
+
sectionIndex: number;
|
|
1764
|
+
rowIndex: number;
|
|
1765
|
+
columnIndex: number;
|
|
1766
|
+
fieldName: string;
|
|
1767
|
+
}
|
|
1768
|
+
interface AddLocalFieldEvent {
|
|
1769
|
+
sectionIndex: number;
|
|
1770
|
+
rowIndex: number;
|
|
1771
|
+
columnIndex: number;
|
|
1772
|
+
}
|
|
1773
|
+
interface EditFieldEvent {
|
|
1774
|
+
sectionIndex: number;
|
|
1775
|
+
rowIndex: number;
|
|
1776
|
+
columnIndex: number;
|
|
1777
|
+
fieldName: string;
|
|
1778
|
+
}
|
|
1779
|
+
interface MoveVisualBlockEvent extends VisualBlockEvent {
|
|
1780
|
+
direction: -1 | 1;
|
|
1781
|
+
}
|
|
1782
|
+
interface MoveVisualBlockToColumnEvent extends VisualBlockEvent {
|
|
1783
|
+
targetColumnIndex: number;
|
|
1784
|
+
}
|
|
1331
1785
|
/**
|
|
1332
1786
|
* Editor component for configuring sections, rows and fields of a dynamic form.
|
|
1333
1787
|
* Provides a collapsible palette of available fields.
|
|
@@ -1337,13 +1791,19 @@ declare class LayoutEditorComponent implements OnInit {
|
|
|
1337
1791
|
configChange: EventEmitter<FormConfig>;
|
|
1338
1792
|
paletteCollapsed: boolean;
|
|
1339
1793
|
protected readonly prefs: LayoutPrefsService;
|
|
1794
|
+
private readonly layoutService;
|
|
1795
|
+
private readonly settingsPanel;
|
|
1796
|
+
private readonly i18n;
|
|
1797
|
+
private visualBlockIdSequence;
|
|
1798
|
+
private localFieldSequence;
|
|
1340
1799
|
protected readonly colorTokens: typeof LayoutColorToken;
|
|
1341
1800
|
selected: {
|
|
1342
|
-
type: 'section' | 'row' | 'column' | 'field';
|
|
1801
|
+
type: 'section' | 'row' | 'column' | 'field' | 'visualBlock';
|
|
1343
1802
|
sectionIndex?: number;
|
|
1344
1803
|
rowIndex?: number;
|
|
1345
1804
|
columnIndex?: number;
|
|
1346
1805
|
fieldName?: string;
|
|
1806
|
+
itemId?: string;
|
|
1347
1807
|
} | null;
|
|
1348
1808
|
gapGlobal: number;
|
|
1349
1809
|
setGapGlobal(val: number | string): void;
|
|
@@ -1368,6 +1828,7 @@ declare class LayoutEditorComponent implements OnInit {
|
|
|
1368
1828
|
* Fields that are not yet placed in any section/column of the layout.
|
|
1369
1829
|
*/
|
|
1370
1830
|
get availableFields(): FieldMetadata[];
|
|
1831
|
+
t(key: string, params?: Record<string, string | number | boolean | null | undefined>): string;
|
|
1371
1832
|
get columnDropListIds(): string[];
|
|
1372
1833
|
getColumnId(sectionIndex: number, rowIndex: number, columnIndex: number): string;
|
|
1373
1834
|
private parseColumnId;
|
|
@@ -1378,10 +1839,30 @@ declare class LayoutEditorComponent implements OnInit {
|
|
|
1378
1839
|
selectRow(sectionIndex: number, rowIndex: number): void;
|
|
1379
1840
|
selectColumn(sectionIndex: number, rowIndex: number, columnIndex: number): void;
|
|
1380
1841
|
dropField({ event }: FieldDropEvent): void;
|
|
1842
|
+
private getColumnLayoutItemByIndex;
|
|
1843
|
+
private getColumnTargetByIndex;
|
|
1844
|
+
private getLayoutItemTargetByIndex;
|
|
1381
1845
|
dropSection(event: CdkDragDrop<FormSection[]>): void;
|
|
1382
1846
|
addSection(): void;
|
|
1383
1847
|
removeSection(index: number): void;
|
|
1384
1848
|
onSectionUpdated(index: number, updatedSection: FormSection): void;
|
|
1849
|
+
addVisualBlockToColumn(event: AddVisualBlockEvent): void;
|
|
1850
|
+
private createVisualBlockItemId;
|
|
1851
|
+
addApiFieldToColumn(event: AddApiFieldEvent): void;
|
|
1852
|
+
addLocalFieldToColumn(event: AddLocalFieldEvent): void;
|
|
1853
|
+
openFieldMetadataEditor(event: EditFieldEvent): void;
|
|
1854
|
+
private openFieldMetadataEditorInternal;
|
|
1855
|
+
private applyFieldMetadataPatch;
|
|
1856
|
+
private createLocalFieldName;
|
|
1857
|
+
openVisualBlockEditor(event: {
|
|
1858
|
+
sectionIndex: number;
|
|
1859
|
+
rowIndex: number;
|
|
1860
|
+
columnIndex: number;
|
|
1861
|
+
itemId: string;
|
|
1862
|
+
}): void;
|
|
1863
|
+
moveVisualBlock(event: MoveVisualBlockEvent): void;
|
|
1864
|
+
moveVisualBlockToColumn(event: MoveVisualBlockToColumnEvent): void;
|
|
1865
|
+
removeVisualBlock(event: VisualBlockEvent): void;
|
|
1385
1866
|
private emitNewConfig;
|
|
1386
1867
|
onApplyStyleToAll(patch: Partial<FormSection>): void;
|
|
1387
1868
|
trackBySection(index: number, s: FormSection & {
|
|
@@ -1394,15 +1875,17 @@ declare class LayoutEditorComponent implements OnInit {
|
|
|
1394
1875
|
declare class RowConfiguratorComponent implements OnChanges {
|
|
1395
1876
|
row: FormRow;
|
|
1396
1877
|
fieldMetadata: FieldMetadata[];
|
|
1878
|
+
availableFields: FieldMetadata[];
|
|
1397
1879
|
sectionIndex: number;
|
|
1398
1880
|
rowIndex: number;
|
|
1399
1881
|
isLastRow: boolean;
|
|
1400
1882
|
selected: {
|
|
1401
|
-
type: 'section' | 'row' | 'column' | 'field';
|
|
1883
|
+
type: 'section' | 'row' | 'column' | 'field' | 'visualBlock';
|
|
1402
1884
|
sectionIndex?: number;
|
|
1403
1885
|
rowIndex?: number;
|
|
1404
1886
|
columnIndex?: number;
|
|
1405
1887
|
fieldName?: string;
|
|
1888
|
+
itemId?: string;
|
|
1406
1889
|
} | null;
|
|
1407
1890
|
availableFieldsListId: string | null;
|
|
1408
1891
|
connectedDropListIds: string[];
|
|
@@ -1412,8 +1895,51 @@ declare class RowConfiguratorComponent implements OnChanges {
|
|
|
1412
1895
|
remove: EventEmitter<void>;
|
|
1413
1896
|
applyRowGapAll: EventEmitter<number>;
|
|
1414
1897
|
fieldDrop: EventEmitter<CdkDragDrop<any, any, any>>;
|
|
1898
|
+
addVisualBlock: EventEmitter<{
|
|
1899
|
+
rowIndex: number;
|
|
1900
|
+
columnIndex: number;
|
|
1901
|
+
presetId: VisualBlockPresetId;
|
|
1902
|
+
}>;
|
|
1903
|
+
addApiField: EventEmitter<{
|
|
1904
|
+
rowIndex: number;
|
|
1905
|
+
columnIndex: number;
|
|
1906
|
+
fieldName: string;
|
|
1907
|
+
}>;
|
|
1908
|
+
addLocalField: EventEmitter<{
|
|
1909
|
+
rowIndex: number;
|
|
1910
|
+
columnIndex: number;
|
|
1911
|
+
}>;
|
|
1912
|
+
editField: EventEmitter<{
|
|
1913
|
+
rowIndex: number;
|
|
1914
|
+
columnIndex: number;
|
|
1915
|
+
fieldName: string;
|
|
1916
|
+
}>;
|
|
1917
|
+
editVisualBlock: EventEmitter<{
|
|
1918
|
+
rowIndex: number;
|
|
1919
|
+
columnIndex: number;
|
|
1920
|
+
itemId: string;
|
|
1921
|
+
}>;
|
|
1922
|
+
moveVisualBlock: EventEmitter<{
|
|
1923
|
+
rowIndex: number;
|
|
1924
|
+
columnIndex: number;
|
|
1925
|
+
itemId: string;
|
|
1926
|
+
direction: -1 | 1;
|
|
1927
|
+
}>;
|
|
1928
|
+
moveVisualBlockToColumn: EventEmitter<{
|
|
1929
|
+
rowIndex: number;
|
|
1930
|
+
columnIndex: number;
|
|
1931
|
+
targetColumnIndex: number;
|
|
1932
|
+
itemId: string;
|
|
1933
|
+
}>;
|
|
1934
|
+
removeVisualBlock: EventEmitter<{
|
|
1935
|
+
rowIndex: number;
|
|
1936
|
+
columnIndex: number;
|
|
1937
|
+
itemId: string;
|
|
1938
|
+
}>;
|
|
1415
1939
|
select: EventEmitter<any>;
|
|
1416
1940
|
activeDropIndex: number | null;
|
|
1941
|
+
protected readonly visualBlockPresets: readonly VisualBlockPreset[];
|
|
1942
|
+
private readonly i18n;
|
|
1417
1943
|
private hoverTimer;
|
|
1418
1944
|
protected readonly breakpoints: Breakpoint[];
|
|
1419
1945
|
previewBreakpoint: Breakpoint;
|
|
@@ -1426,11 +1952,26 @@ declare class RowConfiguratorComponent implements OnChanges {
|
|
|
1426
1952
|
ngOnChanges(changes: SimpleChanges): void;
|
|
1427
1953
|
private rebuildConnectedColumnsCache;
|
|
1428
1954
|
getFieldByName(fieldName: string): FieldMetadata;
|
|
1429
|
-
|
|
1955
|
+
getColumnLayoutItems(column: FormColumn): FormLayoutItem[];
|
|
1956
|
+
trackLayoutItem(_: number, item: FormLayoutItem): string;
|
|
1957
|
+
hasColumnContent(column: FormColumn): boolean;
|
|
1958
|
+
getVisualBlockLabel(item: FormLayoutItem): string;
|
|
1959
|
+
private findRichContentLabel;
|
|
1960
|
+
private findRichNodeLabel;
|
|
1961
|
+
t(key: string, params?: Record<string, string | number | boolean | null | undefined>): string;
|
|
1962
|
+
getFieldLabel(field: FieldMetadata): string;
|
|
1963
|
+
selectVisualBlock(columnIndex: number, item: FormLayoutItem, event: Event): void;
|
|
1964
|
+
openVisualBlockEditor(columnIndex: number, item: FormLayoutItem, event: Event): void;
|
|
1965
|
+
moveVisualBlockItem(columnIndex: number, item: FormLayoutItem, direction: -1 | 1, event: Event): void;
|
|
1966
|
+
canMoveVisualBlockToColumn(columnIndex: number, direction: -1 | 1): boolean;
|
|
1967
|
+
moveVisualBlockToAdjacentColumn(columnIndex: number, item: FormLayoutItem, direction: -1 | 1, event: Event): void;
|
|
1968
|
+
removeVisualBlockItem(columnIndex: number, item: FormLayoutItem, event: Event): void;
|
|
1969
|
+
drop(event: CdkDragDrop<FormLayoutItem[], FormLayoutItem[] | FieldMetadata[], FormLayoutItem | FieldMetadata>): void;
|
|
1430
1970
|
selectRow(): void;
|
|
1431
1971
|
openColumnConfig(index: number): void;
|
|
1432
1972
|
selectColumn(index: number, event: MouseEvent): void;
|
|
1433
|
-
selectField(fieldName: string, event: MouseEvent): void;
|
|
1973
|
+
selectField(fieldName: string, columnIndex: number, event: MouseEvent): void;
|
|
1974
|
+
openFieldEditor(fieldName: string, columnIndex: number, event: Event): void;
|
|
1434
1975
|
openRowMenu(): void;
|
|
1435
1976
|
onMenuClosed(): void;
|
|
1436
1977
|
onDropEnter(index: number): void;
|
|
@@ -1444,6 +1985,9 @@ declare class RowConfiguratorComponent implements OnChanges {
|
|
|
1444
1985
|
removeRow(): void;
|
|
1445
1986
|
moveColumn(index: number, direction: number): void;
|
|
1446
1987
|
clearColumn(index: number): void;
|
|
1988
|
+
addVisualBlockToColumn(index: number, presetId: VisualBlockPresetId): void;
|
|
1989
|
+
addApiFieldToColumn(index: number, fieldName: string): void;
|
|
1990
|
+
addLocalFieldToColumn(index: number): void;
|
|
1447
1991
|
addFieldToColumn(index: number): void;
|
|
1448
1992
|
getColumnId(index: number): string;
|
|
1449
1993
|
private generateId;
|
|
@@ -1467,7 +2011,7 @@ declare class RowConfiguratorComponent implements OnChanges {
|
|
|
1467
2011
|
adjustOffset(columnIndex: number, delta: number): void;
|
|
1468
2012
|
getSuggestedSpan(columnIndex: number): number | null;
|
|
1469
2013
|
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>;
|
|
2014
|
+
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
2015
|
}
|
|
1472
2016
|
|
|
1473
2017
|
declare class FieldConfiguratorComponent {
|
|
@@ -1485,11 +2029,69 @@ declare class FieldConfiguratorComponent {
|
|
|
1485
2029
|
static ɵcmp: i0.ɵɵComponentDeclaration<FieldConfiguratorComponent, "praxis-field-configurator", never, { "field": { "alias": "field"; "required": false; }; }, {}, never, never, true, never>;
|
|
1486
2030
|
}
|
|
1487
2031
|
|
|
2032
|
+
interface PraxisDynamicFormWidgetEditorInputs {
|
|
2033
|
+
config?: FormConfig | null;
|
|
2034
|
+
mode?: DynamicFormMode;
|
|
2035
|
+
formId?: string;
|
|
2036
|
+
componentInstanceId?: string;
|
|
2037
|
+
backConfig?: BackConfig;
|
|
2038
|
+
notifyIfOutdated?: 'inline' | 'snackbar' | 'both' | 'none';
|
|
2039
|
+
snoozeMs?: number;
|
|
2040
|
+
autoOpenSettingsOnOutdated?: boolean;
|
|
2041
|
+
[key: string]: unknown;
|
|
2042
|
+
}
|
|
2043
|
+
interface PraxisDynamicFormWidgetEditorValue {
|
|
2044
|
+
inputs: PraxisDynamicFormWidgetEditorInputs;
|
|
2045
|
+
}
|
|
2046
|
+
declare class PraxisDynamicFormWidgetConfigEditor implements SettingsValueProvider, AfterViewInit, OnDestroy {
|
|
2047
|
+
inputs: PraxisDynamicFormWidgetEditorInputs | null;
|
|
2048
|
+
widgetKey?: string;
|
|
2049
|
+
formEditor?: PraxisDynamicFormConfigEditor;
|
|
2050
|
+
readonly isDirty$: BehaviorSubject<boolean>;
|
|
2051
|
+
readonly isValid$: BehaviorSubject<boolean>;
|
|
2052
|
+
readonly isBusy$: BehaviorSubject<boolean>;
|
|
2053
|
+
private readonly subscription;
|
|
2054
|
+
ngAfterViewInit(): void;
|
|
2055
|
+
ngOnDestroy(): void;
|
|
2056
|
+
getSettingsValue(): PraxisDynamicFormWidgetEditorValue;
|
|
2057
|
+
onSave(): PraxisDynamicFormWidgetEditorValue;
|
|
2058
|
+
reset(): void;
|
|
2059
|
+
private initializeChildEditor;
|
|
2060
|
+
private buildValue;
|
|
2061
|
+
private createDocumentFromInputs;
|
|
2062
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisDynamicFormWidgetConfigEditor, never>;
|
|
2063
|
+
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>;
|
|
2064
|
+
}
|
|
2065
|
+
|
|
1488
2066
|
/** Metadata for PraxisDynamicForm component */
|
|
1489
2067
|
declare const PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA: ComponentDocMeta;
|
|
1490
2068
|
/** Provider para auto-registrar metadados do componente Dynamic Form. */
|
|
1491
2069
|
declare function providePraxisDynamicFormMetadata(): Provider;
|
|
1492
2070
|
|
|
2071
|
+
interface DomainRuleFormRulesRequestOptions extends DomainRuleRequestOptions {
|
|
2072
|
+
targetLayer?: string;
|
|
2073
|
+
targetArtifactType?: string;
|
|
2074
|
+
status?: string;
|
|
2075
|
+
}
|
|
2076
|
+
type DomainRuleMaterializedFormLayoutRule = FormLayoutRule & {
|
|
2077
|
+
metadata?: Record<string, unknown>;
|
|
2078
|
+
};
|
|
2079
|
+
declare class DomainRuleFormRulesService {
|
|
2080
|
+
private readonly domainRules;
|
|
2081
|
+
constructor(domainRules: DomainRuleService);
|
|
2082
|
+
listRulesForForm(targetArtifactKey: string, options?: DomainRuleFormRulesRequestOptions): Observable<DomainRuleMaterializedFormLayoutRule[]>;
|
|
2083
|
+
materializationsToFormRules(materializations: DomainRuleMaterialization[] | null | undefined): DomainRuleMaterializedFormLayoutRule[];
|
|
2084
|
+
materializationToFormRule(materialization: DomainRuleMaterialization): DomainRuleMaterializedFormLayoutRule | null;
|
|
2085
|
+
private asDirectFormRule;
|
|
2086
|
+
private visualBlockGuidanceToRule;
|
|
2087
|
+
private withDomainMetadata;
|
|
2088
|
+
private asRecord;
|
|
2089
|
+
private asStringArray;
|
|
2090
|
+
private resolveString;
|
|
2091
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DomainRuleFormRulesService, never>;
|
|
2092
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DomainRuleFormRulesService>;
|
|
2093
|
+
}
|
|
2094
|
+
|
|
1493
2095
|
declare function isRuleSatisfied(rule: FormLayoutRule, data: unknown): boolean;
|
|
1494
2096
|
/**
|
|
1495
2097
|
* Applies all visibility rules to the provided data and
|
|
@@ -1581,6 +2183,7 @@ type ActionCatalogOption = {
|
|
|
1581
2183
|
id: string;
|
|
1582
2184
|
label: string;
|
|
1583
2185
|
description?: string;
|
|
2186
|
+
payloadSchema?: GlobalActionCatalogEntry['payloadSchema'];
|
|
1584
2187
|
param?: {
|
|
1585
2188
|
required?: boolean;
|
|
1586
2189
|
label?: string;
|
|
@@ -1634,7 +2237,6 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
|
|
|
1634
2237
|
isBusy$: BehaviorSubject<boolean>;
|
|
1635
2238
|
private readonly globalActionCatalogSource;
|
|
1636
2239
|
private readonly i18n;
|
|
1637
|
-
readonly legacyActionSpecs: _praxisui_core.GlobalActionSpec[];
|
|
1638
2240
|
readonly globalActionCatalog: ActionCatalogOption[];
|
|
1639
2241
|
readonly customActionValue = "__custom__";
|
|
1640
2242
|
private destroy$;
|
|
@@ -1654,12 +2256,12 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
|
|
|
1654
2256
|
label?: string;
|
|
1655
2257
|
}): string;
|
|
1656
2258
|
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;
|
|
2259
|
+
getHeaderActionSelectValue(value?: string, globalAction?: GlobalActionRef): string;
|
|
2260
|
+
getHeaderActionParam(value?: string, globalAction?: GlobalActionRef): string;
|
|
2261
|
+
getHeaderActionCustomValue(value?: string, globalAction?: GlobalActionRef): string;
|
|
2262
|
+
getHeaderGlobalActionSchema(value?: string, globalAction?: GlobalActionRef): _praxisui_core.GlobalActionUiSchema | undefined;
|
|
2263
|
+
getHeaderSurfaceOpenActionPayload(value?: string, globalAction?: GlobalActionRef): SurfaceOpenPayload;
|
|
2264
|
+
isHeaderActionParamMissing(value?: string, globalAction?: GlobalActionRef): boolean;
|
|
1663
2265
|
onHeaderActionSelectChange(index: number, value: string): void;
|
|
1664
2266
|
onHeaderActionParamChange(index: number, value: string): void;
|
|
1665
2267
|
onHeaderActionCustomChange(index: number, value: string): void;
|
|
@@ -1693,6 +2295,7 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
|
|
|
1693
2295
|
private normalizeHeaderActions;
|
|
1694
2296
|
private mapCatalogEntryToActionSpec;
|
|
1695
2297
|
private getActionCatalogDescription;
|
|
2298
|
+
private normalizeHeaderGlobalAction;
|
|
1696
2299
|
private headerActionStyleValidator;
|
|
1697
2300
|
private stringifyHeaderActionStyle;
|
|
1698
2301
|
private parseHeaderActionStyle;
|
|
@@ -1881,7 +2484,8 @@ declare enum FormRuleTargetType {
|
|
|
1881
2484
|
Section = "section",
|
|
1882
2485
|
Action = "action",
|
|
1883
2486
|
Row = "row",
|
|
1884
|
-
Column = "column"
|
|
2487
|
+
Column = "column",
|
|
2488
|
+
VisualBlock = "visualBlock"
|
|
1885
2489
|
}
|
|
1886
2490
|
declare enum FormRuleContext {
|
|
1887
2491
|
Visibility = "visibility",
|
|
@@ -1973,5 +2577,49 @@ declare const FORM_COMPONENT_AI_CAPABILITIES: CapabilityCatalog;
|
|
|
1973
2577
|
*/
|
|
1974
2578
|
declare function getFormAiCatalog(formConfig?: FormConfig): AiCapabilityCatalog;
|
|
1975
2579
|
|
|
1976
|
-
|
|
1977
|
-
|
|
2580
|
+
type DynamicFormRuleTargetType = NonNullable<FormLayoutRule['targetType']>;
|
|
2581
|
+
interface DynamicFormRuleAuthoringField {
|
|
2582
|
+
name: string;
|
|
2583
|
+
label?: string;
|
|
2584
|
+
type?: string;
|
|
2585
|
+
source?: string;
|
|
2586
|
+
submitPolicy?: string;
|
|
2587
|
+
}
|
|
2588
|
+
interface DynamicFormRuleAuthoringTarget {
|
|
2589
|
+
id: string;
|
|
2590
|
+
label?: string;
|
|
2591
|
+
}
|
|
2592
|
+
interface DynamicFormRuleAuthoringVisualBlockNode {
|
|
2593
|
+
id: string;
|
|
2594
|
+
label: string;
|
|
2595
|
+
kind: string;
|
|
2596
|
+
roles: Array<'text' | 'title' | 'message'>;
|
|
2597
|
+
}
|
|
2598
|
+
type DynamicFormRuleAuthoringTargets = Record<DynamicFormRuleTargetType, string[]>;
|
|
2599
|
+
type DynamicFormRuleAuthoringTargetDetails = Record<DynamicFormRuleTargetType, DynamicFormRuleAuthoringTarget[]>;
|
|
2600
|
+
type DynamicFormAllowedRuleProperties = Record<DynamicFormRuleTargetType, string[]>;
|
|
2601
|
+
interface DynamicFormRuleAuthoringContext {
|
|
2602
|
+
component: 'praxis-dynamic-form';
|
|
2603
|
+
capabilityCatalogVersion: string;
|
|
2604
|
+
fields: DynamicFormRuleAuthoringField[];
|
|
2605
|
+
targets: DynamicFormRuleAuthoringTargets;
|
|
2606
|
+
targetDetails: DynamicFormRuleAuthoringTargetDetails;
|
|
2607
|
+
allowedRuleProperties: DynamicFormAllowedRuleProperties;
|
|
2608
|
+
visualBlockNodes: Record<string, DynamicFormRuleAuthoringVisualBlockNode[]>;
|
|
2609
|
+
existingRules: FormLayoutRule[];
|
|
2610
|
+
diagnostics: FormRuleDiagnostics[];
|
|
2611
|
+
guardrails: string[];
|
|
2612
|
+
}
|
|
2613
|
+
declare function buildDynamicFormRuleAuthoringContext(config: Pick<FormConfig, 'fieldMetadata' | 'sections' | 'actions' | 'formRules'>): DynamicFormRuleAuthoringContext;
|
|
2614
|
+
|
|
2615
|
+
/**
|
|
2616
|
+
* Manifesto de authoring canônico para o componente praxis-dynamic-form.
|
|
2617
|
+
* Este arquivo define as operações permitidas pela IA para editar formulários.
|
|
2618
|
+
*
|
|
2619
|
+
* @version 1.5.0
|
|
2620
|
+
* @status COMPLIANT - Alinhado com contrato v2, gate de aceitação e semântica local/schema-backed.
|
|
2621
|
+
*/
|
|
2622
|
+
declare const PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST: ComponentAuthoringManifest;
|
|
2623
|
+
|
|
2624
|
+
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 };
|
|
2625
|
+
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 };
|