@praxisui/table 8.0.0-beta.2 → 8.0.0-beta.20

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.
Files changed (37) hide show
  1. package/README.md +81 -8
  2. package/docs/DSL-Extensions-Guide.md +23 -0
  3. package/docs/adr/2026-03-dynamic-filter-cross-lib-coupling.md +107 -0
  4. package/docs/adr/2026-03-filter-drawer-adapter-light-entrypoint.md +105 -0
  5. package/docs/adr/2026-03-table-editor-idfield-decision.md +85 -0
  6. package/docs/column-resize-reorder-implementation-plan.md +338 -0
  7. package/docs/column-resize-reorder-review-prompt.md +34 -0
  8. package/docs/dynamic-filter-architecture-overview.md +207 -0
  9. package/docs/dynamic-filter-backend-contract-cheatsheet.md +167 -0
  10. package/docs/dynamic-filter-editor-settings-guide.md +229 -0
  11. package/docs/dynamic-filter-host-integration-guide.md +217 -0
  12. package/docs/dynamic-filter-payload-contract.md +331 -0
  13. package/docs/dynamic-filter-range-filters-guide.md +289 -0
  14. package/docs/dynamic-filter-troubleshooting-guide.md +220 -0
  15. package/docs/dynamic-inline-filter-catalog.md +147 -0
  16. package/docs/e2e-column-drag-playwright.md +62 -0
  17. package/docs/expandable-rows-enterprise-big-leagues-plan.md +1080 -0
  18. package/docs/json-logic-operators-and-helpers.md +57 -0
  19. package/docs/local-data-mode-precedence.md +12 -0
  20. package/docs/local-data-pre-implementation-baseline.md +22 -0
  21. package/docs/local-data-preimplementation-go-no-go.md +39 -0
  22. package/docs/local-data-support-implementation-plan.md +524 -0
  23. package/docs/local-data-support-pr-package.md +66 -0
  24. package/docs/localization-persistence-merge.md +22 -0
  25. package/docs/performance-hardening-v2-implementation-plan.md +479 -0
  26. package/docs/playground-scenario-curation-plan.md +482 -0
  27. package/docs/playground-scenario-second-opinion-prompt.md +121 -0
  28. package/docs/playground-scenario-second-opinion-review.md +234 -0
  29. package/docs/release-notes-p1-hardening.md +76 -0
  30. package/docs/table-authoring-document-completeness-checklist.md +120 -0
  31. package/docs/table-editor-capability-review-prompt.md +349 -0
  32. package/docs/visual-rules-editor-transition.md +29 -0
  33. package/fesm2022/{praxisui-table-table-ai.adapter-DxjDaQqy.mjs → praxisui-table-table-ai.adapter-fS74fZ7o.mjs} +14 -5
  34. package/fesm2022/praxisui-table.mjs +3650 -324
  35. package/index.d.ts +120 -51
  36. package/package.json +15 -9
  37. package/src/lib/praxis-table.json-api.md +1315 -0
package/index.d.ts CHANGED
@@ -10,7 +10,7 @@ import { CdkDragDrop, CdkDragEnd, CdkDrag, CdkDropList } from '@angular/cdk/drag
10
10
  import { BehaviorSubject, Subscription, Observable } from 'rxjs';
11
11
  import { SettingsPanelService, SettingsValueProvider } from '@praxisui/settings-panel';
12
12
  import * as _praxisui_core from '@praxisui/core';
13
- import { TableConfig, LoggerService, PraxisI18nService, GlobalConfigService, AsyncConfigStorage, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, LoadingState, RestApiLinks, ColumnDefinition, RichBlockNode, ConnectionStorage, ResourceDiscoveryService, LoadingOrchestrator, PraxisLoadingRenderer, TableDetailRichListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, ResourceActionCatalogItem, JsonLogicExpression, GlobalActionSpec, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisJsonLogicService, TableConfigService, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
13
+ import { TableConfig, LoggerService, PraxisI18nService, GlobalConfigService, AsyncConfigStorage, FieldMetadata, SchemaIdParams, FormConfig, GenericCrudService, DynamicFormService, SchemaNormalizerService, ComponentKeyService, ComponentDocMeta, LoadingState, RestApiLinks, ColumnDefinition, RichBlockNode, ConnectionStorage, ResourceDiscoveryService, LoadingOrchestrator, GlobalActionService, PraxisLoadingRenderer, TableDetailRichListNode, TableDetailCardGridNode, TableDetailCardGridCardNode, TableDetailTimelineNode, JsonLogicDataRecord, TableDetailListItemAction, TableDetailActionBarNode, TableDetailActionBarAction, TableDetailRefNode, TableDetailTemplateRefNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, GlobalActionRef, ResourceActionCatalogItem, ResourceSurfaceCatalogItem, JsonLogicExpression, GlobalActionCatalogEntry, IconPickerService, SurfaceOpenPayload, GlobalActionField, FieldDefinition, PraxisJsonLogicService, TableConfigService, PraxisTextValue, PraxisAnalyticsProjection, PraxisDataQueryContext, ApiUrlConfig, AnalyticsSchemaContractService, AnalyticsPresentationResolver, RichPresenterNode, RichComposeNode, ComponentAuthoringManifest, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
14
14
  import { FormGroup, FormControl, FormBuilder } from '@angular/forms';
15
15
  import { MatDialog } from '@angular/material/dialog';
16
16
  import { CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';
@@ -46,11 +46,15 @@ declare class PraxisTableToolbar implements OnDestroy {
46
46
  showActionsGroup: boolean;
47
47
  showEndActions: boolean;
48
48
  showMobileActions: boolean;
49
+ exportBusy: boolean;
49
50
  evaluationContext: Record<string, any> | null;
50
51
  toolbarAction: EventEmitter<{
51
52
  action: string;
52
53
  actionConfig?: any;
53
54
  }>;
55
+ exportAction: EventEmitter<{
56
+ format: string;
57
+ }>;
54
58
  readonly getActionId: typeof getActionId;
55
59
  private readonly jsonLogic;
56
60
  private readonly validToolbarActionTypes;
@@ -65,6 +69,7 @@ declare class PraxisTableToolbar implements OnDestroy {
65
69
  constructor(hostRef?: ElementRef<HTMLElement> | null, logger?: LoggerService | undefined, i18n?: PraxisI18nService | undefined);
66
70
  getExportDataLabel(): string;
67
71
  getMoreActionsLabel(): string;
72
+ emitExportAction(event: Event, format: string): void;
68
73
  private tx;
69
74
  ngOnDestroy(): void;
70
75
  private getNestedPropertyValue;
@@ -112,7 +117,7 @@ declare class PraxisTableToolbar implements OnDestroy {
112
117
  private sortActions;
113
118
  getExportIcon(format: string): string;
114
119
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTableToolbar, [null, { optional: true; }, { optional: true; }]>;
115
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableToolbar, "praxis-table-toolbar", never, { "config": { "alias": "config"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "showMain": { "alias": "showMain"; "required": false; }; "showActionsGroup": { "alias": "showActionsGroup"; "required": false; }; "showEndActions": { "alias": "showEndActions"; "required": false; }; "showMobileActions": { "alias": "showMobileActions"; "required": false; }; "evaluationContext": { "alias": "evaluationContext"; "required": false; }; }, { "toolbarAction": "toolbarAction"; }, never, ["[advancedFilter]", "[toolbar]", "[end-actions]"], true, never>;
120
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTableToolbar, "praxis-table-toolbar", never, { "config": { "alias": "config"; "required": false; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "showMain": { "alias": "showMain"; "required": false; }; "showActionsGroup": { "alias": "showActionsGroup"; "required": false; }; "showEndActions": { "alias": "showEndActions"; "required": false; }; "showMobileActions": { "alias": "showMobileActions"; "required": false; }; "exportBusy": { "alias": "exportBusy"; "required": false; }; "evaluationContext": { "alias": "evaluationContext"; "required": false; }; }, { "toolbarAction": "toolbarAction"; "exportAction": "exportAction"; }, never, ["[advancedFilter]", "[toolbar]", "[end-actions]"], true, never>;
116
121
  }
117
122
 
118
123
  type ColumnDataType$1 = 'date' | 'number' | 'currency' | 'percentage' | 'string' | 'boolean' | 'custom';
@@ -739,6 +744,9 @@ declare class PraxisFilter implements OnInit, OnChanges, AfterViewInit, OnDestro
739
744
  private persistTags;
740
745
  private cleanFilterPayload;
741
746
  private upsertDtoValue;
747
+ private normalizeFilterFieldValue;
748
+ private getFilterFieldMetaByName;
749
+ private isEntityLookupFilterField;
742
750
  private isEffectivelyEmptyFilterValue;
743
751
  private syncFormsToDto;
744
752
  private updateDisplayedTags;
@@ -835,6 +843,7 @@ type RowActionRuntimeOptions = {
835
843
  type RuntimeRowAction = {
836
844
  id: string;
837
845
  action: string;
846
+ globalAction?: GlobalActionRef;
838
847
  label?: string;
839
848
  icon?: string;
840
849
  color?: string;
@@ -842,6 +851,7 @@ type RuntimeRowAction = {
842
851
  disabled?: boolean;
843
852
  overflow?: boolean;
844
853
  __praxisDiscoveredAction?: ResourceActionCatalogItem;
854
+ __praxisDiscoveredSurface?: ResourceSurfaceCatalogItem;
845
855
  __praxisCapabilityDenied?: boolean;
846
856
  };
847
857
  type ExpansionDetailRuntimeStatus = 'idle' | 'loading' | 'ready' | 'error' | 'blocked';
@@ -868,6 +878,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
868
878
  private resourceDiscovery;
869
879
  private componentKeys;
870
880
  private loadingOrchestrator;
881
+ private globalActions;
871
882
  private loadingRenderer?;
872
883
  private route?;
873
884
  private logger?;
@@ -900,6 +911,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
900
911
  rowAction: EventEmitter<any>;
901
912
  toolbarAction: EventEmitter<any>;
902
913
  bulkAction: EventEmitter<any>;
914
+ exportAction: EventEmitter<any>;
903
915
  columnReorder: EventEmitter<any>;
904
916
  columnReorderAttempt: EventEmitter<any>;
905
917
  beforeDelete: EventEmitter<any>;
@@ -937,6 +949,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
937
949
  readonly isExpansionDetailRow: (index: number, row: any) => boolean;
938
950
  columnReorderStatusMessage: string;
939
951
  columnReorderVisualStatusMessage: string;
952
+ exportBusy: boolean;
953
+ exportStatusMessage: string;
940
954
  private columnReorderStatusTimer;
941
955
  private columnReorderVisualStatusTimer;
942
956
  private columnReorderUndoSubscription;
@@ -976,6 +990,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
976
990
  private rowDiscoveryMarkForCheckScheduled;
977
991
  private lastRowDiscoveryScopeKey;
978
992
  private readonly i18n;
993
+ private readonly collectionExport;
979
994
  private readonly paginatorIntl;
980
995
  private schemaFieldsSnapshot;
981
996
  private runtimeSchemaMeta;
@@ -1130,7 +1145,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1130
1145
  private ensureConfigDefaults;
1131
1146
  private setShowToolbar;
1132
1147
  private shouldExposeToolbar;
1133
- constructor(cdr: ChangeDetectorRef, settingsPanel: SettingsPanelService, crudService: GenericCrudService<any, any>, tableDefaultsProvider: TableDefaultsProvider, filterConfig: FilterConfigService, formattingService: DataFormattingService, pxDialog: PraxisDialog, snackBar: MatSnackBar, asyncConfigStorage: AsyncConfigStorage, connectionStorage: ConnectionStorage, hostRef: ElementRef<HTMLElement>, global: GlobalConfigService, resourceDiscovery: ResourceDiscoveryService, componentKeys: ComponentKeyService, loadingOrchestrator: LoadingOrchestrator, loadingRenderer?: PraxisLoadingRenderer | undefined, route?: ActivatedRoute | undefined, logger?: LoggerService | undefined);
1148
+ constructor(cdr: ChangeDetectorRef, settingsPanel: SettingsPanelService, crudService: GenericCrudService<any, any>, tableDefaultsProvider: TableDefaultsProvider, filterConfig: FilterConfigService, formattingService: DataFormattingService, pxDialog: PraxisDialog, snackBar: MatSnackBar, asyncConfigStorage: AsyncConfigStorage, connectionStorage: ConnectionStorage, hostRef: ElementRef<HTMLElement>, global: GlobalConfigService, resourceDiscovery: ResourceDiscoveryService, componentKeys: ComponentKeyService, loadingOrchestrator: LoadingOrchestrator, globalActions: GlobalActionService, loadingRenderer?: PraxisLoadingRenderer | undefined, route?: ActivatedRoute | undefined, logger?: LoggerService | undefined);
1134
1149
  private ensureAiAdapterLoaded;
1135
1150
  openAiAssistant(): void;
1136
1151
  closeAiAssistant(): void;
@@ -1360,19 +1375,48 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1360
1375
  private emitRowActionEvent;
1361
1376
  private showConfirmDialog;
1362
1377
  private executeDeleteAction;
1378
+ private dispatchRowAction;
1363
1379
  private cloneForEmit;
1364
1380
  private interpolateActionMessageTemplate;
1365
1381
  private buildActionFeedbackContext;
1366
1382
  private resolveActionFeedbackMessage;
1367
1383
  private showActionFeedbackMessage;
1368
1384
  private emitEventWithActionFeedback;
1385
+ private executeConfiguredGlobalAction;
1386
+ private resolveConfiguredGlobalActionRef;
1387
+ private resolveGlobalActionPayload;
1388
+ private buildGlobalActionTemplateContext;
1389
+ private resolveGlobalActionTemplateValue;
1390
+ private isDeferredTemplateExpressionKey;
1391
+ private interpolateGlobalActionTemplate;
1392
+ private shouldEmitLocalForGlobalAction;
1369
1393
  private resolveBulkValidationMessage;
1370
1394
  private hasValidBulkSelectionCount;
1371
1395
  private showBulkConfirmDialog;
1372
1396
  onToolbarAction(event: {
1373
1397
  action: string;
1374
1398
  actionConfig?: any;
1375
- }): void;
1399
+ }): Promise<void>;
1400
+ private resolveBulkExportFormat;
1401
+ private isBulkExportActionKey;
1402
+ private normalizeExportFormat;
1403
+ private isExportFormatEnabled;
1404
+ private getFirstEnabledExportFormat;
1405
+ onExportAction(event: {
1406
+ format: string;
1407
+ }): Promise<void>;
1408
+ private shouldBlockSelectedExportWithoutSelection;
1409
+ private buildTableExportRequest;
1410
+ private resolveEffectiveExportScope;
1411
+ private resolveTableExportLoadedItems;
1412
+ private computeLocalExportRows;
1413
+ private buildTableExportFields;
1414
+ private downloadExportResult;
1415
+ private triggerExportDownload;
1416
+ private resolveExportFileName;
1417
+ private getExportFileExtension;
1418
+ private getExportMimeType;
1419
+ private showExportFeedback;
1376
1420
  onAdvancedFilterSubmit(criteria: Record<string, any>): void;
1377
1421
  onAdvancedFilterChange(criteria: Record<string, any>): void;
1378
1422
  onAdvancedFilterClear(): void;
@@ -1519,6 +1563,10 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1519
1563
  * 3. format (data formatting like dates, numbers, currency)
1520
1564
  */
1521
1565
  getCellValue(rowData: any, column: ColumnDefinition): any;
1566
+ private normalizeReadonlyEntityLookupCellValue;
1567
+ private toEntityLookupDisplayToken;
1568
+ private isEntityLookupDisplayCandidate;
1569
+ private toEntityLookupDisplayPrimitive;
1522
1570
  private resolveImplicitFormat;
1523
1571
  getCellClasses(rowData: any, column: ColumnDefinition): string[] | undefined;
1524
1572
  getCellNgStyle(rowData: any, column: ColumnDefinition): Record<string, string> | undefined;
@@ -1769,6 +1817,7 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1769
1817
  private reconcileSelectionAfterDataChange;
1770
1818
  private getComparableRowIdentity;
1771
1819
  getIdField(): string;
1820
+ private resolveConfigMetaIdField;
1772
1821
  private syncRuntimeSchemaMetaFromConfig;
1773
1822
  private getEffectiveMetadataSnapshot;
1774
1823
  getActionId(action: any): string;
@@ -1811,11 +1860,19 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1811
1860
  private splitVisibleRowActionsFromVisible;
1812
1861
  private decorateConfiguredRowAction;
1813
1862
  private getDiscoveredRowWorkflowActions;
1863
+ private getDiscoveredRowSurfaceActionsFromSnapshot;
1814
1864
  private getDiscoveredRowWorkflowActionsFromCatalog;
1815
1865
  private supportsRowCrudAction;
1816
1866
  private isCapabilityManagedCrudRowAction;
1817
1867
  private findItemWorkflowAction;
1868
+ private findItemSurface;
1869
+ private isRowSurfaceAction;
1870
+ private isWritableRowSurface;
1871
+ private isReadableRowSurface;
1872
+ private getDiscoveredSurfaceIcon;
1873
+ private getDiscoveredSurfaceColor;
1818
1874
  private getUnavailableWorkflowMessage;
1875
+ private getUnavailableSurfaceMessage;
1819
1876
  private normalizeActionId;
1820
1877
  private isActionVisible;
1821
1878
  trackAction(index: number, item: any): any;
@@ -1829,8 +1886,8 @@ declare class PraxisTable implements OnInit, OnChanges, AfterViewInit, AfterCont
1829
1886
  getRowMenuIcon(): string;
1830
1887
  private scheduleRowDiscoveryMarkForCheck;
1831
1888
  ngOnDestroy(): void;
1832
- static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTable, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
1833
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTable, "praxis-table", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "data": { "alias": "data"; "required": false; }; "tableId": { "alias": "tableId"; "required": true; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "autoDelete": { "alias": "autoDelete"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "crudContext": { "alias": "crudContext"; "required": false; }; "filterCriteria": { "alias": "filterCriteria"; "required": false; }; "queryContext": { "alias": "queryContext"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; }, { "rowClick": "rowClick"; "rowDoubleClick": "rowDoubleClick"; "rowExpansionChange": "rowExpansionChange"; "rowAction": "rowAction"; "toolbarAction": "toolbarAction"; "bulkAction": "bulkAction"; "columnReorder": "columnReorder"; "columnReorderAttempt": "columnReorderAttempt"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; "schemaStatusChange": "schemaStatusChange"; "metadataChange": "metadataChange"; "loadingStateChange": "loadingStateChange"; "collectionLinksChange": "collectionLinksChange"; "selectionChange": "selectionChange"; }, ["toolbar", "projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
1889
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisTable, [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
1890
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisTable, "praxis-table", never, { "config": { "alias": "config"; "required": false; }; "resourcePath": { "alias": "resourcePath"; "required": false; }; "data": { "alias": "data"; "required": false; }; "tableId": { "alias": "tableId"; "required": true; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "autoDelete": { "alias": "autoDelete"; "required": false; }; "notifyIfOutdated": { "alias": "notifyIfOutdated"; "required": false; }; "snoozeMs": { "alias": "snoozeMs"; "required": false; }; "autoOpenSettingsOnOutdated": { "alias": "autoOpenSettingsOnOutdated"; "required": false; }; "crudContext": { "alias": "crudContext"; "required": false; }; "filterCriteria": { "alias": "filterCriteria"; "required": false; }; "queryContext": { "alias": "queryContext"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "dense": { "alias": "dense"; "required": false; }; }, { "rowClick": "rowClick"; "rowDoubleClick": "rowDoubleClick"; "rowExpansionChange": "rowExpansionChange"; "rowAction": "rowAction"; "toolbarAction": "toolbarAction"; "bulkAction": "bulkAction"; "exportAction": "exportAction"; "columnReorder": "columnReorder"; "columnReorderAttempt": "columnReorderAttempt"; "beforeDelete": "beforeDelete"; "afterDelete": "afterDelete"; "deleteError": "deleteError"; "beforeBulkDelete": "beforeBulkDelete"; "afterBulkDelete": "afterBulkDelete"; "bulkDeleteError": "bulkDeleteError"; "schemaStatusChange": "schemaStatusChange"; "metadataChange": "metadataChange"; "loadingStateChange": "loadingStateChange"; "collectionLinksChange": "collectionLinksChange"; "selectionChange": "selectionChange"; }, ["toolbar", "projectedFilter"], ["[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]", "[advancedFilter]", "[toolbar]"], true, never>;
1834
1891
  static ngAcceptInputType_enableCustomization: unknown;
1835
1892
  }
1836
1893
 
@@ -1843,7 +1900,6 @@ interface EditorDocument<TConfig, TBindings = unknown> {
1843
1900
  type TableHorizontalScroll = 'auto' | 'wrap' | 'none';
1844
1901
  interface TableBindings {
1845
1902
  resourcePath?: string | null;
1846
- idField?: string;
1847
1903
  horizontalScroll?: TableHorizontalScroll;
1848
1904
  }
1849
1905
  interface TableAuthoringDocument extends EditorDocument<TableConfig, TableBindings> {
@@ -1900,7 +1956,6 @@ interface TableApplyPlan {
1900
1956
  };
1901
1957
  diff?: {
1902
1958
  resourcePathChanged?: boolean;
1903
- idFieldChanged?: boolean;
1904
1959
  horizontalScrollChanged?: boolean;
1905
1960
  requiresDataRefresh?: boolean;
1906
1961
  };
@@ -2373,6 +2428,7 @@ interface ToolbarAction {
2373
2428
  /** Material button appearance: filled (flat), outlined (stroked), elevated (raised), text, tonal */
2374
2429
  appearance?: 'filled' | 'outlined' | 'elevated' | 'text' | 'tonal';
2375
2430
  action: string;
2431
+ globalAction?: GlobalActionRef;
2376
2432
  position: 'start' | 'end';
2377
2433
  order?: number;
2378
2434
  disabled?: boolean;
@@ -2388,6 +2444,7 @@ interface RowAction {
2388
2444
  label: string;
2389
2445
  icon: string;
2390
2446
  action: string;
2447
+ globalAction?: GlobalActionRef;
2391
2448
  color?: 'primary' | 'accent' | 'warn';
2392
2449
  tooltip?: string;
2393
2450
  requiresConfirmation?: boolean;
@@ -2400,6 +2457,7 @@ interface BulkAction {
2400
2457
  label: string;
2401
2458
  icon: string;
2402
2459
  action: string;
2460
+ globalAction?: GlobalActionRef;
2403
2461
  color?: 'primary' | 'accent' | 'warn';
2404
2462
  tooltip?: string;
2405
2463
  requiresConfirmation?: boolean;
@@ -2413,6 +2471,22 @@ interface ToolbarActionsChange {
2413
2471
  value: any;
2414
2472
  fullConfig: TableConfig;
2415
2473
  }
2474
+ type GlobalActionCatalogOption = GlobalActionCatalogEntry & {
2475
+ param?: {
2476
+ required?: boolean;
2477
+ label?: string;
2478
+ placeholder?: string;
2479
+ hint?: string;
2480
+ };
2481
+ };
2482
+ type EditableTableAction = {
2483
+ id?: string;
2484
+ label?: string;
2485
+ action?: string;
2486
+ globalAction?: GlobalActionRef;
2487
+ position?: string;
2488
+ appearance?: string;
2489
+ };
2416
2490
  type ToolbarShortcutScope = 'toolbar' | 'global';
2417
2491
  interface InternalActionSpec {
2418
2492
  id: string;
@@ -2433,14 +2507,14 @@ declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChan
2433
2507
  editingToolbarActionIndex: number | null;
2434
2508
  editingRowActionIndex: number | null;
2435
2509
  editingBulkActionIndex: number | null;
2436
- readonly globalActionCatalog: GlobalActionSpec[];
2510
+ private readonly i18n;
2511
+ readonly globalActionCatalog: GlobalActionCatalogOption[];
2437
2512
  get internalActionCatalog(): InternalActionSpec[];
2438
2513
  readonly customActionValue = "__custom__";
2439
2514
  readonly validShortcutScopes: ToolbarShortcutScope[];
2440
2515
  private readonly actionFieldDrafts;
2441
2516
  private readonly actionFieldErrors;
2442
2517
  private readonly warnedInvalidShortcutScopes;
2443
- private readonly i18n;
2444
2518
  private destroy$;
2445
2519
  constructor(fb: FormBuilder, iconPicker: IconPickerService);
2446
2520
  tx(key: string, fallback: string): string;
@@ -2469,56 +2543,35 @@ declare class ToolbarActionsEditorComponent implements OnInit, OnDestroy, OnChan
2469
2543
  private removeAddToolbarAction;
2470
2544
  private syncAddFormFromActions;
2471
2545
  private updateConfig;
2472
- getActionSelectValue(value?: string): string;
2473
- getActionParam(value?: string): string;
2474
- getActionCustomValue(value?: string): string;
2546
+ getActionSelectValue(action?: EditableTableAction): string;
2547
+ getActionParam(action?: EditableTableAction): string;
2548
+ isRequiredGlobalActionParamMissing(action: EditableTableAction, spec: GlobalActionCatalogOption): boolean;
2549
+ getActionCustomValue(action?: EditableTableAction): string;
2475
2550
  isInternalAction(value?: string): boolean;
2476
- getActionSpecById(id: string): GlobalActionSpec | undefined;
2477
- onActionSelectChange(action: {
2478
- action?: string;
2479
- }, value: string, kind: 'toolbar' | 'row' | 'bulk'): void;
2480
- onActionParamChange(action: {
2481
- action?: string;
2482
- }, value: string, kind: 'toolbar' | 'row' | 'bulk'): void;
2483
- onActionCustomChange(action: {
2484
- action?: string;
2485
- }, value: string, kind: 'toolbar' | 'row' | 'bulk'): void;
2551
+ getActionSpecById(id: string): GlobalActionCatalogOption | undefined;
2552
+ onActionSelectChange(action: EditableTableAction, value: string, kind: 'toolbar' | 'row' | 'bulk'): void;
2553
+ onActionParamChange(action: EditableTableAction, value: string, kind: 'toolbar' | 'row' | 'bulk'): void;
2554
+ onActionCustomChange(action: EditableTableAction, value: string, kind: 'toolbar' | 'row' | 'bulk'): void;
2486
2555
  private touchActionList;
2487
- private parseActionValue;
2488
2556
  isGlobalActionId(id?: string): boolean;
2489
- getGlobalActionSchema(action: {
2490
- action?: string;
2491
- }): _praxisui_core.GlobalActionUiSchema | undefined;
2492
- getSurfaceOpenActionPayload(action: {
2493
- action?: string;
2494
- }): SurfaceOpenPayload;
2557
+ getGlobalActionSchema(action: EditableTableAction): _praxisui_core.GlobalActionUiSchema | undefined;
2558
+ getSurfaceOpenActionPayload(action: EditableTableAction): SurfaceOpenPayload;
2495
2559
  onSurfaceOpenActionPayloadChange(action: {
2496
2560
  action?: string;
2561
+ globalAction?: GlobalActionRef;
2497
2562
  }, payload: SurfaceOpenPayload, kind: 'toolbar' | 'row' | 'bulk'): void;
2498
- shouldShowGlobalActionField(action: {
2499
- action?: string;
2500
- }, field: GlobalActionField): boolean;
2501
- hasActionFieldError(action: {
2502
- action?: string;
2503
- }, key: string): boolean;
2504
- getActionFieldError(action: {
2505
- action?: string;
2506
- }, key: string): string;
2507
- getGlobalActionFieldValue(action: {
2508
- action?: string;
2509
- }, field: GlobalActionField): any;
2510
- onGlobalActionFieldChange(action: {
2511
- action?: string;
2512
- }, field: GlobalActionField, value: any, kind: 'toolbar' | 'row' | 'bulk'): void;
2513
- private getActionParamInfo;
2514
- private parseMethodAndUrl;
2563
+ shouldShowGlobalActionField(action: EditableTableAction, field: GlobalActionField): boolean;
2564
+ isGlobalActionFieldRequired(action: EditableTableAction, field: GlobalActionField): boolean;
2565
+ isGlobalActionFieldMissing(action: EditableTableAction, field: GlobalActionField): boolean;
2566
+ hasActionFieldError(action: EditableTableAction, key: string): boolean;
2567
+ getActionFieldError(action: EditableTableAction, key: string): string;
2568
+ getGlobalActionFieldValue(action: EditableTableAction, field: GlobalActionField): any;
2569
+ onGlobalActionFieldChange(action: EditableTableAction, field: GlobalActionField, value: any, kind: 'toolbar' | 'row' | 'bulk'): void;
2515
2570
  private stringifyJson;
2516
2571
  private normalizeSurfaceOpenPayload;
2517
2572
  private setActionFieldError;
2518
2573
  private clearActionFieldError;
2519
2574
  private collectGlobalActionFieldValues;
2520
- private serializeGlobalActionParam;
2521
- private buildPrimaryParam;
2522
2575
  private buildGlobalActionPayload;
2523
2576
  getToolbarActionShortcutScope(action: ToolbarAction): ToolbarShortcutScope;
2524
2577
  onToolbarActionShortcutScopeChange(action: ToolbarAction, value: ToolbarShortcutScope | string): void;
@@ -3080,6 +3133,8 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
3080
3133
  private cdr;
3081
3134
  private configService;
3082
3135
  private readonly i18n;
3136
+ private readonly globalActionCatalogSource;
3137
+ private readonly globalActionCatalog;
3083
3138
  filterSettingsEditor?: FilterSettingsComponent;
3084
3139
  behaviorEditor?: BehaviorConfigEditorComponent;
3085
3140
  rulesEditor?: TableRulesEditorComponent;
@@ -3142,6 +3197,7 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
3142
3197
  private hasLocalDataInput;
3143
3198
  private filterDtoLoadSeq;
3144
3199
  private lastKnownFilterSettings;
3200
+ private globalActionValidationIssues;
3145
3201
  private readonly panelData;
3146
3202
  private readonly crudService;
3147
3203
  private readonly panelRef;
@@ -3168,6 +3224,10 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
3168
3224
  onRulesConfigChange(newCfg: TableConfig): void;
3169
3225
  private updateColumnMetas;
3170
3226
  private updateCanSaveState;
3227
+ private collectGlobalActionValidationIssues;
3228
+ private collectGlobalActionValidationTargets;
3229
+ private findGlobalActionCatalogEntry;
3230
+ private buildGlobalActionCatalog;
3171
3231
  private subscribeCrudEditorChanges;
3172
3232
  private showSuccess;
3173
3233
  private showError;
@@ -3176,6 +3236,7 @@ declare class PraxisTableConfigEditor implements OnInit, OnDestroy, SettingsValu
3176
3236
  * Normaliza uma configuração de tabela para comparação consistente
3177
3237
  * Remove propriedades undefined, ordena arrays e objetos de forma consistente
3178
3238
  */
3239
+ private withCanonicalIdField;
3179
3240
  private normalizeTableConfig;
3180
3241
  /**
3181
3242
  * Realiza comparação profunda de objetos, ignorando ordem de propriedades
@@ -3397,6 +3458,15 @@ declare function buildTableApplyPlan(doc: TableAuthoringDocument, runtime?: Tabl
3397
3458
  }): TableApplyPlan;
3398
3459
  declare function serializeTableAuthoringDocument(doc: TableAuthoringDocument): unknown;
3399
3460
 
3461
+ /**
3462
+ * Manifesto de authoring canônico para o componente praxis-table.
3463
+ * Este arquivo define o contrato executável para que agentes de IA editem tabelas.
3464
+ *
3465
+ * @version 2.0.0
3466
+ * @status COMPLIANT - Alinhado com o contrato v2 e TableConfig canônico.
3467
+ */
3468
+ declare const PRAXIS_TABLE_AUTHORING_MANIFEST: ComponentAuthoringManifest;
3469
+
3400
3470
  declare class PraxisTableInlineAuthoringEditorComponent implements OnChanges {
3401
3471
  private readonly i18n;
3402
3472
  config: TableConfig;
@@ -3643,7 +3713,6 @@ declare function providePraxisTableMetadata(): Provider;
3643
3713
  declare module '@praxisui/core' {
3644
3714
  interface AiCapabilityCategoryMap {
3645
3715
  meta: true;
3646
- bindings: true;
3647
3716
  columns: true;
3648
3717
  renderer: true;
3649
3718
  conditional: true;
@@ -3995,5 +4064,5 @@ declare function coerceTableComponentEditPlan(value: unknown): TableComponentEdi
3995
4064
  declare function compileTableComponentEditPlans(plans: TableComponentEditPlan[], currentConfig: TableConfig): TableComponentEditPlanCompileResult;
3996
4065
  declare function compileTableComponentEditPlan(plan: TableComponentEditPlan, currentConfig: TableConfig): TableComponentEditPlanCompileResult;
3997
4066
 
3998
- export { AnalyticsTableConfigAdapterService, AnalyticsTableContractService, AnalyticsTableStatsApiService, BOOLEAN_PRESETS, BehaviorConfigEditorComponent, CURRENCY_PRESETS, ColumnsConfigEditorComponent, DATE_PRESETS, DataFormatterComponent, DataFormattingService, FORMULA_TEMPLATES, FilterConfigService, FilterSettingsComponent, FormulaGeneratorService, JsonConfigEditorComponent, MessagesLocalizationEditorComponent, NUMBER_PRESETS, PERCENTAGE_PRESETS, PRAXIS_FILTER_COMPONENT_METADATA, PRAXIS_TABLE_COMPONENT_METADATA, PraxisFilter, PraxisTable, PraxisTableConfigEditor, PraxisTableInlineAuthoringEditorComponent, PraxisTableToolbar, STRING_PRESETS, TABLE_AI_CAPABILITIES, TABLE_COMPONENT_AI_CAPABILITIES, TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, TABLE_COMPONENT_EDIT_PLAN_KIND, TABLE_COMPONENT_EDIT_PLAN_VERSION, TASK_PRESETS, TableDefaultsProvider, TableRulesEditorComponent, ToolbarActionsEditorComponent, ValueMappingEditorComponent, VisualFormulaBuilderComponent, buildTableApplyPlan, coerceTableComponentEditPlan, coerceTableComponentEditPlans, compileTableComponentEditPlan, compileTableComponentEditPlans, createTableAuthoringDocument, getActionId, getEnum, getTableCapabilities, getTableComponentEditPlanCapabilities, isTableRendererSupportedByRichContentP0, mapTableRendererToRichContentP0, normalizeTableAuthoringDocument, parseLegacyOrTableDocument, providePraxisFilterMetadata, providePraxisTableMetadata, serializeTableAuthoringDocument, toCanonicalTableConfig, validateTableAuthoringDocument };
4067
+ export { AnalyticsTableConfigAdapterService, AnalyticsTableContractService, AnalyticsTableStatsApiService, BOOLEAN_PRESETS, BehaviorConfigEditorComponent, CURRENCY_PRESETS, ColumnsConfigEditorComponent, DATE_PRESETS, DataFormatterComponent, DataFormattingService, FORMULA_TEMPLATES, FilterConfigService, FilterSettingsComponent, FormulaGeneratorService, JsonConfigEditorComponent, MessagesLocalizationEditorComponent, NUMBER_PRESETS, PERCENTAGE_PRESETS, PRAXIS_FILTER_COMPONENT_METADATA, PRAXIS_TABLE_AUTHORING_MANIFEST, PRAXIS_TABLE_COMPONENT_METADATA, PraxisFilter, PraxisTable, PraxisTableConfigEditor, PraxisTableInlineAuthoringEditorComponent, PraxisTableToolbar, STRING_PRESETS, TABLE_AI_CAPABILITIES, TABLE_COMPONENT_AI_CAPABILITIES, TABLE_COMPONENT_EDIT_PLAN_ALLOWED_CHANGE_KINDS, TABLE_COMPONENT_EDIT_PLAN_BATCH_KIND, TABLE_COMPONENT_EDIT_PLAN_EXPECTED_PATHS, TABLE_COMPONENT_EDIT_PLAN_JSON_SCHEMA, TABLE_COMPONENT_EDIT_PLAN_KIND, TABLE_COMPONENT_EDIT_PLAN_VERSION, TASK_PRESETS, TableDefaultsProvider, TableRulesEditorComponent, ToolbarActionsEditorComponent, ValueMappingEditorComponent, VisualFormulaBuilderComponent, buildTableApplyPlan, coerceTableComponentEditPlan, coerceTableComponentEditPlans, compileTableComponentEditPlan, compileTableComponentEditPlans, createTableAuthoringDocument, getActionId, getEnum, getTableCapabilities, getTableComponentEditPlanCapabilities, isTableRendererSupportedByRichContentP0, mapTableRendererToRichContentP0, normalizeTableAuthoringDocument, parseLegacyOrTableDocument, providePraxisFilterMetadata, providePraxisTableMetadata, serializeTableAuthoringDocument, toCanonicalTableConfig, validateTableAuthoringDocument };
3999
4068
  export type { ActionLike, AnalyticsTableConfigAdapterOptions, AnalyticsTableContractDefinition, AnalyticsTableContractLoadOptions, AnalyticsTableContractLoadResult, AnalyticsTableContractSource, AnalyticsTableRow, AnalyticsTableViewModel, ArithmeticParams, BehaviorConfigChange, BooleanFormatterOptions, BulkAction, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, ColumnChange, ColumnDataType$1 as ColumnDataType, ConcatenationParams, ConditionalMappingParams, CurrencyFormatterOptions, DataFormattingOptions, DataMode, DateFormatterOptions, DefaultValueParams, EditorDiagnostic, EditorDocument, FieldSchema, FilterConfig, FilterTag, FormatPreset, FormatterConfig, FormulaDefinition, FormulaParameterSchema, FormulaParams, FormulaTemplate, FormulaType, I18n, JsonEditorEvent, JsonValidationResult, MessagesLocalizationChange, NestedPropertyParams, NumberFormatterOptions, PercentageFormatterOptions, ResourcePathIntent, RowAction, RowExpansionChangeBase, RowExpansionChangeEvent, RowExpansionReasonCode, RowExpansionTrigger, StringFormatterOptions, TableApplyPlan, TableAuthoringDocument, TableBindings, Capability as TableComponentCapability, CapabilityCatalog as TableComponentCapabilityCatalog, CapabilityCategory as TableComponentCapabilityCategory, TableComponentEditChangeKind, TableComponentEditPlan, TableComponentEditPlanCompileResult, ValueKind as TableComponentValueKind, TableHorizontalScroll, TableProjectionContext, TableRichContentP0Node, TableRuntimeContext, TableValidationContext, ToolbarAction, ToolbarActionsChange, ValueKind$1 as ValueKind, ValueMappingPair };
package/package.json CHANGED
@@ -1,18 +1,24 @@
1
1
  {
2
2
  "name": "@praxisui/table",
3
- "version": "8.0.0-beta.2",
3
+ "version": "8.0.0-beta.20",
4
4
  "description": "Advanced data table for Angular (Praxis UI) with editing, filtering, sorting, virtualization, and settings panel integration.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^20.0.0",
7
7
  "@angular/core": "^20.0.0",
8
- "@praxisui/ai": "^8.0.0-beta.2",
9
- "@praxisui/core": "^8.0.0-beta.2",
10
- "@praxisui/dynamic-fields": "^8.0.0-beta.2",
11
- "@praxisui/dynamic-form": "^8.0.0-beta.2",
12
- "@praxisui/metadata-editor": "^8.0.0-beta.2",
13
- "@praxisui/rich-content": "^8.0.0-beta.2",
14
- "@praxisui/settings-panel": "^8.0.0-beta.2",
15
- "@praxisui/table-rule-builder": "^8.0.0-beta.2"
8
+ "@praxisui/ai": "^8.0.0-beta.20",
9
+ "@praxisui/core": "^8.0.0-beta.20",
10
+ "@praxisui/dynamic-fields": "^8.0.0-beta.20",
11
+ "@praxisui/dynamic-form": "^8.0.0-beta.20",
12
+ "@praxisui/metadata-editor": "^8.0.0-beta.20",
13
+ "@praxisui/rich-content": "^8.0.0-beta.20",
14
+ "@praxisui/settings-panel": "^8.0.0-beta.20",
15
+ "@praxisui/table-rule-builder": "^8.0.0-beta.20",
16
+ "@angular/cdk": "^20.0.0",
17
+ "@angular/forms": "^20.0.0",
18
+ "@angular/material": "^20.0.0",
19
+ "@angular/router": "^20.0.0",
20
+ "@praxisui/dialog": "^8.0.0-beta.20",
21
+ "rxjs": "~7.8.0"
16
22
  },
17
23
  "dependencies": {
18
24
  "tslib": "^2.3.0"