@praxisui/dynamic-form 8.0.0-beta.11 → 8.0.0-beta.12

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
@@ -7,7 +7,7 @@ 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, GlobalActionCatalogEntry, FieldDefinition, ComponentDocMeta, Breakpoint, IconPickerService, GlobalActionRef, SurfaceOpenPayload, AiCapabilityCategory, AiValueKind, AiCapabilityCatalog, ComponentAuthoringManifest } from '@praxisui/core';
10
+ import { AsyncConfigStorage, FormLayout, FieldMetadata, FormLayoutRule, FormRuleTargetType as FormRuleTargetType$1, PraxisJsonLogicService, FormSection, FormRow, FormColumn, FormConfig, FormLayoutItem, 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, GlobalActionCatalogEntry, FieldDefinition, ComponentDocMeta, Breakpoint, 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';
@@ -96,6 +96,7 @@ interface Operation {
96
96
  sectionId?: string;
97
97
  rowId?: string;
98
98
  columnId?: string;
99
+ itemId?: string;
99
100
  fieldName?: string;
100
101
  sectionIndex?: number;
101
102
  rowIndex?: number;
@@ -106,6 +107,7 @@ interface Operation {
106
107
  sectionId?: string;
107
108
  rowId?: string;
108
109
  columnId?: string;
110
+ itemId?: string;
109
111
  fieldName?: string;
110
112
  sectionIndex?: number;
111
113
  rowIndex?: number;
@@ -178,6 +180,14 @@ declare class DynamicFormLayoutService {
178
180
  private capitalizeFirstLetter;
179
181
  private assertIndex;
180
182
  private mutate;
183
+ private getFieldName;
184
+ private findFieldLayoutItemIndex;
185
+ private getLayoutInsertIndexForFieldIndex;
186
+ private applyLayoutItemsToColumn;
187
+ private insertFieldLayoutItem;
188
+ private removeFieldLayoutItem;
189
+ private hasLayoutItems;
190
+ private moveFieldLayoutItem;
181
191
  moveSection(config: FormConfig, fromIndex: number, toIndex: number): LayoutResult;
182
192
  insertSection(config: FormConfig, section: any, atIndex?: number): LayoutResult;
183
193
  removeSection(config: FormConfig, index: number, _policy?: RemovePolicy): LayoutResult;
@@ -235,6 +245,37 @@ declare class DynamicFormLayoutService {
235
245
  rowId: string;
236
246
  columnId: string;
237
247
  }, field: any, atIndex?: number): LayoutResult;
248
+ insertLayoutItemById(config: FormConfig, target: {
249
+ sectionId: string;
250
+ rowId: string;
251
+ columnId: string;
252
+ }, item: FormLayoutItem, atIndex?: number): LayoutResult;
253
+ moveLayoutItemById(config: FormConfig, from: {
254
+ sectionId: string;
255
+ rowId: string;
256
+ columnId: string;
257
+ itemId: string;
258
+ }, to: {
259
+ sectionId: string;
260
+ rowId: string;
261
+ columnId: string;
262
+ toIndex: number;
263
+ }, options?: {
264
+ policy?: RemovePolicy;
265
+ correlationId?: string;
266
+ origin?: string;
267
+ }): LayoutResult;
268
+ updateLayoutItemById(config: FormConfig, target: {
269
+ sectionId: string;
270
+ rowId: string;
271
+ columnId: string;
272
+ itemId: string;
273
+ }, item: FormLayoutItem): LayoutResult;
274
+ removeLayoutItemById(config: FormConfig, sectionId: string, rowId: string, columnId: string, itemId: string, options?: {
275
+ policy?: RemovePolicy;
276
+ correlationId?: string;
277
+ origin?: string;
278
+ }): LayoutResult;
238
279
  removeFieldById(config: FormConfig, sectionId: string, rowId: string, columnId: string, fieldName: string, options?: {
239
280
  policy?: RemovePolicy;
240
281
  correlationId?: string;
@@ -507,6 +548,19 @@ type ResolvedSectionHeaderVisual = {
507
548
  text?: string;
508
549
  ariaLabel: string;
509
550
  };
551
+ interface FormColumnFieldsRenderItem {
552
+ kind: 'fields';
553
+ id: string;
554
+ fields: FieldMetadata[];
555
+ }
556
+ interface FormColumnRichContentRenderItem {
557
+ kind: 'richContent';
558
+ id: string;
559
+ document: RichContentDocument;
560
+ layout: 'block' | 'inline';
561
+ rootClassName?: string | null;
562
+ }
563
+ type FormColumnRenderItem = FormColumnFieldsRenderItem | FormColumnRichContentRenderItem;
510
564
  declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
511
565
  private crud;
512
566
  private http;
@@ -890,11 +944,17 @@ declare class PraxisDynamicForm implements OnInit, OnChanges, OnDestroy {
890
944
  toggleSectionCollapse(event: Event, section: FormSection): void;
891
945
  sectionPanelId(section: FormSection, index: number): string;
892
946
  getSectionCollapsedSummary(section: FormSection): string;
947
+ getColumnItems(column: FormColumn): FormLayoutItem[];
948
+ getColumnRenderItems(column: FormColumn): FormColumnRenderItem[];
893
949
  getColumnFields(column: {
894
- fields: string[];
950
+ fields?: string[];
951
+ items?: FormLayoutItem[];
895
952
  id?: string;
896
953
  }): FieldMetadata[];
954
+ getRichContentLayoutItemDocument(item: FormLayoutItem): RichContentDocument | null;
955
+ getRichContentLayoutItemLayout(item: FormLayoutItem): 'block' | 'inline';
897
956
  private getColumnFieldsSignature;
957
+ private getColumnItemsSignature;
898
958
  private getColumnRuleProps;
899
959
  private buildFieldRuleMetadataOverrides;
900
960
  private normalizeRuleFieldOptions;
@@ -1335,11 +1395,42 @@ declare class LayoutPrefsService {
1335
1395
  static ɵprov: i0.ɵɵInjectableDeclaration<LayoutPrefsService>;
1336
1396
  }
1337
1397
 
1398
+ type VisualBlockPresetId = 'text' | 'notice' | 'divider' | 'infoCard';
1399
+ interface VisualBlockPreset {
1400
+ id: VisualBlockPresetId;
1401
+ labelKey: string;
1402
+ icon: string;
1403
+ }
1404
+
1338
1405
  interface FieldDropEvent {
1339
1406
  event: CdkDragDrop<any>;
1340
1407
  sectionIndex: number;
1341
1408
  rowIndex: number;
1342
1409
  }
1410
+ interface VisualBlockEvent {
1411
+ sectionIndex: number;
1412
+ rowIndex: number;
1413
+ columnIndex: number;
1414
+ itemId: string;
1415
+ }
1416
+ interface AddVisualBlockEvent {
1417
+ sectionIndex: number;
1418
+ rowIndex: number;
1419
+ columnIndex: number;
1420
+ presetId: VisualBlockPresetId;
1421
+ }
1422
+ interface AddApiFieldEvent {
1423
+ sectionIndex: number;
1424
+ rowIndex: number;
1425
+ columnIndex: number;
1426
+ fieldName: string;
1427
+ }
1428
+ interface MoveVisualBlockEvent extends VisualBlockEvent {
1429
+ direction: -1 | 1;
1430
+ }
1431
+ interface MoveVisualBlockToColumnEvent extends VisualBlockEvent {
1432
+ targetColumnIndex: number;
1433
+ }
1343
1434
  /**
1344
1435
  * Editor component for configuring sections, rows and fields of a dynamic form.
1345
1436
  * Provides a collapsible palette of available fields.
@@ -1349,13 +1440,18 @@ declare class LayoutEditorComponent implements OnInit {
1349
1440
  configChange: EventEmitter<FormConfig>;
1350
1441
  paletteCollapsed: boolean;
1351
1442
  protected readonly prefs: LayoutPrefsService;
1443
+ private readonly layoutService;
1444
+ private readonly settingsPanel;
1445
+ private readonly i18n;
1446
+ private visualBlockIdSequence;
1352
1447
  protected readonly colorTokens: typeof LayoutColorToken;
1353
1448
  selected: {
1354
- type: 'section' | 'row' | 'column' | 'field';
1449
+ type: 'section' | 'row' | 'column' | 'field' | 'visualBlock';
1355
1450
  sectionIndex?: number;
1356
1451
  rowIndex?: number;
1357
1452
  columnIndex?: number;
1358
1453
  fieldName?: string;
1454
+ itemId?: string;
1359
1455
  } | null;
1360
1456
  gapGlobal: number;
1361
1457
  setGapGlobal(val: number | string): void;
@@ -1380,6 +1476,7 @@ declare class LayoutEditorComponent implements OnInit {
1380
1476
  * Fields that are not yet placed in any section/column of the layout.
1381
1477
  */
1382
1478
  get availableFields(): FieldMetadata[];
1479
+ t(key: string, params?: Record<string, string | number | boolean | null | undefined>): string;
1383
1480
  get columnDropListIds(): string[];
1384
1481
  getColumnId(sectionIndex: number, rowIndex: number, columnIndex: number): string;
1385
1482
  private parseColumnId;
@@ -1390,10 +1487,24 @@ declare class LayoutEditorComponent implements OnInit {
1390
1487
  selectRow(sectionIndex: number, rowIndex: number): void;
1391
1488
  selectColumn(sectionIndex: number, rowIndex: number, columnIndex: number): void;
1392
1489
  dropField({ event }: FieldDropEvent): void;
1490
+ private getColumnTargetByIndex;
1491
+ private getLayoutItemTargetByIndex;
1393
1492
  dropSection(event: CdkDragDrop<FormSection[]>): void;
1394
1493
  addSection(): void;
1395
1494
  removeSection(index: number): void;
1396
1495
  onSectionUpdated(index: number, updatedSection: FormSection): void;
1496
+ addVisualBlockToColumn(event: AddVisualBlockEvent): void;
1497
+ private createVisualBlockItemId;
1498
+ addApiFieldToColumn(event: AddApiFieldEvent): void;
1499
+ openVisualBlockEditor(event: {
1500
+ sectionIndex: number;
1501
+ rowIndex: number;
1502
+ columnIndex: number;
1503
+ itemId: string;
1504
+ }): void;
1505
+ moveVisualBlock(event: MoveVisualBlockEvent): void;
1506
+ moveVisualBlockToColumn(event: MoveVisualBlockToColumnEvent): void;
1507
+ removeVisualBlock(event: VisualBlockEvent): void;
1397
1508
  private emitNewConfig;
1398
1509
  onApplyStyleToAll(patch: Partial<FormSection>): void;
1399
1510
  trackBySection(index: number, s: FormSection & {
@@ -1406,15 +1517,17 @@ declare class LayoutEditorComponent implements OnInit {
1406
1517
  declare class RowConfiguratorComponent implements OnChanges {
1407
1518
  row: FormRow;
1408
1519
  fieldMetadata: FieldMetadata[];
1520
+ availableFields: FieldMetadata[];
1409
1521
  sectionIndex: number;
1410
1522
  rowIndex: number;
1411
1523
  isLastRow: boolean;
1412
1524
  selected: {
1413
- type: 'section' | 'row' | 'column' | 'field';
1525
+ type: 'section' | 'row' | 'column' | 'field' | 'visualBlock';
1414
1526
  sectionIndex?: number;
1415
1527
  rowIndex?: number;
1416
1528
  columnIndex?: number;
1417
1529
  fieldName?: string;
1530
+ itemId?: string;
1418
1531
  } | null;
1419
1532
  availableFieldsListId: string | null;
1420
1533
  connectedDropListIds: string[];
@@ -1424,8 +1537,42 @@ declare class RowConfiguratorComponent implements OnChanges {
1424
1537
  remove: EventEmitter<void>;
1425
1538
  applyRowGapAll: EventEmitter<number>;
1426
1539
  fieldDrop: EventEmitter<CdkDragDrop<any, any, any>>;
1540
+ addVisualBlock: EventEmitter<{
1541
+ rowIndex: number;
1542
+ columnIndex: number;
1543
+ presetId: VisualBlockPresetId;
1544
+ }>;
1545
+ addApiField: EventEmitter<{
1546
+ rowIndex: number;
1547
+ columnIndex: number;
1548
+ fieldName: string;
1549
+ }>;
1550
+ editVisualBlock: EventEmitter<{
1551
+ rowIndex: number;
1552
+ columnIndex: number;
1553
+ itemId: string;
1554
+ }>;
1555
+ moveVisualBlock: EventEmitter<{
1556
+ rowIndex: number;
1557
+ columnIndex: number;
1558
+ itemId: string;
1559
+ direction: -1 | 1;
1560
+ }>;
1561
+ moveVisualBlockToColumn: EventEmitter<{
1562
+ rowIndex: number;
1563
+ columnIndex: number;
1564
+ targetColumnIndex: number;
1565
+ itemId: string;
1566
+ }>;
1567
+ removeVisualBlock: EventEmitter<{
1568
+ rowIndex: number;
1569
+ columnIndex: number;
1570
+ itemId: string;
1571
+ }>;
1427
1572
  select: EventEmitter<any>;
1428
1573
  activeDropIndex: number | null;
1574
+ protected readonly visualBlockPresets: readonly VisualBlockPreset[];
1575
+ private readonly i18n;
1429
1576
  private hoverTimer;
1430
1577
  protected readonly breakpoints: Breakpoint[];
1431
1578
  previewBreakpoint: Breakpoint;
@@ -1438,6 +1585,19 @@ declare class RowConfiguratorComponent implements OnChanges {
1438
1585
  ngOnChanges(changes: SimpleChanges): void;
1439
1586
  private rebuildConnectedColumnsCache;
1440
1587
  getFieldByName(fieldName: string): FieldMetadata;
1588
+ getColumnLayoutItems(column: FormColumn): FormLayoutItem[];
1589
+ hasColumnContent(column: FormColumn): boolean;
1590
+ getVisualBlockLabel(item: FormLayoutItem): string;
1591
+ private findRichContentLabel;
1592
+ private findRichNodeLabel;
1593
+ t(key: string, params?: Record<string, string | number | boolean | null | undefined>): string;
1594
+ getFieldLabel(field: FieldMetadata): string;
1595
+ selectVisualBlock(columnIndex: number, item: FormLayoutItem, event: MouseEvent): void;
1596
+ openVisualBlockEditor(columnIndex: number, item: FormLayoutItem, event: MouseEvent): void;
1597
+ moveVisualBlockItem(columnIndex: number, item: FormLayoutItem, direction: -1 | 1, event: MouseEvent): void;
1598
+ canMoveVisualBlockToColumn(columnIndex: number, direction: -1 | 1): boolean;
1599
+ moveVisualBlockToAdjacentColumn(columnIndex: number, item: FormLayoutItem, direction: -1 | 1, event: MouseEvent): void;
1600
+ removeVisualBlockItem(columnIndex: number, item: FormLayoutItem, event: MouseEvent): void;
1441
1601
  drop(event: CdkDragDrop<string[]>): void;
1442
1602
  selectRow(): void;
1443
1603
  openColumnConfig(index: number): void;
@@ -1456,6 +1616,8 @@ declare class RowConfiguratorComponent implements OnChanges {
1456
1616
  removeRow(): void;
1457
1617
  moveColumn(index: number, direction: number): void;
1458
1618
  clearColumn(index: number): void;
1619
+ addVisualBlockToColumn(index: number, presetId: VisualBlockPresetId): void;
1620
+ addApiFieldToColumn(index: number, fieldName: string): void;
1459
1621
  addFieldToColumn(index: number): void;
1460
1622
  getColumnId(index: number): string;
1461
1623
  private generateId;
@@ -1479,7 +1641,7 @@ declare class RowConfiguratorComponent implements OnChanges {
1479
1641
  adjustOffset(columnIndex: number, delta: number): void;
1480
1642
  getSuggestedSpan(columnIndex: number): number | null;
1481
1643
  static ɵfac: i0.ɵɵFactoryDeclaration<RowConfiguratorComponent, never>;
1482
- 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>;
1644
+ 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"; "editVisualBlock": "editVisualBlock"; "moveVisualBlock": "moveVisualBlock"; "moveVisualBlockToColumn": "moveVisualBlockToColumn"; "removeVisualBlock": "removeVisualBlock"; "select": "select"; }, never, never, true, never>;
1483
1645
  }
1484
1646
 
1485
1647
  declare class FieldConfiguratorComponent {
@@ -1990,7 +2152,7 @@ declare function getFormAiCatalog(formConfig?: FormConfig): AiCapabilityCatalog;
1990
2152
  * Manifesto de authoring canônico para o componente praxis-dynamic-form.
1991
2153
  * Este arquivo define as operações permitidas pela IA para editar formulários.
1992
2154
  *
1993
- * @version 1.4.0
2155
+ * @version 1.5.0
1994
2156
  * @status COMPLIANT - Alinhado com contrato v2, gate de aceitação e semântica local/schema-backed.
1995
2157
  */
1996
2158
  declare const PRAXIS_DYNAMIC_FORM_AUTHORING_MANIFEST: ComponentAuthoringManifest;
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@praxisui/dynamic-form",
3
- "version": "8.0.0-beta.11",
3
+ "version": "8.0.0-beta.12",
4
4
  "description": "Angular dynamic form engine for Praxis UI: metadata-driven forms, hooks, and services integrating @praxisui/* packages.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^20.0.0",
7
7
  "@angular/core": "^20.0.0",
8
8
  "@angular/cdk": "^20.0.0",
9
- "@praxisui/rich-content": "^8.0.0-beta.11",
10
- "@praxisui/settings-panel": "^8.0.0-beta.11",
11
- "@praxisui/visual-builder": "^8.0.0-beta.11",
12
- "@praxisui/core": "^8.0.0-beta.11",
13
- "@praxisui/cron-builder": "^8.0.0-beta.11"
9
+ "@praxisui/rich-content": "^8.0.0-beta.12",
10
+ "@praxisui/settings-panel": "^8.0.0-beta.12",
11
+ "@praxisui/visual-builder": "^8.0.0-beta.12",
12
+ "@praxisui/core": "^8.0.0-beta.12",
13
+ "@praxisui/cron-builder": "^8.0.0-beta.12"
14
14
  },
15
15
  "dependencies": {
16
16
  "tslib": "^2.3.0",