@acorex/platform 20.2.4-next.0 → 20.2.4-next.1

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 (58) hide show
  1. package/common/index.d.ts +82 -1
  2. package/core/index.d.ts +24 -2
  3. package/fesm2022/acorex-platform-common.mjs +1 -1
  4. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-layout-builder.mjs +47 -5
  6. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-layout-components.mjs +943 -39
  8. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-layout-designer.mjs +15 -122
  10. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-entity.mjs +1290 -564
  12. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-views.mjs +83 -40
  14. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  15. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-ezrf2oBR.mjs → acorex-platform-themes-default-entity-master-list-view.component-DXGLsVis.mjs} +174 -50
  16. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DXGLsVis.mjs.map +1 -0
  17. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-D8r3S2lI.mjs → acorex-platform-themes-default-entity-master-single-view.component-CVaJzWb2.mjs} +14 -11
  18. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-CVaJzWb2.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-themes-default.mjs +19 -7
  20. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  21. package/fesm2022/{acorex-platform-themes-shared-color-chooser-column.component-DjKLg513.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-DjKLg513.mjs} +1 -1
  22. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DjKLg513.mjs.map +1 -0
  23. package/fesm2022/{acorex-platform-themes-shared-color-chooser-view.component-DE0wO98F.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-DE0wO98F.mjs} +1 -1
  24. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DE0wO98F.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-themes-shared.mjs +10 -12
  26. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  27. package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-edit.component-B3SJUnGQ.mjs +50 -0
  28. package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-edit.component-B3SJUnGQ.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-view.component-BLR0JkRt.mjs +42 -0
  30. package/fesm2022/acorex-platform-widgets-extra-properties-schema-widget-view.component-BLR0JkRt.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-edit.component-hzR2FgOm.mjs +55 -0
  32. package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-edit.component-hzR2FgOm.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-view.component-IDm6Clua.mjs +50 -0
  34. package/fesm2022/acorex-platform-widgets-extra-properties-values-widget-view.component-IDm6Clua.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-widgets-extra-properties-widget-edit.component-BRO9tYDa.mjs +48 -0
  36. package/fesm2022/acorex-platform-widgets-extra-properties-widget-edit.component-BRO9tYDa.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-widgets-extra-properties-widget-view.component-CkpLimyW.mjs +42 -0
  38. package/fesm2022/acorex-platform-widgets-extra-properties-widget-view.component-CkpLimyW.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-widgets-file-list-popup.component-DFbPO0ud.mjs → acorex-platform-widgets-file-list-popup.component-B601gPsW.mjs} +66 -3
  40. package/fesm2022/acorex-platform-widgets-file-list-popup.component-B601gPsW.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-widgets.mjs +770 -118
  42. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  43. package/fesm2022/acorex-platform-workflow.mjs +3 -0
  44. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  45. package/layout/builder/index.d.ts +12 -2
  46. package/layout/components/index.d.ts +172 -6
  47. package/layout/designer/index.d.ts +3 -46
  48. package/layout/entity/index.d.ts +70 -7
  49. package/layout/views/index.d.ts +25 -7
  50. package/package.json +1 -1
  51. package/themes/default/index.d.ts +4 -1
  52. package/widgets/index.d.ts +20 -11
  53. package/workflow/index.d.ts +3 -1
  54. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-ezrf2oBR.mjs.map +0 -1
  55. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-D8r3S2lI.mjs.map +0 -1
  56. package/fesm2022/acorex-platform-themes-shared-color-chooser-column.component-DjKLg513.mjs.map +0 -1
  57. package/fesm2022/acorex-platform-themes-shared-color-chooser-view.component-DE0wO98F.mjs.map +0 -1
  58. package/fesm2022/acorex-platform-widgets-file-list-popup.component-DFbPO0ud.mjs.map +0 -1
@@ -1,11 +1,11 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Signal, InjectionToken, InputSignal, TemplateRef, ElementRef, OnInit, OnDestroy, Type, ViewContainerRef, ModuleWithProviders, QueryList } from '@angular/core';
2
+ import { Signal, InjectionToken, InputSignal, TemplateRef, ElementRef, OnInit, OnDestroy, Type, ViewContainerRef, ModuleWithProviders, WritableSignal, QueryList, EventEmitter } from '@angular/core';
3
3
  import * as _acorex_platform_core from '@acorex/platform/core';
4
- import { AXPActivityLog, AXPSystemActionType, AXPColumnQuery, AXPContextData, AXPFilterDefinition, AXPFilterQuery, AXPSortDefinition, AXPSortQuery, AXPViewQuery } from '@acorex/platform/core';
4
+ import { AXPActivityLog, AXPSystemActionType, AXPColumnQuery, AXPContextData, AXPOptionsData, AXPFilterDefinition, AXPFilterQuery, AXPSortDefinition, AXPSortQuery, AXPViewQuery } from '@acorex/platform/core';
5
5
  import { AXPMenuItem } from '@acorex/platform/common';
6
6
  import { AXValueChangedEvent, AXHtmlEvent, AXEvent } from '@acorex/cdk/common';
7
7
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
8
- import { AXPWidgetNode, AXPLayoutContextChangeEvent } from '@acorex/platform/layout/builder';
8
+ import { AXPWidgetNode, AXPLayoutContextChangeEvent, AXPWidgetProperty, AXPWidgetConfig } from '@acorex/platform/layout/builder';
9
9
  import * as _ngrx_signals from '@ngrx/signals';
10
10
  import { AXFormComponent } from '@acorex/components/form';
11
11
  import { AXPopoverComponent } from '@acorex/components/popover';
@@ -14,7 +14,7 @@ import { AXCalendarService } from '@acorex/core/date-time';
14
14
  import { AXTranslationService } from '@acorex/core/translation';
15
15
  import { Observable } from 'rxjs';
16
16
  import { AXPopupService } from '@acorex/components/popup';
17
- import { AXTabsComponent } from '@acorex/components/tabs';
17
+ import { AXTabsComponent, AXTabStripChangedEvent } from '@acorex/components/tabs';
18
18
 
19
19
  declare class AXPActivityLogComponent {
20
20
  private readonly translateService;
@@ -469,6 +469,130 @@ declare class AXPDynamicFormComponent implements OnInit {
469
469
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDynamicFormComponent, "axp-dynamic-form", never, { "formDefinition": { "alias": "formDefinition"; "required": true; "isSignal": true; }; "context": { "alias": "context"; "required": true; "isSignal": true; }; "layoutStyle": { "alias": "layoutStyle"; "required": false; "isSignal": true; }; "layoutConfig": { "alias": "layoutConfig"; "required": false; "isSignal": true; }; }, { "contextChange": "contextChange"; "contextInitiated": "contextInitiated"; "validityChange": "validityChange"; }, never, never, true, never>;
470
470
  }
471
471
 
472
+ /**
473
+ * Describes a schema-only definition for an extra property (no value).
474
+ */
475
+ interface AXPExtraPropertySchemaItem {
476
+ /** Unique key for the property (used as identifier) */
477
+ key: string;
478
+ /** Human-readable title/label */
479
+ title: string;
480
+ /** Widget name/id to render (e.g., 'text-editor', 'checkbox-editor') */
481
+ type: string;
482
+ /** Optional widget-specific options */
483
+ options?: AXPOptionsData;
484
+ }
485
+ /**
486
+ * Describes a single extra property row.
487
+ */
488
+ interface AXPExtraPropertyItem extends AXPExtraPropertySchemaItem {
489
+ /** Current value bound to the rendered widget */
490
+ value: unknown;
491
+ }
492
+ /**
493
+ * Describes an available extra property type that user can select when adding rows.
494
+ */
495
+ interface AXPExtraPropertyType {
496
+ /** Unique id for the type (it should be the same as the widget name) */
497
+ id: string;
498
+ /** UI title for selection dropdown */
499
+ title: string;
500
+ /** Default widget options applied on create */
501
+ defaultOptions?: AXPOptionsData;
502
+ }
503
+ /**
504
+ * Injection token to provide available extra property types.
505
+ */
506
+ declare const AXP_EXTRA_PROPERTY_TYPES: InjectionToken<AXPExtraPropertyType[]>;
507
+
508
+ declare class AXPExtraPropertiesComponent {
509
+ items: _angular_core.InputSignal<AXPExtraPropertyItem[]>;
510
+ mode: _angular_core.InputSignal<"edit" | "view">;
511
+ protected onContextChanged(event: AXPLayoutContextChangeEvent): void;
512
+ itemsChange: _angular_core.OutputEmitterRef<AXPExtraPropertyItem[]>;
513
+ private readonly providedTypes;
514
+ private readonly translationService;
515
+ protected newKey: WritableSignal<string>;
516
+ protected newTitle: WritableSignal<string>;
517
+ protected newTypeId: WritableSignal<string>;
518
+ protected newValue: WritableSignal<any>;
519
+ /** Local, ephemeral context for widget rendering */
520
+ protected internalContext: WritableSignal<Record<string, any>>;
521
+ private lastTypeByKey;
522
+ protected draftVersion: WritableSignal<number>;
523
+ protected draftKey: _angular_core.Signal<string>;
524
+ protected typeOptions: _angular_core.Signal<AXPExtraPropertyType[]>;
525
+ protected presetTypes: _angular_core.Signal<AXPExtraPropertyType[]>;
526
+ protected canAdd: _angular_core.Signal<boolean>;
527
+ /** Sync incoming items' values into internal context for rendering */
528
+ private readonly syncContextFromItems;
529
+ /**
530
+ * Clear item values when their widget type changes to avoid incompatible stale values
531
+ */
532
+ private readonly clearValueOnTypeChange;
533
+ protected handleAddItem(): void;
534
+ protected handleRemoveItem(key: string): void;
535
+ protected handleDrop(event: CdkDragDrop<AXPExtraPropertyItem[]>): void;
536
+ protected selectPreset(id: string): void;
537
+ private nodeCache;
538
+ private draftNodeCache?;
539
+ protected getNode(item: AXPExtraPropertyItem): AXPWidgetNode;
540
+ protected draftNode(): AXPWidgetNode;
541
+ protected newTypeChanged(val: string): void;
542
+ protected ngOnInit(): void;
543
+ protected handleTitleChange(val: string): void;
544
+ protected sanitizeKey(input: string): string;
545
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPExtraPropertiesComponent, never>;
546
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPExtraPropertiesComponent, "axp-extra-properties", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "itemsChange": "itemsChange"; }, never, never, true, never>;
547
+ }
548
+
549
+ declare class AXPExtraPropertiesSchemaComponent {
550
+ schema: _angular_core.InputSignal<AXPExtraPropertySchemaItem[]>;
551
+ mode: _angular_core.InputSignal<"edit" | "view">;
552
+ schemaChange: _angular_core.OutputEmitterRef<AXPExtraPropertySchemaItem[]>;
553
+ private readonly providedTypes;
554
+ private readonly translationService;
555
+ protected newTitle: WritableSignal<string>;
556
+ protected newTypeId: WritableSignal<string>;
557
+ protected typeOptions: _angular_core.Signal<AXPExtraPropertyType[]>;
558
+ protected canAdd: _angular_core.Signal<boolean>;
559
+ protected selectedKey: WritableSignal<string | null>;
560
+ protected selectedItem: _angular_core.Signal<AXPExtraPropertySchemaItem | null>;
561
+ constructor();
562
+ protected handleAdd(): void;
563
+ protected handleRemove(key: string): void;
564
+ protected handleDrop(event: CdkDragDrop<AXPExtraPropertySchemaItem[]>): void;
565
+ protected handleUpdateTitle(key: string, title: string): void;
566
+ protected handleUpdateType(key: string, typeId: string): void;
567
+ protected newTypeChanged(val: string): void;
568
+ protected handleTitleChange(val: string): void;
569
+ protected handleSelect(key: string): void;
570
+ protected handleViewerChanged(e: {
571
+ values: any;
572
+ mode: 'init' | 'update';
573
+ }): void;
574
+ protected deriveKey(input: string): string;
575
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPExtraPropertiesSchemaComponent, never>;
576
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPExtraPropertiesSchemaComponent, "axp-extra-properties-schema", never, { "schema": { "alias": "schema"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "schemaChange": "schemaChange"; }, never, never, true, never>;
577
+ }
578
+
579
+ declare class AXPExtraPropertiesValuesComponent {
580
+ schema: _angular_core.InputSignal<AXPExtraPropertySchemaItem[]>;
581
+ values: _angular_core.InputSignal<Record<string, any>>;
582
+ mode: _angular_core.InputSignal<"edit" | "view">;
583
+ valuesChange: _angular_core.OutputEmitterRef<Record<string, any>>;
584
+ private readonly translationService;
585
+ protected internalContext: _angular_core.WritableSignal<Record<string, any>>;
586
+ private nodeCache;
587
+ private lastTypeByKey;
588
+ protected onContextChanged(event: AXPLayoutContextChangeEvent): void;
589
+ private readonly syncContextFromInputs;
590
+ private readonly clearOnSchemaTypeChange;
591
+ protected getNode(item: AXPExtraPropertySchemaItem): AXPWidgetNode;
592
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPExtraPropertiesValuesComponent, never>;
593
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPExtraPropertiesValuesComponent, "axp-extra-properties-values", never, { "schema": { "alias": "schema"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "valuesChange": "valuesChange"; }, never, never, true, never>;
594
+ }
595
+
472
596
  declare class AXPQueryFiltersComponent {
473
597
  #private;
474
598
  protected translate: AXTranslationService;
@@ -690,5 +814,47 @@ declare class AXPWidgetItemComponent {
690
814
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetItemComponent, "axp-widget-item", never, { "widget": { "alias": "widget"; "required": true; "isSignal": true; }; "isSelected": { "alias": "isSelected"; "required": false; "isSignal": true; }; "showPinButton": { "alias": "showPinButton"; "required": false; "isSignal": true; }; "customClasses": { "alias": "customClasses"; "required": false; "isSignal": true; }; }, { "onWidgetClick": "onWidgetClick"; "onPinClick": "onPinClick"; }, never, never, true, never>;
691
815
  }
692
816
 
693
- export { AXPActivityLogComponent, AXPCompareViewComponent, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPDynamicFormComponent, AXPMenuBadgeHelper, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPWidgetItemComponent, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER };
694
- export type { AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPDynamicFormDefinition, AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition, AXPDynamicFormLayoutConfig, AXPDynamicFormLayoutStyle, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPWidgetItemClickEvent, AXPWidgetItemData };
817
+ interface AXPWidgetPropertyTab {
818
+ name: string;
819
+ title: string;
820
+ groups: {
821
+ name: string;
822
+ title: string;
823
+ isCollapsed: boolean;
824
+ props: AXPWidgetProperty[];
825
+ }[];
826
+ }
827
+ interface AXPWidgetPropertiesChangedEvent {
828
+ values: any;
829
+ mode: 'init' | 'update';
830
+ }
831
+ declare class AXPWidgetPropertyViewerComponent {
832
+ widget: _angular_core.InputSignal<AXPWidgetNode>;
833
+ mode: _angular_core.InputSignal<"simple" | "advanced">;
834
+ private widgetRegistryService;
835
+ protected currentTabIndex: WritableSignal<number>;
836
+ protected config: WritableSignal<AXPWidgetConfig<any> | null>;
837
+ protected allPoperties: AXPWidgetProperty[];
838
+ protected tabs: WritableSignal<AXPWidgetPropertyTab[]>;
839
+ protected groups: _angular_core.Signal<{
840
+ name: string;
841
+ title: string;
842
+ isCollapsed: boolean;
843
+ props: AXPWidgetProperty[];
844
+ }[]>;
845
+ protected groupCollapsedStates: Map<string, boolean>;
846
+ onChanged: EventEmitter<AXPWidgetPropertiesChangedEvent>;
847
+ protected context: WritableSignal<any>;
848
+ protected initialContext: any;
849
+ constructor();
850
+ update(values: any): void;
851
+ private fillTabs;
852
+ protected handleContextChange(e: AXPLayoutContextChangeEvent): void;
853
+ protected handleTabChange(event: AXTabStripChangedEvent): void;
854
+ protected handleCollapsedChange(group: string, collapsed: boolean): void;
855
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerComponent, never>;
856
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetPropertyViewerComponent, "axp-widget-property-viewer", never, { "widget": { "alias": "widget"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "onChanged": "onChanged"; }, never, never, true, never>;
857
+ }
858
+
859
+ export { AXPActivityLogComponent, AXPCompareViewComponent, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPDynamicFormComponent, AXPExtraPropertiesComponent, AXPExtraPropertiesSchemaComponent, AXPExtraPropertiesValuesComponent, AXPMenuBadgeHelper, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXP_EXTRA_PROPERTY_TYPES, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER };
860
+ export type { AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPDynamicFormDefinition, AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition, AXPDynamicFormLayoutConfig, AXPDynamicFormLayoutStyle, AXPExtraPropertyItem, AXPExtraPropertySchemaItem, AXPExtraPropertyType, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPWidgetItemClickEvent, AXPWidgetItemData, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyTab };
@@ -4,7 +4,7 @@ import { EventEmitter, OnChanges, OnDestroy, WritableSignal, NgZone, SimpleChang
4
4
  import { AXBasePageComponent } from '@acorex/components/page';
5
5
  import { AXTabStripChangedEvent } from '@acorex/components/tabs';
6
6
  import * as _acorex_platform_layout_builder from '@acorex/platform/layout/builder';
7
- import { AXPWidgetConfig, AXPWidgetCategory, AXPWidgetGroupEnum, AXPWidgetNode, AXPBaseWidgetComponent, AXPWidgetRegistryService, AXPLayoutWidgetComponent, AXPLayoutContextChangeEvent, AXPWidgetProperty } from '@acorex/platform/layout/builder';
7
+ import { AXPWidgetConfig, AXPWidgetCategory, AXPWidgetGroupEnum, AXPWidgetNode, AXPBaseWidgetComponent, AXPWidgetRegistryService, AXPLayoutWidgetComponent, AXPLayoutContextChangeEvent } from '@acorex/platform/layout/builder';
8
8
  import { AXPWidgetItemData, AXPWidgetItemClickEvent } from '@acorex/platform/layout/components';
9
9
  import { AXMenuItem } from '@acorex/components/menu';
10
10
  import { Subject } from 'rxjs';
@@ -404,48 +404,5 @@ declare class AXPLayoutDesignerPreviewComponent extends AXBasePageComponent {
404
404
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLayoutDesignerPreviewComponent, "axp-layout-preview", never, {}, {}, never, never, true, never>;
405
405
  }
406
406
 
407
- interface AXPWidgetPropertyTab {
408
- name: string;
409
- title: string;
410
- groups: {
411
- name: string;
412
- title: string;
413
- isCollapsed: boolean;
414
- props: AXPWidgetProperty[];
415
- }[];
416
- }
417
- interface AXPWidgetPropertiesChangedEvent {
418
- values: any;
419
- mode: 'init' | 'update';
420
- }
421
- declare class AXPWidgetPropertyViewerComponent {
422
- widget: _angular_core.InputSignal<AXPWidgetNode>;
423
- mode: _angular_core.InputSignal<"simple" | "advanced">;
424
- private widgetRegistryService;
425
- protected connector: AXPDesignerConnector<any>;
426
- protected currentTabIndex: WritableSignal<number>;
427
- protected config: WritableSignal<AXPWidgetConfig<any> | null>;
428
- protected allPoperties: AXPWidgetProperty[];
429
- protected tabs: WritableSignal<AXPWidgetPropertyTab[]>;
430
- protected groups: _angular_core.Signal<{
431
- name: string;
432
- title: string;
433
- isCollapsed: boolean;
434
- props: AXPWidgetProperty[];
435
- }[]>;
436
- protected groupCollapsedStates: Map<string, boolean>;
437
- onChanged: EventEmitter<AXPWidgetPropertiesChangedEvent>;
438
- protected context: WritableSignal<any>;
439
- protected initialContext: any;
440
- constructor();
441
- update(values: any): void;
442
- private fillTabs;
443
- protected handleContextChange(e: AXPLayoutContextChangeEvent): void;
444
- protected handleTabChange(event: AXTabStripChangedEvent): void;
445
- protected handleCollapsedChange(group: string, collapsed: boolean): void;
446
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerComponent, never>;
447
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetPropertyViewerComponent, "axp-widget-property-viewer", never, { "widget": { "alias": "widget"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "onChanged": "onChanged"; }, never, never, true, never>;
448
- }
449
-
450
- export { AXPDesignerAddWidgetButtonComponent, AXPDesignerAddWidgetLineButtonComponent, AXPDesignerAddWidgetMiniButtonComponent, AXPDesignerConnector, AXPDesignerGridDrawerComponent, AXPDesignerMessageKeys, AXPDesignerModes, AXPDesignerService, AXPDesignerWidgetPickerComponent, AXPLayoutDesignerComponent, AXPLayoutDesignerPreviewComponent, AXPLayoutDesignerPreviewViewerComponent, AXPTemplateLoadingStrategy, AXPWidgetDesignerRendererDirective, AXPWidgetPickerService, AXPWidgetPropertyViewerComponent, AXP_DESIGNER_ADD_WIDGET_MENU, AXP_DESIGNER_CLONE_MENU, AXP_DESIGNER_COPY_MENU, AXP_DESIGNER_CUT_MENU, AXP_DESIGNER_DELETE_WIDGET_MENU, AXP_DESIGNER_PASTE_MENU, AXP_DESIGNER_SAVE_AS_WIDGET_MENU, AXP_DESIGNER_SELECT_WIDGET_MENU, cloneWidgetMenu };
451
- export type { AXPDesignerAddNodeCommand, AXPDesignerAddNodeEvent, AXPDesignerContent, AXPDesignerFocusCommand, AXPDesignerFocusEvent, AXPDesignerMode, AXPDesignerPreviewMessage, AXPDesignerPreviewSize, AXPDesignerRefreshCommand, AXPDesignerRefreshEvent, AXPDesignerRegisterCommand, AXPDesignerSaveFormMessage, AXPDesignerSelectCommand, AXPDesignerSelectEvent, AXPDesignerUpdateCommand, AXPDesignerUpdateEvent, AXPDesignerWidgetComponent, AXPDisplayWidgetConfig, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyTab };
407
+ export { AXPDesignerAddWidgetButtonComponent, AXPDesignerAddWidgetLineButtonComponent, AXPDesignerAddWidgetMiniButtonComponent, AXPDesignerConnector, AXPDesignerGridDrawerComponent, AXPDesignerMessageKeys, AXPDesignerModes, AXPDesignerService, AXPDesignerWidgetPickerComponent, AXPLayoutDesignerComponent, AXPLayoutDesignerPreviewComponent, AXPLayoutDesignerPreviewViewerComponent, AXPTemplateLoadingStrategy, AXPWidgetDesignerRendererDirective, AXPWidgetPickerService, AXP_DESIGNER_ADD_WIDGET_MENU, AXP_DESIGNER_CLONE_MENU, AXP_DESIGNER_COPY_MENU, AXP_DESIGNER_CUT_MENU, AXP_DESIGNER_DELETE_WIDGET_MENU, AXP_DESIGNER_PASTE_MENU, AXP_DESIGNER_SAVE_AS_WIDGET_MENU, AXP_DESIGNER_SELECT_WIDGET_MENU, cloneWidgetMenu };
408
+ export type { AXPDesignerAddNodeCommand, AXPDesignerAddNodeEvent, AXPDesignerContent, AXPDesignerFocusCommand, AXPDesignerFocusEvent, AXPDesignerMode, AXPDesignerPreviewMessage, AXPDesignerPreviewSize, AXPDesignerRefreshCommand, AXPDesignerRefreshEvent, AXPDesignerRegisterCommand, AXPDesignerSaveFormMessage, AXPDesignerSelectCommand, AXPDesignerSelectEvent, AXPDesignerUpdateCommand, AXPDesignerUpdateEvent, AXPDesignerWidgetComponent, AXPDisplayWidgetConfig };
@@ -2,12 +2,13 @@ import * as _angular_core from '@angular/core';
2
2
  import { InjectionToken, Injector, Type } from '@angular/core';
3
3
  import { AXStyleColorType, AXDataSource, AXDataSourceFilterOption } from '@acorex/cdk/common';
4
4
  import * as _acorex_platform_common from '@acorex/platform/common';
5
- import { AXPEntityCommandScope, AXPEntity, AXPEntityAction, AXPEntityProperty, AXPEntityTableColumn, AXPRelatedEntity, AXPEntitySectionView, AXPGridLayoutOptions, AXPEntityPropertyCreateView, AXPEntityPropertyLayoutConfig, AXPQueryView, AXPEntityPropertyView, AXPCategoryEntity, AXPEntityPropertyGroup, AXPEntityMasterCreateLayoutView, AXPEntityMasterUpdateLayoutView, AXPEntityMasterSingleLayoutView, AXPEntityDetailListView, AXPQueryFilter } from '@acorex/platform/common';
5
+ import { AXPEntityCommandScope, AXPEntity, AXPEntityAction, AXPEntityProperty, AXPEntityTableColumn, AXPRelatedEntity, AXPEntitySectionView, AXPGridLayoutOptions, AXPEntityPropertyCreateView, AXPEntityPropertyLayoutConfig, AXPQueryView, AXPEntityPropertyView, AXPCategoryEntity, AXPEntityPropertyGroup, AXPEntityMasterCreateLayoutView, AXPEntityMasterUpdateLayoutView, AXPEntityMasterSingleLayoutView, AXPEntityMasterListView, AXPEntityDetailListView, AXPQueryFilter } from '@acorex/platform/common';
6
6
  import { AXPMetaData, AXPBreadcrumbItem, AXPFilterQuery, AXPFilterDefinition, AXPExecuteCommand, AXPQueryRequest, AXPPagedListResult, AXPAppStartUpService } from '@acorex/platform/core';
7
7
  import * as i3 from '@acorex/platform/layout/builder';
8
8
  import { AXPWidgetColumnNode, AXPWidgetNode, AXPLayoutBuilderService } from '@acorex/platform/layout/builder';
9
9
  import * as i1 from '@angular/router';
10
10
  import { ResolveFn } from '@angular/router';
11
+ import * as rxjs from 'rxjs';
11
12
  import { Subject } from 'rxjs';
12
13
  import * as i2 from '@acorex/platform/workflow';
13
14
  import { AXPWorkflowAction, AXPWorkflowContext, AXPWorkflow } from '@acorex/platform/workflow';
@@ -86,7 +87,17 @@ declare class AXPEntityDetailListViewModel {
86
87
  applyFilterAndSort(): Promise<void>;
87
88
  columns: _angular_core.Signal<AXPEntityListViewColumnViewModel[]>;
88
89
  executeCommand(commandName: string, data?: any): Promise<void>;
89
- private evaluateExpressions;
90
+ evaluateExpressions: (actionData: {
91
+ [key: string]: string;
92
+ } | string) => Promise<any>;
93
+ /**
94
+ * Evaluate hidden/disabled expressions for primary actions and return the visible list.
95
+ */
96
+ getPrimaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
97
+ /**
98
+ * Evaluate hidden/disabled expressions for secondary actions and return the visible list.
99
+ */
100
+ getSecondaryActions(): Promise<AXPEntityCommandTriggerViewModel[]>;
90
101
  }
91
102
 
92
103
  declare class AXPEntityCreateViewSectionViewModel {
@@ -174,9 +185,12 @@ declare class AXPEntityMasterListViewModel {
174
185
  private readonly settings;
175
186
  private readonly widgetResolver;
176
187
  private readonly expressionEvaluator;
188
+ private readonly commandService;
177
189
  private readonly filterOperatorMiddleware;
178
190
  private settingEntityKey;
179
191
  private readonly destroyed;
192
+ private lastAppliedSortKey;
193
+ private lastAppliedFilterKey;
180
194
  events$: Subject<{
181
195
  action: string;
182
196
  meta?: any;
@@ -187,7 +201,7 @@ declare class AXPEntityMasterListViewModel {
187
201
  dataSource: AXDataSource<unknown>;
188
202
  constructor(injector: Injector, config: AXPEntity);
189
203
  applySettings(): Promise<void>;
190
- saveSettings(changesType: 'columnSizes' | 'columnOrders' | 'view' | 'pageSize', data?: any): Promise<void>;
204
+ saveSettings(changesType: 'columnSizes' | 'columnOrders' | 'view' | 'pageSize' | 'filters' | 'sorts', data?: any): Promise<void>;
191
205
  selectedItems: _angular_core.WritableSignal<any[]>;
192
206
  parentKey: _angular_core.Signal<string | undefined>;
193
207
  hasSelectedItems: _angular_core.Signal<boolean>;
@@ -280,10 +294,14 @@ declare class AXPEntityMasterSingleViewModel {
280
294
  private readonly session;
281
295
  private readonly formatService;
282
296
  private readonly workflow;
297
+ private readonly commandService;
283
298
  private readonly destroyed;
284
299
  private translateService;
285
300
  private entityService;
286
301
  private expressionEvaluator;
302
+ private entityDefinitionRegistryService;
303
+ private _updateTrigger;
304
+ readonly updateTrigger: _angular_core.Signal<number>;
287
305
  constructor(injector: Injector, config: AXPEntity, entityData: any);
288
306
  context: _angular_core.WritableSignal<any>;
289
307
  private actions;
@@ -440,6 +458,10 @@ interface AXPEntityModifierContext {
440
458
  get(): AXPEntityMasterSingleLayoutView | undefined;
441
459
  update(updater: (c: AXPEntityMasterSingleLayoutView | undefined) => AXPEntityMasterSingleLayoutView): AXPEntityModifierContext;
442
460
  };
461
+ list: {
462
+ get(): AXPEntityMasterListView | undefined;
463
+ update(updater: (c: AXPEntityMasterListView | undefined) => AXPEntityMasterListView): AXPEntityModifierContext;
464
+ };
443
465
  };
444
466
  detail: {
445
467
  get(): NonNullable<AXPEntity['interfaces']>['detail'] | undefined;
@@ -464,7 +486,7 @@ declare function actionExists(actions: any[] | undefined, commandName: string, n
464
486
  interface AXPEntityActionPlugin {
465
487
  name: string;
466
488
  order?: number;
467
- apply: (ctx: AXPEntityModifierContext, options?: any) => void;
489
+ apply: (ctx: AXPEntityModifierContext, options?: any) => Promise<void> | void;
468
490
  }
469
491
  declare const AXP_ENTITY_ACTION_PLUGIN: InjectionToken<AXPEntityActionPlugin[]>;
470
492
 
@@ -473,9 +495,10 @@ declare class AXPEntityMiddleware {
473
495
  private patternModifiers;
474
496
  protected providedModifiers: AXPEntityModifierProvider[];
475
497
  protected providedActionPlugins: AXPEntityActionPlugin[];
498
+ protected injector: Injector;
476
499
  constructor();
477
500
  register(entityName: string | RegExp, modifier: AXPEntityModifier): void;
478
- process(entity: AXPEntity): AXPEntity;
501
+ process(entity: AXPEntity): Promise<AXPEntity>;
479
502
  private wildcardToRegExp;
480
503
  private normalizeRegExp;
481
504
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityMiddleware, never>;
@@ -636,9 +659,25 @@ declare class AXPEntityDefinitionRegistryService {
636
659
  private providers;
637
660
  private resolver;
638
661
  private middleware;
662
+ private onChanged;
663
+ get onChanged$(): rxjs.Observable<{
664
+ name: string;
665
+ }>;
639
666
  preload(): Promise<void>;
640
667
  private entities;
641
668
  private entityResolver;
669
+ /**
670
+ * Force re-load and re-process entity definitions, then re-register them.
671
+ * Overloads:
672
+ * - refresh(): refresh all registered entities
673
+ * - refresh(fullName: string): refresh by fully-qualified name `<module>.<entity>`
674
+ * - refresh(moduleName: string, entityName: string): refresh by parts
675
+ */
676
+ refresh(): Promise<void>;
677
+ refresh(fullName: string): Promise<void>;
678
+ refresh(moduleName: string, entityName: string): Promise<void>;
679
+ /** Executes the actual refresh for a single entity */
680
+ private refreshOne;
642
681
  /**
643
682
  * Registers a new entity configuration. Entities are identified uniquely by a combination
644
683
  * of their module and name.
@@ -894,5 +933,29 @@ declare function detectEntityChanges(oldObj: any, newObj: any): AXPEntityChangeS
894
933
 
895
934
  declare const eventDispatchMiddleware: AXPEntityStorageMiddleware;
896
935
 
897
- export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEntityApplyUpdatesAction, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE, actionExists, createModifierContext, detectEntityChanges, ensureListActions, entityDetailsCreateActions, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, eventDispatchMiddleware };
898
- export type { AXPAuditable, AXPDataSeeder, AXPEntityActionPlugin, AXPEntityChangeSet, AXPEntityConfigs, AXPEntityCreateDto, AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader, AXPEntityDeleteOptions, AXPEntityDetailDto, AXPEntityListItemDto, AXPEntityMasterListViewSortPropViewModel, AXPEntityModel, AXPEntityModifier, AXPEntityModifierContext, AXPEntityModifierProvider, AXPEntityOp, AXPEntityOutputDto, AXPEntityPreloadEntity, AXPEntityStorageContext, AXPEntityStorageMiddleware, AXPEntityUpdateDto };
936
+ /**
937
+ * Map of column name -> width value
938
+ * Example: { title: '300px', description: '300px' }
939
+ */
940
+ type ColumnWidthConfig = Record<string, string | number>;
941
+ /**
942
+ * Default widths for common text columns
943
+ */
944
+ declare const DEFAULT_COLUMN_WIDTHS: ColumnWidthConfig;
945
+ /**
946
+ * Factory to create a column width middleware using provided config map.
947
+ * Sets width for columns defined in the map if not already defined on the column.
948
+ */
949
+ declare const columnWidthMiddlewareFactory: (widths: ColumnWidthConfig) => AXPEntityModifier;
950
+ /**
951
+ * Helper to create a provider for the column width middleware.
952
+ * By default it applies to all entities using the '*' pattern.
953
+ */
954
+ declare const createColumnWidthMiddlewareProvider: (widths: ColumnWidthConfig, entityName?: string | RegExp) => AXPEntityModifierProvider;
955
+ /**
956
+ * Default provider registered with the default map.
957
+ */
958
+ declare const columnWidthMiddlewareProvider: AXPEntityModifierProvider;
959
+
960
+ export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEntityApplyUpdatesAction, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityEventDispatcherService, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPMiddlewareEntityStorageService, AXPModifyEntitySectionWorkflow, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER, AXP_ENTITY_MODIFIER, AXP_ENTITY_STORAGE_BACKEND, AXP_ENTITY_STORAGE_MIDDLEWARE, DEFAULT_COLUMN_WIDTHS, actionExists, columnWidthMiddlewareFactory, columnWidthMiddlewareProvider, createColumnWidthMiddlewareProvider, createModifierContext, detectEntityChanges, ensureListActions, entityDetailsCreateActions, entityDetailsCrudActions, entityDetailsEditAction, entityDetailsReferenceCondition, entityDetailsReferenceCreateActions, entityDetailsSimpleCondition, entityMasterBulkDeleteAction, entityMasterCreateAction, entityMasterCrudActions, entityMasterDeleteAction, entityMasterRecordActions, entityMasterViewAction, entityOverrideDetailsViewAction, eventDispatchMiddleware };
961
+ export type { AXPAuditable, AXPDataSeeder, AXPEntityActionPlugin, AXPEntityChangeSet, AXPEntityConfigs, AXPEntityCreateDto, AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader, AXPEntityDeleteOptions, AXPEntityDetailDto, AXPEntityListItemDto, AXPEntityMasterListViewSortPropViewModel, AXPEntityModel, AXPEntityModifier, AXPEntityModifierContext, AXPEntityModifierProvider, AXPEntityOp, AXPEntityOutputDto, AXPEntityPreloadEntity, AXPEntityStorageContext, AXPEntityStorageMiddleware, AXPEntityUpdateDto, ColumnWidthConfig };
@@ -16,7 +16,8 @@ import { AXPSessionService } from '@acorex/platform/auth';
16
16
  import { AXPHomePageService } from '@acorex/platform/common';
17
17
  import { AXBasePageComponent } from '@acorex/components/page';
18
18
  import * as _acorex_platform_layout_builder from '@acorex/platform/layout/builder';
19
- import { AXPWidgetNode, AXPPageStatus, AXPLayoutContextChangeEvent } from '@acorex/platform/layout/builder';
19
+ import { AXPWidgetNode, AXPPageStatus, AXPWidgetContainerComponent, AXPLayoutContextChangeEvent } from '@acorex/platform/layout/builder';
20
+ import { AXFormComponent } from '@acorex/components/form';
20
21
  import * as _acorex_platform_layout_views from '@acorex/platform/layout/views';
21
22
 
22
23
  declare abstract class AXPPageLayoutBase {
@@ -426,6 +427,7 @@ interface AXPLayoutDetailsViewTabItem {
426
427
  interface AXPLayoutDetailsViewPage {
427
428
  id: string;
428
429
  title: string;
430
+ label: string;
429
431
  description?: string;
430
432
  icon?: string;
431
433
  content?: AXPWidgetNode[];
@@ -463,13 +465,14 @@ interface AXPLayoutDetailsViewAdapter {
463
465
 
464
466
  declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
465
467
  adapter: _angular_core.Signal<AXPLayoutDetailsViewAdapter | null>;
466
- adapterContext: _angular_core.Signal<Record<string, any>>;
468
+ rootContext: _angular_core.Signal<Record<string, any>>;
467
469
  previousContext: _angular_core.Signal<Record<string, any>>;
468
470
  context: _angular_core.Signal<Record<string, any>>;
469
471
  scope: _angular_core.Signal<AXPExpressionEvaluatorScope | null>;
470
472
  status: _angular_core.Signal<AXPPageStatus>;
471
473
  currentPage: _angular_core.Signal<AXPLayoutDetailsViewPage | null>;
472
474
  currentTab: _angular_core.Signal<AXPLayoutDetailsViewTabItem | null>;
475
+ pageSelectedRows: _angular_core.Signal<any[]>;
473
476
  icon: _angular_core.Signal<string | null>;
474
477
  content: _angular_core.Signal<_acorex_platform_layout_builder.AXPWidgetNode[]>;
475
478
  showPages: _angular_core.Signal<boolean>;
@@ -477,11 +480,14 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
477
480
  isBusy: _angular_core.Signal<boolean>;
478
481
  isSaving: _angular_core.Signal<boolean>;
479
482
  isDirty: _angular_core.Signal<boolean>;
483
+ changesCount: _angular_core.Signal<number>;
480
484
  isLoaded: _angular_core.Signal<boolean>;
485
+ currentPageSelectedRows: _angular_core.Signal<any[]>;
481
486
  loadAdapter: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
482
487
  loadPage: (pageId?: string) => Promise<void>;
483
488
  load: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
484
489
  updateContext: (context: any) => void;
490
+ updatePageSelectedRows: (rows: any[]) => void;
485
491
  currentPageTitle: () => string | null;
486
492
  currentPageDescription: () => string | null;
487
493
  currentPagePrimaryActions: () => Promise<any>;
@@ -502,16 +508,17 @@ declare const AXPLayoutDetailsViewViewModel: _angular_core.Type<{
502
508
  command?: AXPExecuteCommand;
503
509
  }[]>;
504
510
  discard: () => Promise<void>;
505
- save: (command: AXPExecuteCommand) => Promise<void>;
511
+ save: (command: AXPExecuteCommand, form: AXFormComponent) => Promise<void>;
506
512
  } & _ngrx_signals.StateSource<{
507
513
  adapter: AXPLayoutDetailsViewAdapter | null;
508
- adapterContext: Record<string, any>;
514
+ rootContext: Record<string, any>;
509
515
  previousContext: Record<string, any>;
510
516
  context: Record<string, any>;
511
517
  scope: AXPExpressionEvaluatorScope | null;
512
518
  status: AXPPageStatus;
513
519
  currentPage: AXPLayoutDetailsViewPage | null;
514
520
  currentTab: AXPLayoutDetailsViewTabItem | null;
521
+ pageSelectedRows: any[];
515
522
  }>>;
516
523
 
517
524
  declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent implements OnInit, OnDestroy {
@@ -519,13 +526,14 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
519
526
  adapter: _angular_core.InputSignal<AXPLayoutDetailsViewAdapter>;
520
527
  protected vm: {
521
528
  adapter: _angular_core.Signal<AXPLayoutDetailsViewAdapter | null>;
522
- adapterContext: _angular_core.Signal<Record<string, any>>;
529
+ rootContext: _angular_core.Signal<Record<string, any>>;
523
530
  previousContext: _angular_core.Signal<Record<string, any>>;
524
531
  context: _angular_core.Signal<Record<string, any>>;
525
532
  scope: _angular_core.Signal<_acorex_platform_core.AXPExpressionEvaluatorScope | null>;
526
533
  status: _angular_core.Signal<_acorex_platform_layout_builder.AXPPageStatus>;
527
534
  currentPage: _angular_core.Signal<AXPLayoutDetailsViewPage | null>;
528
535
  currentTab: _angular_core.Signal<_acorex_platform_layout_views.AXPLayoutDetailsViewTabItem | null>;
536
+ pageSelectedRows: _angular_core.Signal<any[]>;
529
537
  icon: _angular_core.Signal<string | null>;
530
538
  content: _angular_core.Signal<_acorex_platform_layout_builder.AXPWidgetNode[]>;
531
539
  showPages: _angular_core.Signal<boolean>;
@@ -533,11 +541,14 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
533
541
  isBusy: _angular_core.Signal<boolean>;
534
542
  isSaving: _angular_core.Signal<boolean>;
535
543
  isDirty: _angular_core.Signal<boolean>;
544
+ changesCount: _angular_core.Signal<number>;
536
545
  isLoaded: _angular_core.Signal<boolean>;
546
+ currentPageSelectedRows: _angular_core.Signal<any[]>;
537
547
  loadAdapter: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
538
548
  loadPage: (pageId?: string) => Promise<void>;
539
549
  load: (adapter: AXPLayoutDetailsViewAdapter) => Promise<void>;
540
550
  updateContext: (context: any) => void;
551
+ updatePageSelectedRows: (rows: any[]) => void;
541
552
  currentPageTitle: () => string | null;
542
553
  currentPageDescription: () => string | null;
543
554
  currentPagePrimaryActions: () => Promise<any>;
@@ -558,23 +569,29 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
558
569
  command?: AXPExecuteCommand;
559
570
  }[]>;
560
571
  discard: () => Promise<void>;
561
- save: (command: AXPExecuteCommand) => Promise<void>;
572
+ save: (command: AXPExecuteCommand, form: AXFormComponent) => Promise<void>;
562
573
  } & _ngrx_signals.StateSource<{
563
574
  adapter: AXPLayoutDetailsViewAdapter | null;
564
- adapterContext: Record<string, any>;
575
+ rootContext: Record<string, any>;
565
576
  previousContext: Record<string, any>;
566
577
  context: Record<string, any>;
567
578
  scope: _acorex_platform_core.AXPExpressionEvaluatorScope | null;
568
579
  status: _acorex_platform_layout_builder.AXPPageStatus;
569
580
  currentPage: AXPLayoutDetailsViewPage | null;
570
581
  currentTab: _acorex_platform_layout_views.AXPLayoutDetailsViewTabItem | null;
582
+ pageSelectedRows: any[];
571
583
  }>;
584
+ private onSelectionChangeSubscription?;
585
+ protected form: _angular_core.Signal<AXFormComponent | undefined>;
586
+ protected widgetContainer: _angular_core.Signal<AXPWidgetContainerComponent | undefined>;
572
587
  protected footerPrimaryActions: _angular_core.WritableSignal<AXPActionMenuItem[]>;
573
588
  protected footerSecondaryActions: _angular_core.WritableSignal<AXPActionMenuItem[]>;
574
589
  protected footerActions: _angular_core.Signal<AXPActionMenuItem[]>;
575
590
  protected hasVisibleFooterPrimaryActions: _angular_core.Signal<boolean>;
576
591
  protected hasVisibleFooterSecondaryActions: _angular_core.Signal<boolean>;
592
+ protected hasFooter: _angular_core.Signal<boolean>;
577
593
  ngOnInit(): Promise<void>;
594
+ ngAfterViewInit(): Promise<void>;
578
595
  ngOnDestroy(): void;
579
596
  protected handleOnContextChanged(e: AXPLayoutContextChangeEvent): void;
580
597
  protected handleSelectPage(page: AXPLayoutDetailsViewPage): void;
@@ -588,6 +605,7 @@ declare class AXPLayoutDetailsViewComponent extends AXPPageLayoutBaseComponent i
588
605
  protected getPageTitle(): Promise<string>;
589
606
  getPageDescription(): Promise<string | null>;
590
607
  getBackButton(): Promise<AXPBackButton | null>;
608
+ getPageBadge(): Promise<AXPBadge | null>;
591
609
  onBackButtonClick(): Promise<void>;
592
610
  execute(command: AXPExecuteCommand): Promise<void>;
593
611
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLayoutDetailsViewComponent, never>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acorex/platform",
3
- "version": "20.2.4-next.0",
3
+ "version": "20.2.4-next.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=19.0.0",
6
6
  "@angular/core": ">=19.0.0",
@@ -7,7 +7,7 @@ import { AXValueChangedEvent } from '@acorex/cdk/common';
7
7
  import { AXActionSheetService } from '@acorex/components/action-sheet';
8
8
  import { AXDataTableComponent, AXDataTableRowDbClick, AXRowCommandItem, AXRowCommandItemClickEvent } from '@acorex/components/data-table';
9
9
  import { AXUnsubscriber } from '@acorex/core/utils';
10
- import { AXPEntityDetailListViewModel } from '@acorex/platform/layout/entity';
10
+ import { AXPEntityCommandTriggerViewModel, AXPEntityDetailListViewModel } from '@acorex/platform/layout/entity';
11
11
  import * as _acorex_platform_core from '@acorex/platform/core';
12
12
  import * as _acorex_platform_common from '@acorex/platform/common';
13
13
  import { AXPMenuItem, AXPSettingService } from '@acorex/platform/common';
@@ -81,6 +81,8 @@ declare class AXPEntityDetailListViewComponent {
81
81
  menuOrientation: _acorex_platform_themes_shared.AXPMenuOrientation;
82
82
  isPrinting: boolean;
83
83
  }>;
84
+ protected toolbarPrimaryActions: _angular_core.WritableSignal<AXPEntityCommandTriggerViewModel[]>;
85
+ protected toolbarSecondaryActions: _angular_core.WritableSignal<AXPEntityCommandTriggerViewModel[]>;
84
86
  vm: AXPEntityDetailListViewModel;
85
87
  protected focusedRow: any;
86
88
  grid: AXDataTableComponent;
@@ -96,6 +98,7 @@ declare class AXPEntityDetailListViewComponent {
96
98
  protected getDropdownRowItems: (rowData: unknown) => Promise<AXRowCommandItem[]>;
97
99
  protected handleSelectedRowsChange(rows: unknown[]): Promise<void>;
98
100
  protected handleRowCommandClick(e: AXRowCommandItemClickEvent): Promise<void>;
101
+ private refreshToolbarActions;
99
102
  protected destroy(): void;
100
103
  ngOnDestroy(): void;
101
104
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityDetailListViewComponent, never>;