@praxisui/dynamic-form 3.0.0-beta.7 → 3.0.0-beta.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -5,7 +5,8 @@ import { Router, ActivatedRoute } from '@angular/router';
5
5
  import { MatDialog } from '@angular/material/dialog';
6
6
  import { MatSnackBar } from '@angular/material/snack-bar';
7
7
  import { CdkDragStart, CdkDragMove, CdkDragEnd, CdkDragDrop } from '@angular/cdk/drag-drop';
8
- import { AsyncConfigStorage, FormLayout, FieldMetadata, FormLayoutRule, FormRuleTargetType as FormRuleTargetType$1, FormSection, FormRow, FormColumn, FormConfig, FormActionButton, BackConfig, FormHooksLayout, EndpointConfig, FormSubmitEvent, FormReadyEvent, FormValueChangeEvent, SyncResult, FormInitializationError, LoadingState, FormCustomActionEvent, FormActionConfirmationEvent, WidgetDefinition, GenericCrudService, ConnectionStorage, DynamicFormService, ErrorMessageService, SchemaNormalizerService, ComponentMetadataRegistry, GlobalConfigService, ComponentKeyService, LoadingOrchestrator, PraxisLoadingRenderer, FormHooksRegistry, FormHookPreset, LoggerService, FormSectionHeaderAction, FormSectionHeaderConfig, FormConfigState, FieldDefinition, Breakpoint, ComponentDocMeta, IconPickerService, PraxisI18nService, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
8
+ import * as _praxisui_core from '@praxisui/core';
9
+ import { AsyncConfigStorage, FormLayout, FieldMetadata, FormLayoutRule, FormRuleTargetType as FormRuleTargetType$1, FormSection, FormRow, FormColumn, FormConfig, FormActionButton, BackConfig, FormHooksLayout, EndpointConfig, FormSubmitEvent, FormReadyEvent, FormValueChangeEvent, SyncResult, FormInitializationError, LoadingState, FormCustomActionEvent, FormActionConfirmationEvent, WidgetEventEnvelope, WidgetDefinition, GenericCrudService, ConnectionStorage, DynamicFormService, ErrorMessageService, SchemaNormalizerService, ComponentMetadataRegistry, GlobalConfigService, ComponentKeyService, LoadingOrchestrator, PraxisLoadingRenderer, FormHooksRegistry, FormHookPreset, LoggerService, FormSectionHeaderAction, FormSectionHeaderConfig, FormConfigState, FieldDefinition, ComponentDocMeta, Breakpoint, IconPickerService, SurfaceOpenPayload, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
9
10
  import * as rxjs from 'rxjs';
10
11
  import { Observable, BehaviorSubject } from 'rxjs';
11
12
  import { SettingsPanelService, SettingsValueProvider } from '@praxisui/settings-panel';
@@ -53,6 +54,7 @@ interface RuleApplicationResult {
53
54
  columnProps: Record<string, Record<string, any>>;
54
55
  }
55
56
  declare class FormRulesService {
57
+ private normalizeLegacyConditionSyntax;
56
58
  /**
57
59
  * Evaluates a set of form rules against the current value of a FormGroup.
58
60
  *
@@ -491,6 +493,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
491
493
  private hooksRegistry?;
492
494
  private hookPresets?;
493
495
  private logger?;
496
+ private readonly i18n;
494
497
  private readonly DEBUG;
495
498
  resourcePath?: string;
496
499
  resourceId?: string | number;
@@ -503,26 +506,26 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
503
506
  mode: 'create' | 'edit' | 'view';
504
507
  config: FormConfig;
505
508
  /**
506
- * Fonte de schema para construir o formulário.
507
- * 'resource' (padrão) usa o schema do recurso (/{resource}/schemas -> .../all response)
509
+ * Fonte de schema para construir o formulário.
510
+ * 'resource' (padrão) usa o schema do recurso (/{resource}/schemas -> .../all response)
508
511
  * 'filter' usa o schema do DTO de filtro (via /schemas/filtered no POST /filter request)
509
512
  */
510
513
  schemaSource: 'resource' | 'filter';
511
514
  /**
512
- * CUSTOMIZAÇÃO DE LAYOUT - NÃO confundir com edição de dados do formulário
515
+ * CUSTOMIZAÇÃO DE LAYOUT - NÃO confundir com edição de dados do formulário
513
516
  *
514
- * Este flag controla se o usuário pode customizar a ESTRUTURA do formulário:
517
+ * Este flag controla se o usuário pode customizar a ESTRUTURA do formulário:
515
518
  * - Mover sections, rows, columns
516
- * - Configurar layout e aparência
517
- * - Acessar editor de configuração
519
+ * - Configurar layout e aparência
520
+ * - Acessar editor de configuração
518
521
  *
519
- * É INDEPENDENTE do mode (view/edit/create) que controla os DADOS do registro
522
+ * É INDEPENDENTE do mode (view/edit/create) que controla os DADOS do registro
520
523
  *
521
524
  * @example
522
- * // Formulário em modo VIEW de dados + customização HABILITADA
525
+ * // Formulário em modo VIEW de dados + customização HABILITADA
523
526
  * <praxis-dynamic-form mode="view" [enableCustomization]="true">
524
527
  *
525
- * // Formulário em modo EDIT de dados + customização DESABILITADA
528
+ * // Formulário em modo EDIT de dados + customização DESABILITADA
526
529
  * <praxis-dynamic-form mode="edit" [enableCustomization]="false">
527
530
  */
528
531
  enableCustomization: boolean;
@@ -581,11 +584,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
581
584
  /** Forwarded from DynamicFieldLoader to allow host-side observability. */
582
585
  fieldRenderError: EventEmitter<DynamicFieldRenderErrorEvent>;
583
586
  /** Re-emits events from editorial widgets hosted before, before actions, or after the form. */
584
- widgetEvent: EventEmitter<{
587
+ widgetEvent: EventEmitter<WidgetEventEnvelope & {
585
588
  placement: "before" | "beforeActions" | "after";
586
- sourceId: string;
587
- output?: string;
588
- payload?: any;
589
589
  }>;
590
590
  isLoading: boolean;
591
591
  submitting: boolean;
@@ -641,11 +641,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
641
641
  * In-place mutations do not invalidate the cached merged context snapshot.
642
642
  */
643
643
  getEditorialWidgetContext(): Record<string, unknown>;
644
- onEditorialWidgetEvent(placement: 'before' | 'beforeActions' | 'after', event: {
645
- sourceId: string;
646
- output?: string;
647
- payload?: any;
648
- }): void;
644
+ onEditorialWidgetEvent(placement: 'before' | 'beforeActions' | 'after', event: WidgetEventEnvelope): void;
649
645
  private reactiveValidate$?;
650
646
  private warnedMissingId;
651
647
  private schemaState;
@@ -685,6 +681,7 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
685
681
  private hasMountedAnimation;
686
682
  private mountAnimationTimer;
687
683
  protected isMounting: boolean;
684
+ private hasBuiltFormFromConfig;
688
685
  constructor(crud: GenericCrudService<any>, fb: FormBuilder, cdr: ChangeDetectorRef, layoutService: FormLayoutService, contextService: FormContextService, rulesService: FormRulesService, settingsPanel: SettingsPanelService, dialog: MatDialog, asyncConfigStorage: AsyncConfigStorage, connectionStorage: ConnectionStorage, dynamicForm: DynamicFormService, snackBar: MatSnackBar, canvasState: CanvasStateService, dynamicLayout: DynamicFormLayoutService, errorMessages: ErrorMessageService, schemaNormalizer: SchemaNormalizerService, componentMetaRegistry: ComponentMetadataRegistry, global: GlobalConfigService, componentKeys: ComponentKeyService, loadingOrchestrator: LoadingOrchestrator, loadingRenderer?: PraxisLoadingRenderer | undefined, router?: Router | undefined, route?: ActivatedRoute | undefined, hooksRegistry?: FormHooksRegistry | undefined, hookPresets?: FormHookPreset[] | null | undefined, logger?: LoggerService | undefined);
689
686
  private emitLoadingState;
690
687
  private buildLoadingContext;
@@ -701,6 +698,8 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
701
698
  private formInputsKey;
702
699
  private crudBackKey;
703
700
  private tryInitializeForm;
701
+ private hasRenderableConfig;
702
+ private initializeStandaloneConfig;
704
703
  private reloadForModeChange;
705
704
  ngOnInit(): void;
706
705
  ngOnChanges(changes: SimpleChanges): void;
@@ -813,13 +812,13 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
813
812
  private navigateAfterSave;
814
813
  private shouldConfirmCancelOnDirty;
815
814
  /**
816
- * TOGGLE DE CUSTOMIZAÇÃO DE LAYOUT - NÃO É EDIÇÃO DE DADOS
815
+ * TOGGLE DE CUSTOMIZAÇÃO DE LAYOUT - NÃO É EDIÇÃO DE DADOS
817
816
  *
818
- * Este método alterna entre:
819
- * - Modo normal: Usuário interage com dados do formulário (conforme mode: view/edit/create)
820
- * - Modo customização: Usuário pode mover sections/rows/columns e configurar layout
817
+ * Este método alterna entre:
818
+ * - Modo normal: Usuário interage com dados do formulário (conforme mode: view/edit/create)
819
+ * - Modo customização: Usuário pode mover sections/rows/columns e configurar layout
821
820
  *
822
- * IMPORTANTE: Independe completamente do mode do formulário
821
+ * IMPORTANTE: Independe completamente do mode do formulário
823
822
  */
824
823
  toggleEditMode(): void;
825
824
  openConfigEditor(): Promise<void>;
@@ -867,10 +866,11 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
867
866
  private openRowEditor;
868
867
  private openColumnEditor;
869
868
  openSectionEditor(section: any, focusTarget?: 'title' | 'description'): void;
869
+ private resolveControlTypeEditorial;
870
870
  private getControlTypeIcon;
871
871
  /**
872
- * Friendly control type name resolved from ComponentMetadataRegistry when available.
873
- * Falls back to a local map only when there is no registered metadata.
872
+ * Friendly control type name resolved from the canonical editorial resolver when available.
873
+ * Falls back only to neutral technical defaults when nothing can be resolved.
874
874
  */
875
875
  private getControlTypeName;
876
876
  private applyNullDeletionPatch;
@@ -1171,6 +1171,7 @@ declare class PraxisFilterForm implements OnChanges, OnDestroy {
1171
1171
  private buildForm;
1172
1172
  onFormSubmit(): void;
1173
1173
  getColumnFields(column: FormColumn): FieldMetadata[];
1174
+ get fieldMetadata(): FieldMetadata[];
1174
1175
  get hasLayout(): boolean;
1175
1176
  trackBySection(i: number, section: FormSection): string;
1176
1177
  trackByRow(i: number, _row: FormRow): string;
@@ -1179,6 +1180,11 @@ declare class PraxisFilterForm implements OnChanges, OnDestroy {
1179
1180
  static ɵcmp: i0.ɵɵComponentDeclaration<PraxisFilterForm, "praxis-filter-form", never, { "config": { "alias": "config"; "required": true; }; "formId": { "alias": "formId"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; }, { "formReady": "formReady"; "valueChange": "valueChange"; "submit": "submit"; "requestSearch": "requestSearch"; "validityChange": "validityChange"; }, never, never, true, never>;
1180
1181
  }
1181
1182
 
1183
+ /** Metadata for PraxisFilterForm component */
1184
+ declare const PRAXIS_FILTER_FORM_COMPONENT_METADATA: ComponentDocMeta;
1185
+ /** Provider to register PraxisFilterForm metadata. */
1186
+ declare function providePraxisFilterFormMetadata(): Provider;
1187
+
1182
1188
  /** Tokens for theme colors used across the layout editor. */
1183
1189
  declare enum LayoutColorToken {
1184
1190
  Surface = "--md-sys-color-surface",
@@ -1352,10 +1358,8 @@ declare class RowConfiguratorComponent implements OnChanges {
1352
1358
  declare class FieldConfiguratorComponent {
1353
1359
  private readonly registry;
1354
1360
  field: FieldMetadata;
1355
- private readonly controlTypeMap;
1356
1361
  private readonly categoryByType;
1357
- private readonly fallbackInfo;
1358
- get meta(): ComponentDocMeta | undefined;
1362
+ private resolveEditorialMeta;
1359
1363
  get icon(): string;
1360
1364
  get typeClass(): string;
1361
1365
  get typeSpecificClass(): string;
@@ -1458,6 +1462,19 @@ declare class CanvasToolbarComponent {
1458
1462
  static ɵcmp: i0.ɵɵComponentDeclaration<CanvasToolbarComponent, "praxis-canvas-toolbar", never, { "selectedElement": { "alias": "selectedElement"; "required": false; }; }, { "editMetadata": "editMetadata"; "delete": "delete"; "moveUp": "moveUp"; "moveDown": "moveDown"; "selectPath": "selectPath"; "requestClose": "requestClose"; "toggleReadonly": "toggleReadonly"; "toggleRequired": "toggleRequired"; "toggleHidden": "toggleHidden"; "toggleDisabled": "toggleDisabled"; }, never, never, true, never>;
1459
1463
  }
1460
1464
 
1465
+ type ActionCatalogOption = {
1466
+ id: string;
1467
+ label: string;
1468
+ description?: string;
1469
+ param?: {
1470
+ required?: boolean;
1471
+ label?: string;
1472
+ placeholder?: string;
1473
+ hint?: string;
1474
+ example?: string;
1475
+ };
1476
+ };
1477
+
1461
1478
  interface EditableFormSection extends FormSection {
1462
1479
  sectionHeader?: FormSectionHeaderConfig;
1463
1480
  appearance?: 'card' | 'plain' | 'step';
@@ -1488,7 +1505,6 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
1488
1505
  private fb;
1489
1506
  private data;
1490
1507
  private iconPicker;
1491
- private i18n;
1492
1508
  focusTarget?: 'title' | 'description';
1493
1509
  fieldMetadata: FieldMetadata[];
1494
1510
  section: EditableFormSection;
@@ -1501,19 +1517,42 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
1501
1517
  isDirty$: BehaviorSubject<boolean>;
1502
1518
  isValid$: BehaviorSubject<boolean>;
1503
1519
  isBusy$: BehaviorSubject<boolean>;
1520
+ private readonly globalActionCatalogSource;
1521
+ private readonly i18n;
1522
+ readonly legacyActionSpecs: _praxisui_core.GlobalActionSpec[];
1523
+ readonly globalActionCatalog: ActionCatalogOption[];
1524
+ readonly customActionValue = "__custom__";
1504
1525
  private destroy$;
1505
1526
  titleInput?: ElementRef<HTMLInputElement>;
1506
1527
  descriptionInput?: ElementRef<HTMLTextAreaElement>;
1507
1528
  constructor(fb: FormBuilder, data: {
1508
1529
  section: EditableFormSection;
1509
1530
  fieldMetadata?: FieldMetadata[];
1510
- }, iconPicker: IconPickerService, i18n: PraxisI18nService);
1531
+ }, iconPicker: IconPickerService);
1511
1532
  ngOnInit(): void;
1512
1533
  ngAfterViewInit(): void;
1513
1534
  ngOnDestroy(): void;
1514
1535
  getSettingsValue(): any;
1515
1536
  get headerActionsArray(): FormArray;
1516
1537
  getHeaderActionStylePlaceholder(): string;
1538
+ getActionCatalogLabel(spec: {
1539
+ label?: string;
1540
+ }): string;
1541
+ getHeaderActionSpecById(id: string): ActionCatalogOption | undefined;
1542
+ getHeaderActionSelectValue(value?: string): string;
1543
+ getHeaderActionParam(value?: string): string;
1544
+ getHeaderActionCustomValue(value?: string): string;
1545
+ getHeaderGlobalActionSchema(value?: string): _praxisui_core.GlobalActionUiSchema | undefined;
1546
+ getHeaderSurfaceOpenActionPayload(value?: string): SurfaceOpenPayload;
1547
+ isHeaderActionParamMissing(value?: string): boolean;
1548
+ onHeaderActionSelectChange(index: number, value: string): void;
1549
+ onHeaderActionParamChange(index: number, value: string): void;
1550
+ onHeaderActionCustomChange(index: number, value: string): void;
1551
+ pickHeaderActionIcon(index: number): Promise<void>;
1552
+ clearHeaderActionIcon(index: number): void;
1553
+ applyHeaderActionStylePreset(index: number, preset: 'default' | 'soft-pill' | 'primary-pill' | 'critical-pill'): void;
1554
+ getHeaderActionPreviewStyles(index: number): Record<string, any> | null;
1555
+ onHeaderSurfaceOpenActionPayloadChange(index: number, payload: SurfaceOpenPayload): void;
1517
1556
  pickIcon(): Promise<void>;
1518
1557
  clearIcon(): void;
1519
1558
  pickFallbackIcon(): Promise<void>;
@@ -1537,6 +1576,8 @@ declare class SectionEditorComponent implements OnInit, AfterViewInit, OnDestroy
1537
1576
  private createHeaderActionGroup;
1538
1577
  private moveHeaderAction;
1539
1578
  private normalizeHeaderActions;
1579
+ private mapCatalogEntryToActionSpec;
1580
+ private getActionCatalogDescription;
1540
1581
  private headerActionStyleValidator;
1541
1582
  private stringifyHeaderActionStyle;
1542
1583
  private parseHeaderActionStyle;
@@ -1817,5 +1858,5 @@ declare const FORM_COMPONENT_AI_CAPABILITIES: CapabilityCatalog;
1817
1858
  */
1818
1859
  declare function getFormAiCatalog(formConfig?: FormConfig): AiCapabilityCatalog;
1819
1860
 
1820
- export { ActionsEditorComponent, CanvasStateService, CanvasToolbarComponent, ColumnEditorComponent, DynamicFormLayoutService, FORM_AI_CAPABILITIES, FORM_COMPONENT_AI_CAPABILITIES, FieldConfiguratorComponent, FieldEditorComponent, FormConfigService, FormContextService, FormLayoutService, JsonConfigEditorComponent, LayoutColorToken, LayoutEditorComponent, LayoutPrefsService, PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA, PraxisDynamicForm, PraxisDynamicFormConfigEditor, PraxisFilterForm, PraxisFormActionsComponent, RowConfiguratorComponent, RowEditorComponent, SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER, SectionEditorComponent, TASK_PRESETS, applyVisibilityRules, buildDynamicFormApplyPlan, createDynamicFormAuthoringDocument, formLayoutRulesToBuilderState, getFormAiCatalog, getFormCapabilities, getFormEnum, isRuleSatisfied, normalizeDateArrays, normalizeDynamicFormAuthoringDocument, parseLegacyOrDynamicFormDocument, providePraxisDynamicFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput };
1861
+ export { ActionsEditorComponent, CanvasStateService, CanvasToolbarComponent, ColumnEditorComponent, DynamicFormLayoutService, FORM_AI_CAPABILITIES, FORM_COMPONENT_AI_CAPABILITIES, FieldConfiguratorComponent, FieldEditorComponent, FormConfigService, FormContextService, FormLayoutService, JsonConfigEditorComponent, LayoutColorToken, LayoutEditorComponent, LayoutPrefsService, PRAXIS_DYNAMIC_FORM_COMPONENT_METADATA, PRAXIS_FILTER_FORM_COMPONENT_METADATA, PraxisDynamicForm, PraxisDynamicFormConfigEditor, PraxisFilterForm, PraxisFormActionsComponent, RowConfiguratorComponent, RowEditorComponent, SETTINGS_PANEL_DYNAMIC_FORM_PROVIDER, SectionEditorComponent, TASK_PRESETS, applyVisibilityRules, buildDynamicFormApplyPlan, createDynamicFormAuthoringDocument, formLayoutRulesToBuilderState, getFormAiCatalog, getFormCapabilities, getFormEnum, isRuleSatisfied, normalizeDateArrays, normalizeDynamicFormAuthoringDocument, parseLegacyOrDynamicFormDocument, providePraxisDynamicFormMetadata, providePraxisFilterFormMetadata, provideSettingsPanelDynamicForm, ruleBuilderStateToFormLayoutRules, serializeDynamicFormAuthoringDocument, stripLegacyFieldMetadata, toCanonicalDynamicFormConfig, validateDynamicFormAuthoringDocument, validateDynamicFormAuthoringInput };
1821
1862
  export type { CanvasElement, CanvasElementType, CanvasPathPart, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, DynamicFieldRenderErrorEvent, DynamicFormApplyPlan, DynamicFormAuthoringDocument, DynamicFormBindings, DynamicFormContextSnapshot, DynamicFormMode, DynamicFormPresentationSnapshot, DynamicFormProjectionContext, DynamicFormRuntimeContext, DynamicFormSchemaPrefsSnapshot, DynamicFormValidationContext, EditorDiagnostic, EditorDocument, FieldPath, FieldPathContainer, FieldPathWithIndex, Capability as FormComponentCapability, CapabilityCatalog as FormComponentCapabilityCatalog, CapabilityCategory as FormComponentCapabilityCategory, ValueKind as FormComponentValueKind, FormConfigLike, IdPath, JsonEditorEvent, JsonValidationResult, LayoutChange, LayoutResult, Operation, Path, PathWithIndex, PraxisFormActionEvent, RemovePolicy, ValidationReport, ValueKind$1 as ValueKind };
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@praxisui/dynamic-form",
3
- "version": "3.0.0-beta.7",
3
+ "version": "3.0.0-beta.9",
4
4
  "description": "Angular dynamic form engine for Praxis UI: metadata-driven forms, hooks, and services integrating @praxisui/* packages.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^20.0.0",
7
7
  "@angular/core": "^20.0.0",
8
8
  "@angular/cdk": "^20.0.0",
9
- "@praxisui/settings-panel": "^3.0.0-beta.7",
10
- "@praxisui/visual-builder": "^3.0.0-beta.7",
11
- "@praxisui/specification-core": "^3.0.0-beta.7",
12
- "@praxisui/specification": "^3.0.0-beta.7",
13
- "@praxisui/core": "^3.0.0-beta.7",
14
- "@praxisui/cron-builder": "^3.0.0-beta.7"
9
+ "@praxisui/settings-panel": "^3.0.0-beta.9",
10
+ "@praxisui/visual-builder": "^3.0.0-beta.9",
11
+ "@praxisui/specification-core": "^3.0.0-beta.9",
12
+ "@praxisui/specification": "^3.0.0-beta.9",
13
+ "@praxisui/core": "^3.0.0-beta.9",
14
+ "@praxisui/cron-builder": "^3.0.0-beta.9"
15
15
  },
16
16
  "dependencies": {
17
17
  "tslib": "^2.3.0",