@acorex/platform 20.7.8 → 20.7.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.
@@ -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 };
@@ -15,10 +15,10 @@ import { Subject } from 'rxjs';
15
15
  import * as i2 from '@acorex/platform/workflow';
16
16
  import { AXPWorkflowService, AXPWorkflowAction, AXPWorkflowContext, AXPWorkflow } from '@acorex/platform/workflow';
17
17
  import { AXPSessionService } from '@acorex/platform/auth';
18
- import { AXTreeViewNode, AXTreeViewComponent, AXTreeViewNodeToggleEvent, AXTreeViewNodeSelectEvent, AXTreeViewSelectionChangeEvent } from '@acorex/components/tree-view';
18
+ import { AXTreeViewNode, AXTreeViewComponent, AXTreeViewNodeSelectEvent } from '@acorex/components/tree-view';
19
19
  import { AXTranslationService } from '@acorex/core/translation';
20
20
  import { AXPopupSizeType, AXPopupService } from '@acorex/components/popup';
21
- import { IActionBuilder, IFormFieldBuilder, AXPDialogRef } from '@acorex/platform/layout/builder';
21
+ import { IActionBuilder, AXPDialogRef, IFormFieldBuilder } from '@acorex/platform/layout/builder';
22
22
  import { AXBasePageComponent } from '@acorex/components/page';
23
23
  import { AXFormatService } from '@acorex/core/format';
24
24
  import { AXPColumnItemListItem, AXPCategoryTreeDataSource } from '@acorex/platform/layout/components';
@@ -27,12 +27,9 @@ import { AXPDataListWidgetComponentOptions } from '@acorex/platform/layout/widge
27
27
 
28
28
  declare class AXPCreateEntityCommand implements AXPCommand<any, any> {
29
29
  private entityForm;
30
- private settingsService;
31
30
  private entityService;
32
31
  private toastService;
33
32
  private translationService;
34
- private eventService;
35
- private platform;
36
33
  protected context: {};
37
34
  execute(input: any): Promise<AXPExecuteCommandResult<any>>;
38
35
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPCreateEntityCommand, never>;
@@ -1274,6 +1271,14 @@ interface IPropertyFilterStage {
1274
1271
  size(size: AXPopupSizeType): IPropertyFilterStage;
1275
1272
  /** Configure footer actions (cancel/submit/custom). If not called, defaults to cancel+submit. */
1276
1273
  actions(delegate: (a: IActionBuilder) => void): IPropertyFilterStage;
1274
+ /**
1275
+ * Handler invoked when user clicks an action. Receives AXPDialogRef.
1276
+ * If handler throws, dialog stays open for retry.
1277
+ * If handler returns, dialog closes and show() resolves with the return value.
1278
+ */
1279
+ onAction<T = any>(handler: (dialogRef: AXPDialogRef) => T | Promise<T>): IPropertyFilterStage & {
1280
+ show(): Promise<T>;
1281
+ };
1277
1282
  /** Add an extra field into a specific group, using the original field builder API */
1278
1283
  field(groupId: string, path: string, delegate?: (field: CompatFormFieldBuilder) => void): IPropertyFilterStage;
1279
1284
  /** Build and return the widget node without showing dialog */
@@ -1408,7 +1413,6 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
1408
1413
  private relevantNodeIds;
1409
1414
  private expandedNodesBeforeSearch;
1410
1415
  private nodesExpandedDuringSearch;
1411
- private isInitializing;
1412
1416
  ngOnInit(): void;
1413
1417
  private initializeTree;
1414
1418
  /**
@@ -1447,9 +1451,12 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
1447
1451
  * Resets search state and restores tree to original expanded state
1448
1452
  */
1449
1453
  private resetSearch;
1450
- protected onNodeToggle(event: AXTreeViewNodeToggleEvent): Promise<void>;
1454
+ /**
1455
+ * Restores selection state after tree reload.
1456
+ * Expands ancestor nodes and selects the previously selected leaf nodes.
1457
+ */
1458
+ private restoreSelectionAfterReload;
1451
1459
  protected onNodeSelect(event: AXTreeViewNodeSelectEvent): Promise<void>;
1452
- protected onSelectionChange(event: AXTreeViewSelectionChangeEvent): Promise<void>;
1453
1460
  /** Datasource callback for tree-view component. */
1454
1461
  protected datasource: (id?: string) => Promise<AXTreeViewNode[]>;
1455
1462
  protected onConfirm(): Promise<void>;
@@ -1467,55 +1474,33 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
1467
1474
  */
1468
1475
  protected isNodeSelected(nodeId: string | number | undefined): boolean;
1469
1476
  /**
1470
- * Handles checkbox change event to toggle node selection
1471
- * In multiple mode: recursively selects/deselects LEAF children only
1472
- * Parent states are calculated based on leaf descendants
1473
- */
1474
- protected handleCheckboxChange(nodeId: string | number | undefined, checked: boolean): Promise<void>;
1475
- /**
1476
- * Selects all leaf descendants of a node (and the node itself if it's a leaf)
1477
- */
1478
- private selectLeafDescendants;
1479
- /**
1480
- * Deselects all leaf descendants of a node (and the node itself if it's a leaf)
1477
+ * Expands parent nodes, collects all LEAF descendants, and selects them visually.
1478
+ * If the parent itself is a leaf (no children), it will be added.
1481
1479
  */
1482
- private deselectLeafDescendants;
1480
+ private selectAllLeafDescendants;
1483
1481
  /**
1484
- * Collects all LEAF descendant node IDs recursively
1485
- * A leaf node is one that has no children
1482
+ * Removes all LEAF descendants from selectedNodeIds.
1483
+ * For 'all' node: clears everything and uses tree's deselectAll().
1484
+ * For other nodes: tree handles visual state via user click.
1486
1485
  */
1487
- private collectLeafDescendants;
1486
+ private deselectAllLeafDescendants;
1488
1487
  /**
1489
- * Refreshes parent states in the tree based on leaf selection
1488
+ * Recursively expands parent nodes and collects LEAF node IDs.
1489
+ * When treeComponent is provided, expands each parent node before loading children.
1490
1490
  */
1491
- private refreshParentStatesInTree;
1491
+ private collectLeafNodes;
1492
1492
  /**
1493
- * Selects a node and recursively selects all its children
1493
+ * Checks if a node has children
1494
1494
  */
1495
- private selectNodeAndChildren;
1495
+ private nodeHasChildren;
1496
1496
  /**
1497
- * Collects all descendant node IDs recursively
1497
+ * Checks if a node is a leaf (has no children)
1498
1498
  */
1499
- private collectAllDescendants;
1499
+ private isLeafNodeCheck;
1500
1500
  /**
1501
- * Deselects a node and recursively deselects all its children
1501
+ * Caches node data from a tree node
1502
1502
  */
1503
- private deselectNodeAndChildren;
1504
- /**
1505
- * Recursively deselects all children of a parent node
1506
- */
1507
- private loadAndDeselectChildrenRecursively;
1508
- /**
1509
- * Updates parent states based on children selection (select/intermediate)
1510
- * Called after a node is selected/deselected to update parent checkbox states
1511
- */
1512
- private updateParentStates;
1513
- /**
1514
- * Recursively loads and selects all children of a parent node using the datasource
1515
- * This method directly calls datasource without expanding/collapsing nodes to avoid UI glitches
1516
- */
1517
- private loadAndSelectChildrenRecursively;
1518
- private updateSelectedNodes;
1503
+ private cacheNodeFromTreeNode;
1519
1504
  /**
1520
1505
  * Builds complete ancestor chains for all selected node IDs.
1521
1506
  * Returns a Map where key is the selected node ID and value is array of ancestor IDs from root to parent.
@@ -1560,7 +1545,8 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
1560
1545
  */
1561
1546
  private processRootNode;
1562
1547
  /**
1563
- * Processes child nodes: marks excluded as disabled, marks selected, and syncs selection
1548
+ * Processes child nodes: marks excluded as disabled
1549
+ * Selection marking is handled in datasource callback ONLY during initial load
1564
1550
  */
1565
1551
  private processChildNodes;
1566
1552
  /**
@@ -1585,14 +1571,6 @@ declare class AXPEntityCategoryTreeSelectorComponent extends AXBasePageComponent
1585
1571
  * Get the display title for a node.
1586
1572
  */
1587
1573
  private getNodeTitle;
1588
- /**
1589
- * Checks if a node is a leaf node (has no children)
1590
- */
1591
- private isLeafNode;
1592
- /**
1593
- * Checks if a node has children by querying the data source
1594
- */
1595
- private checkIfNodeHasChildren;
1596
1574
  private getSelectedItems;
1597
1575
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityCategoryTreeSelectorComponent, never>;
1598
1576
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityCategoryTreeSelectorComponent, "axp-entity-category-tree-selector", never, {}, {}, never, never, true, never>;