@acorex/platform 20.7.8 → 20.7.10

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 (28) hide show
  1. package/common/index.d.ts +26 -5
  2. package/core/index.d.ts +13 -7
  3. package/fesm2022/acorex-platform-common.mjs +5 -1
  4. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-core.mjs +20 -11
  6. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-layout-builder.mjs +31 -4
  8. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  9. package/fesm2022/{acorex-platform-layout-components-binding-expression-editor-popup.component-ZnTG7wlJ.mjs → acorex-platform-layout-components-binding-expression-editor-popup.component-Cb6Lk4Ch.mjs} +5 -5
  10. package/fesm2022/{acorex-platform-layout-components-binding-expression-editor-popup.component-ZnTG7wlJ.mjs.map → acorex-platform-layout-components-binding-expression-editor-popup.component-Cb6Lk4Ch.mjs.map} +1 -1
  11. package/fesm2022/acorex-platform-layout-components.mjs +913 -36
  12. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-entity.mjs +471 -789
  14. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  15. package/fesm2022/{acorex-platform-layout-widgets-repeater-widget-column.component-fcCirNxz.mjs → acorex-platform-layout-widgets-repeater-widget-column.component-DnhR00cH.mjs} +2 -2
  16. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-DnhR00cH.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-layout-widgets.mjs +219 -327
  18. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  19. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-DzWjSMSK.mjs → acorex-platform-themes-default-entity-master-list-view.component-HBr-ZTSt.mjs} +20 -5
  20. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-HBr-ZTSt.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-themes-default.mjs +2 -2
  22. package/layout/builder/index.d.ts +25 -14
  23. package/layout/components/index.d.ts +295 -2
  24. package/layout/entity/index.d.ts +59 -58
  25. package/layout/widgets/index.d.ts +38 -32
  26. package/package.json +5 -5
  27. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-fcCirNxz.mjs.map +0 -1
  28. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DzWjSMSK.mjs.map +0 -1
@@ -874,7 +874,7 @@ class AXPDefaultThemeModule {
874
874
  ///
875
875
  modify: () => import('./acorex-platform-themes-default-entity-master-modify-view.component-DAFQ4UI9.mjs').then((c) => c.AXPEntityMasterModifyViewComponent),
876
876
  //
877
- list: () => import('./acorex-platform-themes-default-entity-master-list-view.component-DzWjSMSK.mjs').then((c) => c.AXPEntityMasterListViewComponent),
877
+ list: () => import('./acorex-platform-themes-default-entity-master-list-view.component-HBr-ZTSt.mjs').then((c) => c.AXPEntityMasterListViewComponent),
878
878
  },
879
879
  },
880
880
  };
@@ -910,7 +910,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
910
910
  ///
911
911
  modify: () => import('./acorex-platform-themes-default-entity-master-modify-view.component-DAFQ4UI9.mjs').then((c) => c.AXPEntityMasterModifyViewComponent),
912
912
  //
913
- list: () => import('./acorex-platform-themes-default-entity-master-list-view.component-DzWjSMSK.mjs').then((c) => c.AXPEntityMasterListViewComponent),
913
+ list: () => import('./acorex-platform-themes-default-entity-master-list-view.component-HBr-ZTSt.mjs').then((c) => c.AXPEntityMasterListViewComponent),
914
914
  },
915
915
  },
916
916
  };
@@ -417,7 +417,7 @@ interface ILayoutBuilder {
417
417
  page(delegate: (container: IPageContainerBuilder) => void): ILayoutBuilder;
418
418
  tabset(delegate: (container: ITabsetContainerBuilder) => void): ILayoutBuilder;
419
419
  fieldset(delegate: (container: IFieldsetContainerBuilder) => void): ILayoutBuilder;
420
- dialog(delegate: (container: IDialogBuilder) => void): IDialogBuilder;
420
+ dialog<T = AXPDialogRef>(delegate: (container: IDialogBuilder<T>) => void): IDialogBuilder<T>;
421
421
  stepWizard(delegate: (wizard: IStepWizardBuilder) => void): ILayoutBuilder;
422
422
  build(): AXPWidgetNode;
423
423
  toJson(options?: {
@@ -564,20 +564,26 @@ interface IFieldsetContainerBuilder extends IBaseContainerBuilder<IFieldsetConta
564
564
  setCols(cols: number): IFieldsetContainerBuilder;
565
565
  formField(label: string, delegate?: (field: IFormFieldBuilder) => void): IFieldsetContainerBuilder;
566
566
  }
567
- interface IDialogBuilder {
568
- }
569
- interface IDialogBuilder {
570
- setOptions(options: AXPDialogContainerOptions): IDialogBuilder;
571
- setTitle(title: string): IDialogBuilder;
572
- setMessage(message?: string): IDialogBuilder;
573
- setSize(size: AXPopupSizeType): IDialogBuilder;
574
- setCloseButton(closeButton: boolean): IDialogBuilder;
575
- setContext(context: any): IDialogBuilder;
576
- content(delegate: (layoutBuilder: IFlexContainerBuilder) => void): IDialogBuilder;
577
- setActions(delegate?: (actions: IActionBuilder) => void): IDialogBuilder;
578
- addCustomAction(action: AXPActionMenuItem): IDialogBuilder;
567
+ interface IDialogBuilder<T = AXPDialogRef> {
568
+ }
569
+ interface IDialogBuilder<T = AXPDialogRef> {
570
+ setOptions(options: AXPDialogContainerOptions): IDialogBuilder<T>;
571
+ setTitle(title: string): IDialogBuilder<T>;
572
+ setMessage(message?: string): IDialogBuilder<T>;
573
+ setSize(size: AXPopupSizeType): IDialogBuilder<T>;
574
+ setCloseButton(closeButton: boolean): IDialogBuilder<T>;
575
+ setContext(context: any): IDialogBuilder<T>;
576
+ content(delegate: (layoutBuilder: IFlexContainerBuilder) => void): IDialogBuilder<T>;
577
+ setActions(delegate?: (actions: IActionBuilder) => void): IDialogBuilder<T>;
578
+ /**
579
+ * Handler invoked when user clicks an action. Receives AXPDialogRef (context, action, setLoading, close).
580
+ * If handler throws, dialog stays open for retry.
581
+ * If handler returns, dialog closes and show() resolves with the return value.
582
+ */
583
+ onAction(handler: (dialogRef: AXPDialogRef) => T | Promise<T>): IDialogBuilder<T>;
584
+ addCustomAction(action: AXPActionMenuItem): IDialogBuilder<T>;
579
585
  build(): AXPWidgetNode;
580
- show(): Promise<AXPDialogRef>;
586
+ show(): Promise<T>;
581
587
  }
582
588
  interface IListWidgetBuilder extends IBaseContainerBuilder<IListWidgetBuilder>, ILayoutContainerBuilder<IListWidgetBuilder>, IChildContainerBuilder<IListWidgetBuilder>, IWidgetContainerBuilder<IListWidgetBuilder> {
583
589
  setOptions(options: AXPListWidgetOptions): IListWidgetBuilder;
@@ -821,6 +827,11 @@ interface DialogRendererConfig {
821
827
  suffix?: any[];
822
828
  };
823
829
  };
830
+ /**
831
+ * When present, handler is called on action click with AXPDialogRef.
832
+ * Throw = stay open for retry. Return = close and resolve show() with return value.
833
+ */
834
+ onAction?: (dialogRef: AXPDialogRef) => any | Promise<any>;
824
835
  }
825
836
  interface DialogRendererResult {
826
837
  context: any;
@@ -8,6 +8,7 @@ import { AXTreeViewLegacyComponent, AXTreeItemClickBaseEventLegacy } from '@acor
8
8
  import { AXTranslationService } from '@acorex/core/translation';
9
9
  import { AXPopoverComponent } from '@acorex/components/popover';
10
10
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
11
+ import * as _acorex_platform_layout_widget_core from '@acorex/platform/layout/widget-core';
11
12
  import { AXPWidgetNode, AXPWidgetRendererDirective, AXPWidgetCoreContextChangeEvent, AXPWidgetProperty, AXPWidgetConfig } from '@acorex/platform/layout/widget-core';
12
13
  import * as _ngrx_signals from '@ngrx/signals';
13
14
  import { AXDataTableComponent, AXDataTableRowDbClick, AXDataTableRowClick } from '@acorex/components/data-table';
@@ -15,10 +16,14 @@ import { AXBasePageComponent } from '@acorex/components/page';
15
16
  import { AXDropListDroppedEvent } from '@acorex/cdk/drag-drop';
16
17
  import { AXTagBoxComponent } from '@acorex/components/tag-box';
17
18
  import { AXCalendarService } from '@acorex/core/date-time';
19
+ import { AXTreeViewNode, AXTreeViewDragBehavior, AXTreeViewDragArea, AXTreeViewComponent, AXTreeViewBeforeDropEvent, AXTreeViewDropEvent } from '@acorex/components/tree-view';
20
+ import { AXDialogService } from '@acorex/components/dialog';
21
+ import { AXToastService } from '@acorex/components/toast';
18
22
  import { AXTabStripChangedEvent, AXTabsComponent } from '@acorex/components/tabs';
19
23
  import { AXFormComponent } from '@acorex/components/form';
20
24
  import { AXPopupSizeType, AXPopupService } from '@acorex/components/popup';
21
25
  import { Observable } from 'rxjs';
26
+ import { AXSelectBoxComponent } from '@acorex/components/select-box';
22
27
 
23
28
  declare class AXPActivityLogComponent {
24
29
  private readonly translateService;
@@ -765,6 +770,191 @@ declare class AXPImageEditorService {
765
770
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPImageEditorService>;
766
771
  }
767
772
 
773
+ /**
774
+ * Menu item interface for customizer
775
+ */
776
+ interface AXPMenuCustomizerItem {
777
+ name?: string;
778
+ text?: string;
779
+ icon?: string;
780
+ path?: string;
781
+ type?: 'menu' | 'group' | 'break';
782
+ priority?: number;
783
+ description?: string;
784
+ children?: AXPMenuCustomizerItem[];
785
+ }
786
+ /**
787
+ * Metadata for menu tree nodes
788
+ */
789
+ interface AXPMenuCustomizerNodeMetadata {
790
+ isBuiltIn: boolean;
791
+ isCustom: boolean;
792
+ isHidden: boolean;
793
+ originalPriority?: number;
794
+ originalParentName?: string;
795
+ }
796
+ /**
797
+ * Data structure for tree node combining menu item with metadata
798
+ */
799
+ interface AXPMenuCustomizerNodeData {
800
+ menuItem: AXPMenuCustomizerItem;
801
+ metadata: AXPMenuCustomizerNodeMetadata;
802
+ }
803
+ /**
804
+ * Available actions that can be performed on menu items
805
+ */
806
+ type AXPMenuCustomizerAction = 'show' | 'hide' | 'edit' | 'delete' | 'add-child' | 'move';
807
+ /**
808
+ * Abstract service interface for menu customization operations.
809
+ * Implement this interface and provide it via AXP_MENU_CUSTOMIZER_SERVICE token.
810
+ */
811
+ declare abstract class AXPMenuCustomizerService {
812
+ /**
813
+ * Get menu tree nodes for the given scope key
814
+ */
815
+ abstract getMenuTree(scopeKey: string): Promise<AXTreeViewNode[]>;
816
+ /**
817
+ * Sync tree changes (reorder, move) to storage
818
+ */
819
+ abstract syncTreeChanges(scopeKey: string, treeNodes: AXTreeViewNode[]): Promise<void>;
820
+ /**
821
+ * Show a hidden menu item
822
+ */
823
+ abstract showMenuItem(scopeKey: string, menuName: string): Promise<void>;
824
+ /**
825
+ * Hide a menu item
826
+ */
827
+ abstract hideMenuItem(scopeKey: string, menuName: string): Promise<void>;
828
+ /**
829
+ * Add a custom menu item
830
+ */
831
+ abstract addCustomMenuItem(scopeKey: string, menuItem: AXPMenuCustomizerItem, parentName: string | null): Promise<void>;
832
+ /**
833
+ * Update a custom menu item
834
+ */
835
+ abstract updateCustomMenuItem(scopeKey: string, menuName: string, menuItem: AXPMenuCustomizerItem): Promise<void>;
836
+ /**
837
+ * Update menu item properties (for built-in items)
838
+ */
839
+ abstract updateMenuProperties(scopeKey: string, menuName: string, properties: Partial<AXPMenuCustomizerItem>): Promise<void>;
840
+ /**
841
+ * Delete a custom menu item
842
+ */
843
+ abstract deleteCustomMenuItem(scopeKey: string, menuName: string): Promise<void>;
844
+ /**
845
+ * Reset all customizations for the scope
846
+ */
847
+ abstract resetCustomizations(scopeKey: string): Promise<void>;
848
+ }
849
+ /**
850
+ * Injection token for menu customizer service
851
+ */
852
+ declare const AXP_MENU_CUSTOMIZER_SERVICE: InjectionToken<AXPMenuCustomizerService>;
853
+
854
+ /**
855
+ * Reusable menu customizer component that allows users to reorder, show/hide,
856
+ * and manage menu items using a tree-like interface.
857
+ * Can be used standalone or within popups/dialogs.
858
+ *
859
+ * Requires providing AXP_MENU_CUSTOMIZER_SERVICE with an implementation of AXPMenuCustomizerService.
860
+ */
861
+ declare class AXPMenuCustomizerComponent implements OnInit, OnDestroy {
862
+ private menuCustomizerService;
863
+ private layoutBuilder;
864
+ protected dialogService: AXDialogService;
865
+ protected toastService: AXToastService;
866
+ private translationService;
867
+ /** The scope key for loading/saving menu customizations (e.g., 'edition:{id}', 'tenant:{id}') */
868
+ scopeKey: _angular_core.InputSignal<string>;
869
+ /** Whether to show the toolbar with collapse/expand/reset actions */
870
+ showToolbar: _angular_core.InputSignal<boolean>;
871
+ /** Whether to allow adding custom menu items */
872
+ allowAddItems: _angular_core.InputSignal<boolean>;
873
+ /** Drag behavior for the tree view: 'none' | 'move' | 'copy' */
874
+ dragBehavior: _angular_core.InputSignal<AXTreeViewDragBehavior>;
875
+ /** Drag area for the tree view: 'node' | 'handler' */
876
+ dragArea: _angular_core.InputSignal<AXTreeViewDragArea>;
877
+ /** Emitted when changes are saved */
878
+ saved: _angular_core.OutputEmitterRef<void>;
879
+ /** Emitted when the customizer is closed/cancelled */
880
+ cancelled: _angular_core.OutputEmitterRef<void>;
881
+ protected tree: _angular_core.Signal<AXTreeViewComponent | undefined>;
882
+ protected treeNodes: _angular_core.WritableSignal<AXTreeViewNode[]>;
883
+ protected isLoading: _angular_core.WritableSignal<boolean>;
884
+ protected error: _angular_core.WritableSignal<string>;
885
+ private isSyncing;
886
+ private destroy$;
887
+ ngOnInit(): Promise<void>;
888
+ ngOnDestroy(): void;
889
+ /**
890
+ * Handle before drop validation
891
+ */
892
+ handleBeforeDrop(e: AXTreeViewBeforeDropEvent): Promise<void>;
893
+ /**
894
+ * Handle after drop event to sync changes
895
+ * The event contains information about the moved node and its new position
896
+ */
897
+ handleAfterDrop(event: AXTreeViewDropEvent): Promise<void>;
898
+ /**
899
+ * Load menu tree for current scope
900
+ */
901
+ loadMenuItems(): Promise<void>;
902
+ /**
903
+ * Sync tree changes to backend
904
+ */
905
+ private syncTreeChanges;
906
+ /**
907
+ * Collapse all tree nodes
908
+ */
909
+ collapseAll(): void;
910
+ /**
911
+ * Expand all tree nodes
912
+ */
913
+ expandAll(): void;
914
+ /**
915
+ * Reset all customizations
916
+ */
917
+ resetCustomizations(): Promise<void>;
918
+ /**
919
+ * Add new root menu item
920
+ */
921
+ addRootMenuItem(): Promise<void>;
922
+ /**
923
+ * Handle menu item action
924
+ */
925
+ protected onAction(action: AXPMenuCustomizerAction, nodeData: AXPMenuCustomizerNodeData): Promise<void>;
926
+ /**
927
+ * Add new child menu item
928
+ */
929
+ protected addChildMenuItem(parentNodeData: AXPMenuCustomizerNodeData): Promise<void>;
930
+ /**
931
+ * Show menu item
932
+ */
933
+ private showMenuItem;
934
+ /**
935
+ * Hide menu item
936
+ */
937
+ private hideMenuItem;
938
+ /**
939
+ * Edit menu item
940
+ */
941
+ private editMenuItem;
942
+ /**
943
+ * Delete custom menu item
944
+ */
945
+ private deleteMenuItem;
946
+ /**
947
+ * Show menu item dialog (add/edit)
948
+ */
949
+ private showMenuItemDialog;
950
+ /**
951
+ * Execute a menu action with common error handling
952
+ */
953
+ private executeMenuAction;
954
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMenuCustomizerComponent, never>;
955
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMenuCustomizerComponent, "axp-menu-customizer", never, { "scopeKey": { "alias": "scopeKey"; "required": true; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "allowAddItems": { "alias": "allowAddItems"; "required": false; "isSignal": true; }; "dragBehavior": { "alias": "dragBehavior"; "required": false; "isSignal": true; }; "dragArea": { "alias": "dragArea"; "required": false; "isSignal": true; }; }, { "saved": "saved"; "cancelled": "cancelled"; }, never, never, true, never>;
956
+ }
957
+
768
958
  /**
769
959
  * Represents a spreadsheet item (row or column header) with id, text, and optional description
770
960
  */
@@ -1293,6 +1483,101 @@ declare class AXPStopwatchComponent implements OnDestroy {
1293
1483
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPStopwatchComponent, "axp-stopwatch", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "timeLimit": { "alias": "timeLimit"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "autoStart": { "alias": "autoStart"; "required": false; "isSignal": true; }; "showControls": { "alias": "showControls"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "timeUp": "timeUp"; }, never, never, true, never>;
1294
1484
  }
1295
1485
 
1486
+ /**
1487
+ * Builds the AXPWidgetNode tree for the table-columns-editor when using AXPLayoutRendererComponent.
1488
+ * Root: repeater-layout (path: 'columns') with add/remove controls.
1489
+ * Each row: form-field for name (text-editor), form-field for title (text-editor), form-field for widget (widget-field-configurator).
1490
+ */
1491
+ declare function buildTableColumnsEditorLayout(): AXPWidgetNode;
1492
+
1493
+ /**
1494
+ * Definition for a single table column (name, title, widget).
1495
+ * Used by table-columns-editor and table-data-editor.
1496
+ */
1497
+ interface AXPTableColumnDefinition {
1498
+ name: string;
1499
+ title: string;
1500
+ widget: AXPWidgetNode;
1501
+ }
1502
+
1503
+ declare class AXPTableColumnsEditorPopupComponent extends AXBasePageComponent {
1504
+ protected readonly I18N: {
1505
+ readonly title: "@general:widgets.table-columns-editor.popup-title";
1506
+ readonly cancel: "@general:actions.cancel.title";
1507
+ readonly save: "@general:actions.save.title";
1508
+ };
1509
+ columns: _angular_core.InputSignal<AXPTableColumnDefinition[]>;
1510
+ localColumns: _angular_core.ModelSignal<AXPTableColumnDefinition[]>;
1511
+ constructor();
1512
+ protected handleCancel(): void;
1513
+ protected handleSave(): void;
1514
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTableColumnsEditorPopupComponent, never>;
1515
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPTableColumnsEditorPopupComponent, "axp-table-columns-editor-popup", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "localColumns": { "alias": "localColumns"; "required": false; "isSignal": true; }; }, { "localColumns": "localColumnsChange"; }, never, never, true, never>;
1516
+ }
1517
+
1518
+ declare class AXPTableColumnsEditorComponent {
1519
+ /** Layout tree: repeater (path: columns) with form-fields for name, title, widget. */
1520
+ protected readonly columnsEditorLayout: _angular_core.WritableSignal<_acorex_platform_layout_widget_core.AXPWidgetNode>;
1521
+ /** Two-way: list of column definitions (synced with editorContext.columns). */
1522
+ columns: _angular_core.ModelSignal<AXPTableColumnDefinition[]>;
1523
+ /** Context for the layout renderer; must hold { columns: AXPTableColumnDefinition[] }. */
1524
+ protected readonly editorContext: _angular_core.ModelSignal<{
1525
+ columns: AXPTableColumnDefinition[];
1526
+ }>;
1527
+ constructor();
1528
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTableColumnsEditorComponent, never>;
1529
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPTableColumnsEditorComponent, "axp-table-columns-editor", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "editorContext": { "alias": "editorContext"; "required": false; "isSignal": true; }; }, { "columns": "columnsChange"; "editorContext": "editorContextChange"; }, never, never, true, never>;
1530
+ }
1531
+
1532
+ interface AXPTableColumnsEditorOpenOptions {
1533
+ title?: string;
1534
+ columns?: AXPTableColumnDefinition[];
1535
+ }
1536
+ declare class AXPTableColumnsEditorService {
1537
+ private readonly popupService;
1538
+ private readonly translationService;
1539
+ open(options?: AXPTableColumnsEditorOpenOptions): Promise<AXPTableColumnDefinition[] | null>;
1540
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTableColumnsEditorService, never>;
1541
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPTableColumnsEditorService>;
1542
+ }
1543
+
1544
+ declare class AXPTableDataEditorPopupComponent extends AXBasePageComponent {
1545
+ protected readonly I18N: {
1546
+ readonly title: "@general:widgets.table-data-editor.popup-title";
1547
+ readonly cancel: "@general:actions.cancel.title";
1548
+ readonly save: "@general:actions.save.title";
1549
+ };
1550
+ columns: _angular_core.InputSignal<AXPTableColumnDefinition[]>;
1551
+ rows: _angular_core.InputSignal<Record<string, unknown>[]>;
1552
+ localRows: _angular_core.ModelSignal<Record<string, unknown>[]>;
1553
+ constructor();
1554
+ protected handleCancel(): void;
1555
+ protected handleSave(): void;
1556
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTableDataEditorPopupComponent, never>;
1557
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPTableDataEditorPopupComponent, "axp-table-data-editor-popup", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "localRows": { "alias": "localRows"; "required": false; "isSignal": true; }; }, { "localRows": "localRowsChange"; }, never, never, true, never>;
1558
+ }
1559
+
1560
+ declare class AXPTableDataEditorComponent {
1561
+ columns: _angular_core.InputSignal<AXPTableColumnDefinition[]>;
1562
+ rowsModel: _angular_core.ModelSignal<Record<string, unknown>[]>;
1563
+ protected readonly spreadsheetColumns: _angular_core.Signal<AXPSpreadsheetColumn[]>;
1564
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTableDataEditorComponent, never>;
1565
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPTableDataEditorComponent, "axp-table-data-editor", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rowsModel": { "alias": "rowsModel"; "required": false; "isSignal": true; }; }, { "rowsModel": "rowsModelChange"; }, never, never, true, never>;
1566
+ }
1567
+
1568
+ interface AXPTableDataEditorOpenOptions {
1569
+ title?: string;
1570
+ columns: AXPTableColumnDefinition[];
1571
+ rows?: Record<string, unknown>[];
1572
+ }
1573
+ declare class AXPTableDataEditorService {
1574
+ private readonly popupService;
1575
+ private readonly translationService;
1576
+ open(options: AXPTableDataEditorOpenOptions): Promise<Record<string, unknown>[] | null>;
1577
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTableDataEditorService, never>;
1578
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPTableDataEditorService>;
1579
+ }
1580
+
1296
1581
  interface AXPTemplateViewerConfig {
1297
1582
  template: AXPWidgetNode | string;
1298
1583
  title?: string;
@@ -1518,10 +1803,18 @@ declare class AXPWidgetFieldConfiguratorComponent {
1518
1803
  * Whether preview button should be enabled
1519
1804
  */
1520
1805
  protected canPreview: _angular_core.Signal<boolean>;
1806
+ /**
1807
+ * Reference to the widget type select box (used to open dropdown when entering edit mode)
1808
+ */
1809
+ protected widgetSelectBox: _angular_core.Signal<AXSelectBoxComponent | undefined>;
1521
1810
  /**
1522
1811
  * Enter edit mode (show select box)
1523
1812
  */
1524
1813
  protected enterEditMode(): void;
1814
+ /**
1815
+ * Exit edit mode when dropdown is closed (return to view mode)
1816
+ */
1817
+ protected exitEditMode(): void;
1525
1818
  constructor();
1526
1819
  /**
1527
1820
  * Handle widget type change
@@ -1703,5 +1996,5 @@ declare class AXPWidgetPropertyViewerService {
1703
1996
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPWidgetPropertyViewerService>;
1704
1997
  }
1705
1998
 
1706
- export { AXPActivityLogComponent, AXPCategoryTreeComponent, AXPColorPalettePickerComponent, AXPColumnItemListComponent, AXPCompareViewComponent, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPDataSelectorComponent, AXPDataSelectorService, AXPDragDropListComponent, AXPImageEditorPopupComponent, AXPImageEditorService, AXPLogoComponent, AXPMenuBadgeHelper, AXPPropertyViewerComponent, AXPPropertyViewerPopupComponent, AXPPropertyViewerService, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPSpreadsheetComponent, AXPStateMessageComponent, AXPStopwatchComponent, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPWidgetFieldConfiguratorComponent, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER };
1707
- export type { AXPCategoryTreeActions, AXPCategoryTreeConfig, AXPCategoryTreeDataSource, AXPCategoryTreeEvents, AXPCategoryTreeNode, AXPColumnItemListItem, AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPDataSelectorColumn, AXPDataSelectorConfig, AXPDragDropListConfig, AXPDragDropListDropEvent, AXPDragDropListItem, AXPImageEditorOpenOptions, AXPPropertyViewerChangedEvent, AXPPropertyViewerConfig, AXPPropertyViewerGroup, AXPPropertyViewerResult, AXPPropertyViewerTab, AXPSpreadsheetCellChangeEvent, AXPSpreadsheetCellValue, AXPSpreadsheetColumn, AXPSpreadsheetConfig, AXPSpreadsheetData, AXPSpreadsheetItem, AXPSpreadsheetRowChangeEvent, AXPSpreadsheetRowMode, AXPTemplateViewerConfig, AXPTemplateViewerResult, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPWidgetItemClickEvent, AXPWidgetItemData, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyInjection, AXPWidgetPropertyViewerConfig, AXPWidgetPropertyViewerResult, StateMode };
1999
+ export { AXPActivityLogComponent, AXPCategoryTreeComponent, AXPColorPalettePickerComponent, AXPColumnItemListComponent, AXPCompareViewComponent, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPDataSelectorComponent, AXPDataSelectorService, AXPDragDropListComponent, AXPImageEditorPopupComponent, AXPImageEditorService, AXPLogoComponent, AXPMenuBadgeHelper, AXPMenuCustomizerComponent, AXPMenuCustomizerService, AXPPropertyViewerComponent, AXPPropertyViewerPopupComponent, AXPPropertyViewerService, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPSpreadsheetComponent, AXPStateMessageComponent, AXPStopwatchComponent, AXPTableColumnsEditorComponent, AXPTableColumnsEditorPopupComponent, AXPTableColumnsEditorService, AXPTableDataEditorComponent, AXPTableDataEditorPopupComponent, AXPTableDataEditorService, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPWidgetFieldConfiguratorComponent, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_MENU_CUSTOMIZER_SERVICE, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER, buildTableColumnsEditorLayout };
2000
+ export type { AXPCategoryTreeActions, AXPCategoryTreeConfig, AXPCategoryTreeDataSource, AXPCategoryTreeEvents, AXPCategoryTreeNode, AXPColumnItemListItem, AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPDataSelectorColumn, AXPDataSelectorConfig, AXPDragDropListConfig, AXPDragDropListDropEvent, AXPDragDropListItem, AXPImageEditorOpenOptions, AXPMenuCustomizerAction, AXPMenuCustomizerItem, AXPMenuCustomizerNodeData, AXPMenuCustomizerNodeMetadata, AXPPropertyViewerChangedEvent, AXPPropertyViewerConfig, AXPPropertyViewerGroup, AXPPropertyViewerResult, AXPPropertyViewerTab, AXPSpreadsheetCellChangeEvent, AXPSpreadsheetCellValue, AXPSpreadsheetColumn, AXPSpreadsheetConfig, AXPSpreadsheetData, AXPSpreadsheetItem, AXPSpreadsheetRowChangeEvent, AXPSpreadsheetRowMode, AXPTableColumnDefinition, AXPTableColumnsEditorOpenOptions, AXPTableDataEditorOpenOptions, AXPTemplateViewerConfig, AXPTemplateViewerResult, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPWidgetItemClickEvent, AXPWidgetItemData, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyInjection, AXPWidgetPropertyViewerConfig, AXPWidgetPropertyViewerResult, StateMode };