@acorex/platform 20.6.0-next.8 → 21.0.0-next.0

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 (88) hide show
  1. package/auth/index.d.ts +91 -12
  2. package/common/index.d.ts +615 -44
  3. package/core/index.d.ts +718 -422
  4. package/fesm2022/acorex-platform-auth.mjs +152 -39
  5. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  6. package/fesm2022/acorex-platform-common.mjs +1009 -112
  7. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  8. package/fesm2022/acorex-platform-core.mjs +887 -408
  9. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-domain.mjs +99 -11
  11. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-layout-builder.mjs +555 -492
  13. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-layout-components.mjs +2446 -2733
  15. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  16. package/fesm2022/acorex-platform-layout-designer.mjs +9 -9
  17. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-layout-entity.mjs +9708 -4721
  19. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  20. package/fesm2022/acorex-platform-layout-views.mjs +32 -26
  21. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  22. package/fesm2022/acorex-platform-layout-widget-core.mjs +252 -182
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  24. package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-D0y-9nE5.mjs → acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs} +2 -2
  25. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +1 -0
  26. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs +30 -0
  27. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +1 -0
  28. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-C1l2KSDa.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs} +2 -2
  29. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +1 -0
  30. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-D-31ej0C.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs} +2 -2
  31. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +1 -0
  32. package/fesm2022/acorex-platform-layout-widgets.mjs +9789 -6817
  33. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  34. package/fesm2022/acorex-platform-runtime.mjs +79 -3
  35. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  36. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs +157 -0
  37. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +1 -0
  38. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs +1542 -0
  39. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs.map +1 -0
  40. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +101 -0
  41. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +1 -0
  42. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-B_P0a5KW.mjs → acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs} +3 -3
  43. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +1 -0
  44. package/fesm2022/acorex-platform-themes-default.mjs +282 -43
  45. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  46. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs +55 -0
  47. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +1 -0
  48. package/fesm2022/acorex-platform-themes-shared.mjs +42 -137
  49. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  50. package/fesm2022/acorex-platform-workflow.mjs +658 -45
  51. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  52. package/layout/builder/index.d.ts +10 -34
  53. package/layout/components/index.d.ts +694 -375
  54. package/layout/designer/index.d.ts +4 -4
  55. package/layout/entity/index.d.ts +802 -183
  56. package/layout/views/index.d.ts +5 -58
  57. package/layout/widget-core/index.d.ts +63 -75
  58. package/layout/widgets/README.md +0 -1
  59. package/layout/widgets/index.d.ts +498 -129
  60. package/package.json +5 -5
  61. package/runtime/index.d.ts +36 -8
  62. package/themes/default/index.d.ts +44 -75
  63. package/themes/shared/index.d.ts +11 -49
  64. package/workflow/index.d.ts +401 -90
  65. package/fesm2022/acorex-platform-layout-entity-create-entity.command-DGeylNSY.mjs +0 -52
  66. package/fesm2022/acorex-platform-layout-entity-create-entity.command-DGeylNSY.mjs.map +0 -1
  67. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-fhhZOWul.mjs +0 -50
  68. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-fhhZOWul.mjs.map +0 -1
  69. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-C3Qbs0fz.mjs +0 -42
  70. package/fesm2022/acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-C3Qbs0fz.mjs.map +0 -1
  71. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-CngQBUlN.mjs +0 -55
  72. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-CngQBUlN.mjs.map +0 -1
  73. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-view.component-DSNo9e4W.mjs +0 -50
  74. package/fesm2022/acorex-platform-layout-widgets-extra-properties-values-widget-view.component-DSNo9e4W.mjs.map +0 -1
  75. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-edit.component-CL0CwEHX.mjs +0 -48
  76. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-edit.component-CL0CwEHX.mjs.map +0 -1
  77. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-view.component-B6Fi0xTw.mjs +0 -42
  78. package/fesm2022/acorex-platform-layout-widgets-extra-properties-widget-view.component-B6Fi0xTw.mjs.map +0 -1
  79. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-D0y-9nE5.mjs.map +0 -1
  80. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-C1l2KSDa.mjs.map +0 -1
  81. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-D-31ej0C.mjs.map +0 -1
  82. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-WbPPqDON.mjs +0 -115
  83. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-WbPPqDON.mjs.map +0 -1
  84. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CD7rJIMh.mjs +0 -803
  85. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CD7rJIMh.mjs.map +0 -1
  86. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BTA6h7Xd.mjs +0 -101
  87. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BTA6h7Xd.mjs.map +0 -1
  88. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-B_P0a5KW.mjs.map +0 -1
@@ -1,19 +1,18 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Signal, InjectionToken, InputSignal, TemplateRef, ElementRef, OnInit, OnDestroy, Type, ViewContainerRef, ModuleWithProviders, WritableSignal, QueryList, EventEmitter } from '@angular/core';
2
+ import { Signal, InjectionToken, InputSignal, TemplateRef, ElementRef, OnInit, OnDestroy, Type, ViewContainerRef, ModuleWithProviders, QueryList, OnChanges, EventEmitter, WritableSignal } from '@angular/core';
3
3
  import * as _acorex_platform_core from '@acorex/platform/core';
4
- import { AXPActivityLog, AXPSystemActionType, AXPCategoryEntity, AXPColumnQuery, AXPContextData, AXPOptionsData, AXPGridLayoutOptions, AXPFilterDefinition, AXPFilterQuery, AXPSortDefinition, AXPSortQuery, AXPMetaData, AXPViewQuery } from '@acorex/platform/core';
4
+ import { AXPActivityLog, AXPSystemActionType, AXPCategoryEntity, AXPColumnQuery, AXPContextData, AXPOptionsData, AXPFilterDefinition, AXPFilterQuery, AXPSortDefinition, AXPSortQuery, AXPMetaData, AXPViewQuery } from '@acorex/platform/core';
5
5
  import { AXPMenuItem } from '@acorex/platform/common';
6
6
  import { AXValueChangedEvent, AXClickEvent, AXDataSource, AXDataSourceFilterOption, AXHtmlEvent, AXEvent } from '@acorex/cdk/common';
7
- import { AXTreeViewComponent, AXTreeItemClickBaseEvent } from '@acorex/components/tree-view';
7
+ import { AXTreeViewLegacyComponent, AXTreeItemClickBaseEventLegacy } from '@acorex/components/tree-view-legacy';
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 { AXPWidgetNode, AXPWidgetCoreContextChangeEvent, AXPWidgetRendererDirective, AXPWidgetProperty, AXPWidgetConfig } from '@acorex/platform/layout/widget-core';
11
+ import { AXPWidgetNode, AXPWidgetRendererDirective, AXPWidgetCoreContextChangeEvent, AXPWidgetProperty, AXPWidgetConfig } from '@acorex/platform/layout/widget-core';
12
12
  import * as _ngrx_signals from '@ngrx/signals';
13
13
  import { AXDataTableComponent, AXDataTableRowDbClick, AXDataTableRowClick } from '@acorex/components/data-table';
14
14
  import { AXBasePageComponent } from '@acorex/components/page';
15
15
  import { AXDropListDroppedEvent } from '@acorex/cdk/drag-drop';
16
- import { AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition, AXPDynamicFormDefinition } from '@acorex/platform/layout/builder';
17
16
  import { AXTagBoxComponent } from '@acorex/components/tag-box';
18
17
  import { AXCalendarService } from '@acorex/core/date-time';
19
18
  import { AXTabStripChangedEvent, AXTabsComponent } from '@acorex/components/tabs';
@@ -262,7 +261,7 @@ declare class AXPCategoryTreeComponent {
262
261
  nodeDelete: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
263
262
  searchChange: _angular_core.OutputEmitterRef<string>;
264
263
  collapseChange: _angular_core.OutputEmitterRef<AXPCategoryEntity<string>>;
265
- tree: _angular_core.Signal<AXTreeViewComponent | undefined>;
264
+ tree: _angular_core.Signal<AXTreeViewLegacyComponent | undefined>;
266
265
  isLoading: _angular_core.WritableSignal<boolean>;
267
266
  searchValue: _angular_core.WritableSignal<string>;
268
267
  private loadingTimeoutId;
@@ -274,8 +273,8 @@ declare class AXPCategoryTreeComponent {
274
273
  loadRootNodes(): Promise<void>;
275
274
  loadChildNodes(parentId: string): Promise<void>;
276
275
  searchNodes(searchValue: string): Promise<void>;
277
- handleNodeClick(event: AXTreeItemClickBaseEvent): Promise<void>;
278
- handleCollapseChanged(event: AXTreeItemClickBaseEvent): Promise<void>;
276
+ handleNodeClick(event: AXTreeItemClickBaseEventLegacy): Promise<void>;
277
+ handleCollapseChanged(event: AXTreeItemClickBaseEventLegacy): Promise<void>;
279
278
  handleSearchChange(event: AXValueChangedEvent): Promise<void>;
280
279
  handleCreateRootClick(event: AXClickEvent): Promise<void>;
281
280
  handleCreateChildClick(node: AXPCategoryTreeNode, event: AXClickEvent): Promise<void>;
@@ -308,7 +307,7 @@ declare class AXPColorPalettePickerComponent {
308
307
  /**
309
308
  * Currently selected color
310
309
  */
311
- selectedColor: _angular_core.InputSignal<string | undefined>;
310
+ selectedColor: _angular_core.InputSignal<string | null | undefined>;
312
311
  /**
313
312
  * Disable the entire palette
314
313
  */
@@ -318,15 +317,19 @@ declare class AXPColorPalettePickerComponent {
318
317
  */
319
318
  readonly: _angular_core.InputSignal<boolean>;
320
319
  /**
321
- * Emits when a color is selected
320
+ * Show empty/null option to clear selection
322
321
  */
323
- colorSelected: _angular_core.OutputEmitterRef<string>;
322
+ allowClear: _angular_core.InputSignal<boolean>;
323
+ /**
324
+ * Emits when a color is selected or cleared (null/undefined)
325
+ */
326
+ colorSelected: _angular_core.OutputEmitterRef<string | null | undefined>;
324
327
  /**
325
328
  * Handle color selection
326
329
  */
327
- protected handleColorSelect(color: string): void;
330
+ protected handleColorSelect(color: string | null | undefined): void;
328
331
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPColorPalettePickerComponent, never>;
329
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPColorPalettePickerComponent, "axp-color-palette-picker", never, { "colors": { "alias": "colors"; "required": false; "isSignal": true; }; "selectedColor": { "alias": "selectedColor"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "colorSelected": "colorSelected"; }, never, never, true, never>;
332
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPColorPalettePickerComponent, "axp-color-palette-picker", never, { "colors": { "alias": "colors"; "required": false; "isSignal": true; }; "selectedColor": { "alias": "selectedColor"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "allowClear": { "alias": "allowClear"; "required": false; "isSignal": true; }; }, { "colorSelected": "colorSelected"; }, never, never, true, never>;
330
333
  }
331
334
 
332
335
  interface AXPColumnItemListItem {
@@ -422,6 +425,7 @@ interface AXPComponentSlotConfig {
422
425
  priority?: number;
423
426
  component?: Type<any>;
424
427
  condition?: ((context?: AXPContextData) => (boolean | Promise<boolean>)) | string;
428
+ features?: string[];
425
429
  loadComponent?: () => Type<any> | Promise<Type<any>>;
426
430
  options?: AXPOptionsData | (() => AXPOptionsData) | (() => Promise<AXPOptionsData>);
427
431
  }
@@ -442,6 +446,7 @@ declare class AXPComponentSlotDirective implements OnInit {
442
446
  private registryService;
443
447
  private injector;
444
448
  private evaluator;
449
+ private sessionService;
445
450
  viewContainerRef: ViewContainerRef;
446
451
  contextStore: {
447
452
  data: _angular_core.Signal<AXPContextData>;
@@ -473,6 +478,7 @@ declare class AXPComponentSlotDirective implements OnInit {
473
478
  isEmpty: _angular_core.Signal<boolean>;
474
479
  private _viewCount;
475
480
  private componentRefs;
481
+ private placeholderRefs;
476
482
  constructor();
477
483
  ngOnInit(): Promise<void>;
478
484
  loadComponents(): Promise<void>;
@@ -516,10 +522,15 @@ interface AXPDataSelectorConfig {
516
522
  dataSource: AXDataSource<any>;
517
523
  columns: AXPDataSelectorColumn[];
518
524
  selectionMode: 'single' | 'multiple';
519
- searchFields?: string[];
525
+ searchFields?: {
526
+ name: string;
527
+ title: string;
528
+ }[];
529
+ initialSearchTerm?: string;
520
530
  parentField?: string;
521
531
  allowCreate?: boolean;
522
532
  filters?: AXDataSourceFilterOption;
533
+ selectedItemIds?: string[] | number[];
523
534
  categoryFilter?: {
524
535
  enabled: boolean;
525
536
  title: string;
@@ -532,17 +543,25 @@ interface AXPDataSelectorConfig {
532
543
  declare class AXPDataSelectorComponent extends AXBasePageComponent {
533
544
  protected config: _angular_core.WritableSignal<AXPDataSelectorConfig>;
534
545
  protected searchTerm: string;
546
+ protected searchPlaceholderText: _angular_core.WritableSignal<string>;
535
547
  protected filter: AXDataSourceFilterOption;
536
548
  protected grid: _angular_core.Signal<AXDataTableComponent | undefined>;
537
- protected initialSelectedItems: any[];
538
549
  protected selectedItems: _angular_core.WritableSignal<any[]>;
550
+ private initialSelectionApplied;
551
+ private userHasInteracted;
552
+ private isApplyingInitialSelection;
553
+ private initialSelectedItems;
539
554
  protected activeCategoryFilter: _angular_core.WritableSignal<{
540
555
  node: AXPCategoryEntity;
541
556
  filterValue: any;
542
557
  } | null>;
558
+ private placeholderUpdateToken;
559
+ private initialSearchApplied;
560
+ private readonly translationService;
561
+ constructor();
543
562
  protected allowSelect: _angular_core.Signal<boolean>;
563
+ protected selectedCount: _angular_core.Signal<number>;
544
564
  protected hasSearch: _angular_core.Signal<boolean | undefined>;
545
- protected searchPlaceholder: _angular_core.Signal<string>;
546
565
  protected categoryTreeConfig: _angular_core.Signal<{
547
566
  textField: string;
548
567
  valueField: string;
@@ -560,7 +579,7 @@ declare class AXPDataSelectorComponent extends AXBasePageComponent {
560
579
  canCreateChild: boolean;
561
580
  }>;
562
581
  protected ngOnInit(): void;
563
- protected ngAfterViewInit(): void;
582
+ protected ngAfterViewInit(): Promise<void>;
564
583
  protected handleRowDbClick(e: AXDataTableRowDbClick): void;
565
584
  protected handleRowClick(e: AXDataTableRowClick): void;
566
585
  protected handleSelectedRowsChange(rows: unknown[]): Promise<void>;
@@ -574,6 +593,12 @@ declare class AXPDataSelectorComponent extends AXBasePageComponent {
574
593
  private applySearchFilter;
575
594
  private applyFilterAndSort;
576
595
  private applyCategoryFilter;
596
+ private updateSearchPlaceholder;
597
+ /**
598
+ * Apply initial selection based on selectedItemIds from config
599
+ * Loads items by IDs using the data source's byKey method, then selects them in the grid
600
+ */
601
+ private applyInitialSelection;
577
602
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDataSelectorComponent, never>;
578
603
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDataSelectorComponent, "axp-data-selector", never, {}, {}, never, never, true, never>;
579
604
  }
@@ -638,323 +663,16 @@ declare class AXPDragDropListComponent {
638
663
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDragDropListComponent, "axp-drag-drop-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "listId": { "alias": "listId"; "required": false; "isSignal": true; }; "dropListGroup": { "alias": "dropListGroup"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; "itemClick": "itemClick"; "dropListDropped": "dropListDropped"; }, never, never, true, never>;
639
664
  }
640
665
 
641
- interface AXPDynamicFormDesignerField {
642
- id: string;
643
- name: string;
644
- title: string;
645
- description?: string;
646
- widget: AXPWidgetNode;
647
- mode?: 'view' | 'edit';
648
- layout?: AXPGridLayoutOptions;
649
- validations?: Array<{
650
- rule: string;
651
- options?: Record<string, any>;
652
- }>;
653
- }
654
- interface AXPDynamicFormDesignerGroup {
655
- id: string;
656
- name: string;
657
- title?: string;
658
- description?: string;
659
- fields: AXPDynamicFormDesignerField[];
660
- mode?: 'view' | 'edit';
661
- layout?: AXPGridLayoutOptions;
662
- look?: 'fieldset' | 'card' | 'group' | 'container';
663
- }
664
- interface AXPDynamicFormDesignerState {
665
- groups: AXPDynamicFormDesignerGroup[];
666
- selectedFieldId?: string;
667
- selectedGroupId?: string;
668
- mode: 'designer' | 'preview';
669
- }
670
- /**
671
- * Convert designer field to form field definition
672
- */
673
- declare function convertDesignerFieldToFormField(field: AXPDynamicFormDesignerField): AXPDynamicFormFieldDefinition;
674
- /**
675
- * Convert designer group to form group definition
676
- */
677
- declare function convertDesignerGroupToFormGroup(group: AXPDynamicFormDesignerGroup): AXPDynamicFormGroupDefinition;
678
- /**
679
- * Convert designer state to form definition
680
- */
681
- declare function convertDesignerStateToFormDefinition(state: AXPDynamicFormDesignerState): AXPDynamicFormDefinition;
682
- interface AXPFormElementWidget {
683
- name: string;
684
- title: string;
685
- icon?: string;
686
- description?: string;
687
- type: string;
688
- properties?: any[];
689
- }
690
-
691
- declare class AXPDynamicFormDesignerComponent {
692
- formDefinition: _angular_core.ModelSignal<AXPDynamicFormDefinition>;
693
- readonly: _angular_core.InputSignal<boolean>;
694
- private isInternalUpdate;
695
- private readonly widgetRegistry;
696
- private readonly formBuilderService;
697
- private readonly widgetPropertyViewerService;
698
- private readonly translationService;
699
- private readonly DEFAULT_GROUP_NAME;
700
- protected selectedFieldId: _angular_core.WritableSignal<string | null>;
701
- private designerState;
702
- protected availableWidgets: _angular_core.Signal<AXPFormElementWidget[]>;
703
- protected widgetOptions: _angular_core.Signal<{
704
- value: string;
705
- text: string;
706
- }[]>;
707
- protected getAllFields: _angular_core.Signal<AXPDynamicFormDesignerField[]>;
708
- protected isDefaultGroup: (groupName: string) => boolean;
709
- protected canDeleteGroup: _angular_core.Signal<boolean>;
710
- protected designerGroups: _angular_core.Signal<AXPDynamicFormDesignerGroup[]>;
711
- /**
712
- * Create the default group for ungrouped fields
713
- */
714
- private createDefaultGroup;
715
- /**
716
- * Ensure form definition has at least the default group
717
- */
718
- private ensureDefaultGroup;
719
- /**
720
- * Effect to log form definition changes
721
- */
722
- private logFormDefinitionChanges;
723
- /**
724
- * Effect to sync form definition model to designer state
725
- */
726
- private syncModelToDesigner;
727
- /**
728
- * Effect to sync designer state changes back to model
729
- */
730
- private syncDesignerToModel;
731
- /**
732
- * Get the current form definition (converted from designer state)
733
- */
734
- getFormDefinition(): AXPDynamicFormDefinition;
735
- /**
736
- * Set the form definition (converted to designer state)
737
- */
738
- setFormDefinition(definition: AXPDynamicFormDefinition): void;
739
- /**
740
- * Add a new field to the form
741
- * @param field The field to add
742
- * @param groupName Optional group name to add the field to. Defaults to the default group or first group.
743
- */
744
- addField(field: AXPDynamicFormDesignerField, groupName?: string): void;
745
- /**
746
- * Update an existing field
747
- * @param fieldId The ID of the field to update
748
- * @param updates The updates to apply
749
- */
750
- updateField(fieldId: string, updates: Partial<AXPDynamicFormDesignerField>): void;
751
- /**
752
- * Remove a field from the form
753
- * @param fieldId The ID of the field to remove
754
- */
755
- removeField(fieldId: string): void;
756
- /**
757
- * Get all available widget types
758
- */
759
- getAvailableWidgets(): AXPFormElementWidget[];
760
- /**
761
- * Add a new group to the form
762
- * @param group The group to add
763
- */
764
- addGroup(group: AXPDynamicFormDesignerGroup): void;
765
- /**
766
- * Remove a group from the form
767
- * @param groupName The name of the group to remove
768
- */
769
- removeGroup(groupName: string): void;
770
- /**
771
- * Reorder groups in the form
772
- * @param fromIndex Source index
773
- * @param toIndex Target index
774
- */
775
- reorderGroups(fromIndex: number, toIndex: number): void;
776
- /**
777
- * Update an existing group
778
- * @param groupName The name of the group to update
779
- * @param updates The updates to apply
780
- */
781
- updateGroup(groupName: string, updates: Partial<AXPDynamicFormDesignerGroup>): void;
782
- /**
783
- * Move a field to a different group
784
- * @param fieldName The name/path of the field to move
785
- * @param targetGroupName The name of the target group
786
- */
787
- moveFieldToGroup(fieldName: string, targetGroupName: string): void;
788
- protected handleAddGroupClick(): Promise<void>;
789
- protected handleAddFieldToGroup(group: AXPDynamicFormDesignerGroup): Promise<void>;
790
- protected handleFieldEdit(field: AXPDynamicFormDesignerField): Promise<void>;
791
- protected handleFieldRemove(field: AXPDynamicFormDesignerField): void;
792
- protected handleGroupEdit(group: AXPDynamicFormDesignerGroup): Promise<void>;
793
- protected handleGroupLayoutEdit(group: AXPDynamicFormDesignerGroup): Promise<void>;
794
- protected handleGroupRemove(group: AXPDynamicFormDesignerGroup): void;
795
- /**
796
- * Handle field layout editing
797
- */
798
- protected handleFieldLayoutEdit(field: AXPDynamicFormDesignerField, group: AXPDynamicFormDesignerGroup): Promise<void>;
799
- protected handleGroupDrop(event: CdkDragDrop<AXPDynamicFormDesignerGroup[]>): void;
800
- protected handleFieldDrop(event: CdkDragDrop<AXPDynamicFormDesignerField[]>, targetGroupName?: string): void;
801
- protected handlePreviewClick(): Promise<void>;
802
- protected deriveKey(input: string): string;
803
- protected generateId(): string;
804
- protected getWidgetIcon(widgetName: string): string;
805
- protected getWidgetTitle(widgetName: string): string;
806
- protected getWidgetNode(field: AXPDynamicFormDesignerField): AXPWidgetNode;
807
- protected deriveGroupKey(input: string): string;
808
- protected getGroupOptions(): Array<{
809
- value: string;
810
- text: string;
811
- }>;
812
- protected addFieldToGroup(field: AXPDynamicFormDesignerField, groupName: string): void;
813
- protected getAllGroupDropLists(): string[];
814
- /**
815
- * Get the grid column count for a group (always 12 columns)
816
- */
817
- protected getGroupColumnCount(): number;
818
- /**
819
- * Get default field grid layout based on group configuration
820
- */
821
- protected getFieldGridLayout(group: AXPDynamicFormDesignerGroup, fieldIndex?: number): AXPGridLayoutOptions;
822
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPDynamicFormDesignerComponent, never>;
823
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDynamicFormDesignerComponent, "axp-dynamic-form-designer", never, { "formDefinition": { "alias": "formDefinition"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "formDefinition": "formDefinitionChange"; }, never, never, true, never>;
824
- }
825
-
826
- /**
827
- * Describes a schema-only definition for an extra property (no value).
828
- */
829
- interface AXPExtraPropertySchemaItem {
830
- /** Unique key for the property (used as identifier) */
831
- key: string;
832
- /** Human-readable title/label */
833
- title: string;
834
- /** Widget name/id to render (e.g., 'text-editor', 'checkbox-editor') */
835
- type: string;
836
- /** Optional widget-specific options */
837
- options?: AXPOptionsData;
838
- }
839
- /**
840
- * Describes a single extra property row.
841
- */
842
- interface AXPExtraPropertyItem extends AXPExtraPropertySchemaItem {
843
- /** Current value bound to the rendered widget */
844
- value: unknown;
845
- }
846
- /**
847
- * Describes an available extra property type that user can select when adding rows.
848
- */
849
- interface AXPExtraPropertyType {
850
- /** Unique id for the type (it should be the same as the widget name) */
851
- id: string;
852
- /** UI title for selection dropdown */
853
- title: string;
854
- /** Default widget options applied on create */
855
- defaultOptions?: AXPOptionsData;
856
- }
857
- /**
858
- * Injection token to provide available extra property types.
859
- */
860
- declare const AXP_EXTRA_PROPERTY_TYPES: InjectionToken<AXPExtraPropertyType[]>;
861
-
862
- declare class AXPExtraPropertiesComponent {
863
- items: _angular_core.InputSignal<AXPExtraPropertyItem[]>;
864
- mode: _angular_core.InputSignal<"view" | "edit">;
865
- protected onContextChanged(event: AXPWidgetCoreContextChangeEvent): void;
866
- itemsChange: _angular_core.OutputEmitterRef<AXPExtraPropertyItem[]>;
867
- private readonly providedTypes;
868
- private readonly translationService;
869
- protected newKey: WritableSignal<string>;
870
- protected newTitle: WritableSignal<string>;
871
- protected newTypeId: WritableSignal<string>;
872
- protected newValue: WritableSignal<any>;
873
- /** Local, ephemeral context for widget rendering */
874
- protected internalContext: WritableSignal<Record<string, any>>;
875
- private lastTypeByKey;
876
- protected draftVersion: WritableSignal<number>;
877
- protected draftKey: _angular_core.Signal<string>;
878
- protected typeOptions: _angular_core.Signal<AXPExtraPropertyType[]>;
879
- protected presetTypes: _angular_core.Signal<AXPExtraPropertyType[]>;
880
- protected canAdd: _angular_core.Signal<boolean>;
881
- /** Sync incoming items' values into internal context for rendering */
882
- private readonly syncContextFromItems;
883
- /**
884
- * Clear item values when their widget type changes to avoid incompatible stale values
885
- */
886
- private readonly clearValueOnTypeChange;
887
- protected handleAddItem(): void;
888
- protected handleRemoveItem(key: string): void;
889
- protected handleDrop(event: CdkDragDrop<AXPExtraPropertyItem[]>): void;
890
- protected selectPreset(id: string): void;
891
- private nodeCache;
892
- private draftNodeCache?;
893
- protected getNode(item: AXPExtraPropertyItem): AXPWidgetNode;
894
- protected draftNode(): AXPWidgetNode;
895
- protected newTypeChanged(val: string): void;
896
- protected ngOnInit(): void;
897
- protected handleTitleChange(val: string): void;
898
- protected sanitizeKey(input: string): string;
899
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPExtraPropertiesComponent, never>;
900
- 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>;
901
- }
902
-
903
- declare class AXPExtraPropertiesSchemaComponent {
904
- schema: _angular_core.InputSignal<AXPExtraPropertySchemaItem[]>;
905
- mode: _angular_core.InputSignal<"view" | "edit">;
906
- schemaChange: _angular_core.OutputEmitterRef<AXPExtraPropertySchemaItem[]>;
907
- private readonly providedTypes;
908
- private readonly translationService;
909
- protected newTitle: WritableSignal<string>;
910
- protected newTypeId: WritableSignal<string>;
911
- protected typeOptions: _angular_core.Signal<AXPExtraPropertyType[]>;
912
- protected canAdd: _angular_core.Signal<boolean>;
913
- protected selectedKey: WritableSignal<string | null>;
914
- protected selectedItem: _angular_core.Signal<AXPExtraPropertySchemaItem | null>;
915
- constructor();
916
- protected handleAdd(): void;
917
- protected handleRemove(key: string): void;
918
- protected handleDrop(event: CdkDragDrop<AXPExtraPropertySchemaItem[]>): void;
919
- protected handleUpdateTitle(key: string, title: string): void;
920
- protected handleUpdateType(key: string, typeId: string): void;
921
- protected newTypeChanged(val: string): void;
922
- protected handleTitleChange(val: string): void;
923
- protected handleSelect(key: string): void;
924
- protected handleViewerChanged(e: {
925
- values: any;
926
- mode: 'init' | 'update';
927
- }): void;
928
- protected deriveKey(input: string): string;
929
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPExtraPropertiesSchemaComponent, never>;
930
- 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>;
931
- }
932
-
933
- declare class AXPExtraPropertiesValuesComponent {
934
- schema: _angular_core.InputSignal<AXPExtraPropertySchemaItem[]>;
935
- values: _angular_core.InputSignal<Record<string, any>>;
936
- mode: _angular_core.InputSignal<"view" | "edit">;
937
- valuesChange: _angular_core.OutputEmitterRef<Record<string, any>>;
938
- isRequired: (item: AXPExtraPropertySchemaItem) => any;
939
- protected internalContext: _angular_core.WritableSignal<Record<string, any>>;
940
- private nodeCache;
941
- private lastTypeByKey;
942
- protected onContextChanged(event: AXPWidgetCoreContextChangeEvent): void;
943
- private readonly syncContextFromInputs;
944
- private readonly clearOnSchemaTypeChange;
945
- protected getNode(item: AXPExtraPropertySchemaItem): AXPWidgetNode;
946
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPExtraPropertiesValuesComponent, never>;
947
- 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>;
948
- }
949
-
950
666
  declare class AXPQueryFiltersComponent {
951
667
  #private;
952
668
  protected translate: AXTranslationService;
953
669
  protected calendarService: AXCalendarService;
954
670
  private filterOperatorMiddleware;
671
+ private settingsService;
955
672
  filtersDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
956
673
  initialFilters: _angular_core.InputSignal<AXPFilterQuery[]>;
957
674
  onFiltersChanged: _angular_core.OutputEmitterRef<AXPFilterQuery[]>;
675
+ protected dateFormat: _angular_core.WritableSignal<string>;
958
676
  protected tagBox: _angular_core.Signal<AXTagBoxComponent | undefined>;
959
677
  protected widgetRenderer: _angular_core.Signal<AXPWidgetRendererDirective | undefined>;
960
678
  tagBoxInput: any;
@@ -1000,6 +718,7 @@ declare class AXPImageEditorPopupComponent extends AXBasePageComponent {
1000
718
  image: _angular_core.InputSignal<Blob>;
1001
719
  showHistory: _angular_core.InputSignal<boolean>;
1002
720
  look: _angular_core.InputSignal<"solid" | "outline" | "blank">;
721
+ aspectRatio: _angular_core.InputSignal<string | undefined>;
1003
722
  private container;
1004
723
  private blobUrl;
1005
724
  protected url: _angular_core.WritableSignal<string | null>;
@@ -1012,7 +731,7 @@ declare class AXPImageEditorPopupComponent extends AXBasePageComponent {
1012
731
  handleCancel(): void;
1013
732
  ngOnDestroy(): void;
1014
733
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPImageEditorPopupComponent, never>;
1015
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPImageEditorPopupComponent, "axp-image-editor-popup", never, { "image": { "alias": "image"; "required": true; "isSignal": true; }; "showHistory": { "alias": "showHistory"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
734
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPImageEditorPopupComponent, "axp-image-editor-popup", never, { "image": { "alias": "image"; "required": true; "isSignal": true; }; "showHistory": { "alias": "showHistory"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; "aspectRatio": { "alias": "aspectRatio"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1016
735
  }
1017
736
 
1018
737
  interface AXPImageEditorOpenOptions {
@@ -1020,6 +739,7 @@ interface AXPImageEditorOpenOptions {
1020
739
  image: Blob;
1021
740
  showHistory?: boolean;
1022
741
  look?: 'solid' | 'outline' | 'blank';
742
+ aspectRatio?: string;
1023
743
  }
1024
744
  declare class AXPImageEditorService {
1025
745
  private readonly popupService;
@@ -1029,80 +749,446 @@ declare class AXPImageEditorService {
1029
749
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPImageEditorService>;
1030
750
  }
1031
751
 
1032
- interface AXPWidgetPropertyTab {
752
+ /**
753
+ * Represents a spreadsheet item (row or column header) with id, text, and optional description
754
+ */
755
+ interface AXPSpreadsheetItem {
756
+ id: string;
757
+ title: string;
758
+ description?: string;
759
+ /**
760
+ * Optional CSS class for cell styling (e.g., 'ax-bg-success-lightest ax-text-success' for green)
761
+ * Used when this item is used as a cell value to color-code the cell
762
+ * Allows proper control of both background and text colors
763
+ */
764
+ cssClass?: string;
765
+ }
766
+ /**
767
+ * Represents the value structure for spreadsheet cells
768
+ * Stores only the ID reference to the item in cellOptions
769
+ */
770
+ type AXPSpreadsheetCellValue = string | null;
771
+ /**
772
+ * Matrix data structure: { [rowId]: { [columnId]: cellValueId } }
773
+ * cellValueId is the ID of an item from cellOptions
774
+ */
775
+ type AXPSpreadsheetData = Record<string, Record<string, AXPSpreadsheetCellValue>>;
776
+ /**
777
+ * Represents a column definition in the spreadsheet
778
+ */
779
+ interface AXPSpreadsheetColumn {
780
+ /**
781
+ * Column identifier (unique name)
782
+ */
1033
783
  name: string;
784
+ /**
785
+ * Display title for column header
786
+ */
1034
787
  title: string;
1035
- groups: {
1036
- name: string;
1037
- title: string;
1038
- isCollapsed: boolean;
1039
- props: AXPWidgetProperty[];
1040
- }[];
788
+ /**
789
+ * Optional description for column header
790
+ */
791
+ description?: string;
792
+ /**
793
+ * Path to access row property (e.g., 'user.name', 'age')
794
+ * Used to get/set values in row objects
795
+ */
796
+ path: string;
797
+ /**
798
+ * Widget configuration for this column
799
+ * All cells in this column will use this widget
800
+ */
801
+ widget: AXPWidgetNode;
802
+ /**
803
+ * Optional column width
804
+ */
805
+ width?: string;
806
+ /**
807
+ * Column-level readonly override
808
+ */
809
+ readonly?: boolean;
1041
810
  }
1042
- interface AXPWidgetPropertiesChangedEvent {
811
+ /**
812
+ * Spreadsheet row mode
813
+ * - 'fixed': Rows are provided as input, cannot add/remove (like matrix)
814
+ * - 'dynamic': Users can add/remove rows dynamically (like Excel)
815
+ */
816
+ type AXPSpreadsheetRowMode = 'fixed' | 'dynamic';
817
+ /**
818
+ * Event emitted when a single cell value changes
819
+ */
820
+ interface AXPSpreadsheetCellChangeEvent {
821
+ /**
822
+ * Row identifier (name for fixed mode, generated ID for dynamic mode)
823
+ */
824
+ rowId: string;
825
+ /**
826
+ * Column name
827
+ */
828
+ columnName: string;
829
+ /**
830
+ * New cell value (whatever the widget returns)
831
+ */
832
+ value: any;
833
+ /**
834
+ * Full row object after update
835
+ */
836
+ row: Record<string, any>;
837
+ }
838
+ /**
839
+ * Event emitted when a row is added or removed (dynamic mode only)
840
+ */
841
+ interface AXPSpreadsheetRowChangeEvent {
842
+ /**
843
+ * Type of change: 'add' or 'remove'
844
+ */
845
+ type: 'add' | 'remove';
846
+ /**
847
+ * Row identifier
848
+ */
849
+ rowId: string;
850
+ /**
851
+ * Full row object (for 'add' events)
852
+ */
853
+ row?: Record<string, any>;
854
+ /**
855
+ * All rows after the change
856
+ */
857
+ rows: Record<string, any>[];
858
+ }
859
+ /**
860
+ * Configuration for the spreadsheet component
861
+ */
862
+ interface AXPSpreadsheetConfig {
863
+ /**
864
+ * Widget configuration for cell editing (SelectBox)
865
+ */
866
+ cellWidget?: AXPWidgetNode;
867
+ /**
868
+ * Whether the spreadsheet is in readonly mode
869
+ */
870
+ readonly?: boolean;
871
+ /**
872
+ * Placeholder text for empty cells
873
+ */
874
+ emptyCellPlaceholder?: string;
875
+ }
876
+
877
+ declare class AXPSpreadsheetComponent {
878
+ protected readonly translationService: AXTranslationService;
879
+ /**
880
+ * Translated column titles
881
+ */
882
+ protected translatedColumnTitles: _angular_core.WritableSignal<Map<string, string>>;
883
+ /**
884
+ * Title for the spreadsheet (displayed in corner cell)
885
+ */
886
+ title: _angular_core.InputSignal<string>;
887
+ /**
888
+ * Column definitions
889
+ */
890
+ columns: _angular_core.InputSignal<AXPSpreadsheetColumn[]>;
891
+ /**
892
+ * Row mode: 'fixed' or 'dynamic'
893
+ */
894
+ rowMode: _angular_core.InputSignal<AXPSpreadsheetRowMode>;
895
+ /**
896
+ * Rows data (for fixed mode - input only)
897
+ * Each row must have a 'name' property for identification
898
+ */
899
+ rowsInput: _angular_core.InputSignal<Record<string, any>[]>;
900
+ /**
901
+ * Rows data (for dynamic mode - two-way binding)
902
+ */
903
+ rowsModel: _angular_core.ModelSignal<Record<string, any>[]>;
904
+ /**
905
+ * Whether the spreadsheet is in readonly mode
906
+ */
907
+ readonly: _angular_core.InputSignal<boolean>;
908
+ /**
909
+ * Placeholder text for empty cells (default: "–")
910
+ */
911
+ emptyCellPlaceholder: _angular_core.InputSignal<string>;
912
+ /**
913
+ * Path to property in row object to display as row header title
914
+ * Example: 'name', 'title', 'user.name'
915
+ */
916
+ rowTitlePath: _angular_core.InputSignal<string | null>;
917
+ /**
918
+ * Path to property in row object to display as row header description
919
+ * Example: 'description', 'details', 'user.description'
920
+ */
921
+ rowDescriptionPath: _angular_core.InputSignal<string | null>;
922
+ /**
923
+ * Whether to allow adding rows (dynamic mode only, default: true)
924
+ */
925
+ allowAddRows: _angular_core.InputSignal<boolean>;
926
+ /**
927
+ * Whether to allow removing rows (default: true for dynamic mode, false for fixed mode)
928
+ * Can be enabled for fixed mode if needed
929
+ */
930
+ allowRemoveRows: _angular_core.InputSignal<boolean>;
931
+ /**
932
+ * Emitted when a single cell value changes
933
+ */
934
+ cellChange: _angular_core.OutputEmitterRef<AXPSpreadsheetCellChangeEvent>;
935
+ /**
936
+ * Emitted when rows are added or removed (dynamic mode only)
937
+ */
938
+ rowChange: _angular_core.OutputEmitterRef<AXPSpreadsheetRowChangeEvent>;
939
+ /**
940
+ * Emitted when the entire spreadsheet data changes
941
+ */
942
+ spreadsheetChange: _angular_core.OutputEmitterRef<Record<string, any>[]>;
943
+ /**
944
+ * Currently editing cell: { rowId, columnName } | null
945
+ */
946
+ protected editingCell: _angular_core.WritableSignal<{
947
+ rowId: string;
948
+ columnName: string;
949
+ } | null>;
950
+ /**
951
+ * Original value when entering edit mode (for cancel functionality)
952
+ */
953
+ private originalCellValue;
954
+ /**
955
+ * Internal rows state (for fixed mode)
956
+ */
957
+ private internalRows;
958
+ /**
959
+ * Row ID mapping: rowId -> row index (for tracking)
960
+ */
961
+ private rowIdMap;
962
+ /**
963
+ * Cache for widget nodes to prevent re-rendering
964
+ * Key: `${rowIndex}_${columnName}`, Value: AXPWidgetNode
965
+ */
966
+ private widgetNodeCache;
967
+ /**
968
+ * Cache for cell values to detect actual changes
969
+ * Key: `${rowIndex}_${columnName}`, Value: any
970
+ */
971
+ private cellValueCache;
972
+ /**
973
+ * Get current rows based on mode
974
+ */
975
+ protected currentRows: _angular_core.Signal<Record<string, any>[]>;
976
+ /**
977
+ * Context for widgets-container (all rows as an object with rows array)
978
+ * This allows widgets to access their cell via path like: rows[index].column.path
979
+ */
980
+ protected spreadsheetContext: _angular_core.Signal<{
981
+ rows: Record<string, any>[];
982
+ }>;
983
+ /**
984
+ * Get rows with IDs (ensure all rows have identifiers)
985
+ */
986
+ protected rowsWithIds: _angular_core.Signal<{
987
+ rowId: string;
988
+ row: Record<string, any>;
989
+ }[]>;
990
+ /**
991
+ * Check if spreadsheet is empty
992
+ */
993
+ protected isEmpty: _angular_core.Signal<boolean>;
994
+ /**
995
+ * Check if only columns are empty
996
+ */
997
+ protected isColumnsEmpty: _angular_core.Signal<boolean>;
998
+ /**
999
+ * Check if only rows are empty
1000
+ */
1001
+ protected isRowsEmpty: _angular_core.Signal<boolean>;
1002
+ constructor();
1003
+ /**
1004
+ * Get the value for a specific cell by row index
1005
+ */
1006
+ protected getCellValue(rowIndex: number, columnName: string): any;
1007
+ /**
1008
+ * Get row title from row object using rowTitlePath
1009
+ */
1010
+ protected getRowTitle(row: Record<string, any>, path: string): string;
1011
+ /**
1012
+ * Get row description from row object using rowDescriptionPath
1013
+ */
1014
+ protected getRowDescription(row: Record<string, any>, path: string): string;
1015
+ /**
1016
+ * Get row by ID
1017
+ */
1018
+ protected getRowById(rowId: string): Record<string, any> | null;
1019
+ /**
1020
+ * Check if a cell is currently being edited
1021
+ */
1022
+ protected isCellEditing(rowId: string, columnName: string): boolean;
1023
+ /**
1024
+ * Check if a column is readonly
1025
+ */
1026
+ protected isColumnReadonly(column: AXPSpreadsheetColumn): boolean;
1027
+ /**
1028
+ * Get widget node for a cell with dynamic path based on row index
1029
+ * Path format: rows[rowIndex].column.path
1030
+ * Uses caching to prevent unnecessary re-renders
1031
+ */
1032
+ protected getCellWidgetNode(column: AXPSpreadsheetColumn, rowIndex: number): AXPWidgetNode;
1033
+ /**
1034
+ * Handle cell click to start editing
1035
+ */
1036
+ protected handleCellClick(rowId: string, columnName: string, event?: MouseEvent): void;
1037
+ /**
1038
+ * Handle cell value change from widget
1039
+ * The widget sets the value at path like rows[index].column.path
1040
+ */
1041
+ protected handleCellValueChange(rowIndex: number, columnName: string, event: AXPWidgetCoreContextChangeEvent): void;
1042
+ /**
1043
+ * Handle spreadsheet context change from widgets-container
1044
+ * This is called when any widget in the spreadsheet changes
1045
+ */
1046
+ protected handleSpreadsheetContextChange(event: AXPWidgetCoreContextChangeEvent): void;
1047
+ /**
1048
+ * Handle blur event to stop editing (when user clicks away from cell)
1049
+ */
1050
+ protected handleCellBlur(rowId: string, columnName: string): void;
1051
+ /**
1052
+ * Handle Escape key to cancel editing
1053
+ */
1054
+ protected handleKeyDown(event: KeyboardEvent): void;
1055
+ /**
1056
+ * Commit cell edit (save changes and close editing mode)
1057
+ */
1058
+ protected commitCellEdit(): void;
1059
+ /**
1060
+ * Cancel cell edit (discard changes and close editing mode - same as escape)
1061
+ */
1062
+ protected cancelCellEdit(): void;
1063
+ /**
1064
+ * Handle click outside to stop editing
1065
+ */
1066
+ protected handleClickOutside(event: MouseEvent): void;
1067
+ /**
1068
+ * Handle add row (dynamic mode only)
1069
+ */
1070
+ protected handleAddRow(): void;
1071
+ /**
1072
+ * Handle remove row (works for both fixed and dynamic modes)
1073
+ */
1074
+ protected handleRemoveRow(rowId: string, _event: AXClickEvent): void;
1075
+ /**
1076
+ * Generate unique row ID for dynamic mode
1077
+ */
1078
+ private generateRowId;
1079
+ /**
1080
+ * Update rows array (sync internal state)
1081
+ */
1082
+ private updateRows;
1083
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSpreadsheetComponent, never>;
1084
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSpreadsheetComponent, "axp-spreadsheet", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rowMode": { "alias": "rowMode"; "required": false; "isSignal": true; }; "rowsInput": { "alias": "rowsInput"; "required": false; "isSignal": true; }; "rowsModel": { "alias": "rowsModel"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "emptyCellPlaceholder": { "alias": "emptyCellPlaceholder"; "required": false; "isSignal": true; }; "rowTitlePath": { "alias": "rowTitlePath"; "required": false; "isSignal": true; }; "rowDescriptionPath": { "alias": "rowDescriptionPath"; "required": false; "isSignal": true; }; "allowAddRows": { "alias": "allowAddRows"; "required": false; "isSignal": true; }; "allowRemoveRows": { "alias": "allowRemoveRows"; "required": false; "isSignal": true; }; }, { "rowsModel": "rowsModelChange"; "cellChange": "cellChange"; "rowChange": "rowChange"; "spreadsheetChange": "spreadsheetChange"; }, never, never, true, never>;
1085
+ }
1086
+
1087
+ declare class AXPLogoComponent implements OnInit, OnChanges {
1088
+ source: any;
1089
+ protected logoType: string;
1090
+ private platform;
1091
+ ngOnInit(): void;
1092
+ ngOnChanges(): void;
1093
+ protected setLogoType(): void;
1094
+ protected setLogoTheme(): void;
1095
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLogoComponent, never>;
1096
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLogoComponent, "axp-logo", never, { "source": { "alias": "source"; "required": false; }; }, {}, never, never, true, never>;
1097
+ }
1098
+
1099
+ interface AXPPropertyViewerGroup {
1100
+ name: string;
1101
+ title: string;
1102
+ isCollapsed: boolean;
1103
+ props: AXPWidgetProperty[];
1104
+ }
1105
+ interface AXPPropertyViewerTab {
1106
+ name: string;
1107
+ title: string;
1108
+ groups: AXPPropertyViewerGroup[];
1109
+ }
1110
+ interface AXPPropertyViewerChangedEvent {
1043
1111
  values: any;
1044
1112
  mode: 'init' | 'update';
1045
1113
  }
1046
- declare class AXPWidgetPropertyViewerComponent {
1047
- widget: _angular_core.InputSignal<AXPWidgetNode>;
1114
+
1115
+ declare class AXPPropertyViewerComponent {
1116
+ /**
1117
+ * List of tabs that should be rendered inside the property viewer.
1118
+ */
1119
+ tabsInput: _angular_core.InputSignal<AXPPropertyViewerTab[]>;
1120
+ /**
1121
+ * Determines rendering mode.
1122
+ */
1048
1123
  mode: _angular_core.InputSignal<"simple" | "advanced">;
1049
- private widgetRegistryService;
1124
+ /**
1125
+ * Emits when property context changes.
1126
+ */
1127
+ onChanged: EventEmitter<AXPPropertyViewerChangedEvent>;
1050
1128
  protected currentTabIndex: WritableSignal<number>;
1051
- protected config: WritableSignal<AXPWidgetConfig<any> | null>;
1052
- protected allPoperties: AXPWidgetProperty[];
1053
- protected tabs: WritableSignal<AXPWidgetPropertyTab[]>;
1054
- protected groups: _angular_core.Signal<{
1055
- name: string;
1056
- title: string;
1057
- isCollapsed: boolean;
1058
- props: AXPWidgetProperty[];
1059
- }[]>;
1060
- protected groupCollapsedStates: Map<string, boolean>;
1061
- onChanged: EventEmitter<AXPWidgetPropertiesChangedEvent>;
1129
+ protected tabs: _angular_core.Signal<AXPPropertyViewerTab[]>;
1130
+ protected groups: _angular_core.Signal<AXPPropertyViewerGroup[]>;
1062
1131
  protected context: WritableSignal<any>;
1063
- protected initialContext: any;
1132
+ protected groupCollapsedStates: Map<string, boolean>;
1064
1133
  constructor();
1065
- update(values: any): void;
1066
- private fillTabs;
1067
- protected handleContextChange(e: AXPWidgetCoreContextChangeEvent): void;
1134
+ /**
1135
+ * Replaces the current context with the provided value and emits an init event.
1136
+ */
1137
+ initializeContext(value: any): void;
1138
+ /**
1139
+ * Merges the provided value into the current context and emits an update event.
1140
+ */
1141
+ update(value: any): void;
1142
+ /**
1143
+ * Handles context changes produced by rendered widgets.
1144
+ */
1145
+ protected handleContextChange(event: AXPWidgetCoreContextChangeEvent): void;
1146
+ /**
1147
+ * Handles tab selection changes.
1148
+ */
1068
1149
  protected handleTabChange(event: AXTabStripChangedEvent): void;
1069
- protected handleCollapsedChange(group: string, collapsed: boolean): void;
1070
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerComponent, never>;
1071
- 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>;
1150
+ /**
1151
+ * Stores collapsed state for a group.
1152
+ */
1153
+ protected handleCollapsedChange(groupName: string, isCollapsed: boolean): void;
1154
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPropertyViewerComponent, never>;
1155
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPPropertyViewerComponent, "axp-property-viewer", never, { "tabsInput": { "alias": "tabsInput"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "onChanged": "onChanged"; }, never, never, true, never>;
1072
1156
  }
1073
1157
 
1074
- declare class AXPWidgetPropertyViewerPopupComponent extends AXBasePageComponent {
1075
- widget: _angular_core.InputSignal<AXPWidgetNode>;
1158
+ declare class AXPPropertyViewerPopupComponent extends AXBasePageComponent {
1159
+ tabs: _angular_core.InputSignal<AXPPropertyViewerTab[]>;
1076
1160
  mode: _angular_core.InputSignal<"simple" | "advanced">;
1077
- protected currentValues: _angular_core.WritableSignal<any>;
1078
- protected handlePropertyChanged(event: {
1079
- values: any;
1080
- mode: 'init' | 'update';
1081
- }): void;
1161
+ context: _angular_core.InputSignal<any>;
1162
+ protected readonly propertyViewer: _angular_core.Signal<AXPPropertyViewerComponent | undefined>;
1163
+ protected readonly currentValues: _angular_core.WritableSignal<any>;
1164
+ protected currentMode: 'init' | 'update';
1165
+ constructor();
1166
+ protected handlePropertyChanged(event: AXPPropertyViewerChangedEvent): void;
1082
1167
  protected handleCloseClick(): void;
1083
1168
  protected handleApplyClick(): void;
1084
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerPopupComponent, never>;
1085
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetPropertyViewerPopupComponent, "axp-widget-property-viewer-popup", never, { "widget": { "alias": "widget"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1169
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPropertyViewerPopupComponent, never>;
1170
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPPropertyViewerPopupComponent, "axp-property-viewer-popup", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1086
1171
  }
1087
1172
 
1088
- interface AXPWidgetPropertyViewerConfig {
1173
+ interface AXPPropertyViewerConfig {
1089
1174
  title: string;
1090
- widget: AXPWidgetNode;
1175
+ tabs: AXPPropertyViewerTab[];
1176
+ context?: any;
1091
1177
  mode?: 'simple' | 'advanced';
1092
1178
  size?: 'sm' | 'md' | 'lg' | 'full';
1093
1179
  }
1094
- interface AXPWidgetPropertyViewerResult {
1180
+ interface AXPPropertyViewerResult {
1095
1181
  values: any;
1096
1182
  mode: 'init' | 'update';
1097
1183
  }
1098
- declare class AXPWidgetPropertyViewerService {
1184
+ declare class AXPPropertyViewerService {
1099
1185
  private readonly popupService;
1100
1186
  /**
1101
- * Open widget property viewer popup
1187
+ * Open property viewer popup with predefined tabs and context.
1102
1188
  */
1103
- open(config: AXPWidgetPropertyViewerConfig): Promise<AXPWidgetPropertyViewerResult | null>;
1104
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerService, never>;
1105
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPWidgetPropertyViewerService>;
1189
+ open(config: AXPPropertyViewerConfig): Promise<AXPPropertyViewerResult | null>;
1190
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPropertyViewerService, never>;
1191
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPPropertyViewerService>;
1106
1192
  }
1107
1193
 
1108
1194
  declare class AXPQuerySortsComponent {
@@ -1129,6 +1215,32 @@ declare class AXPStateMessageComponent {
1129
1215
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPStateMessageComponent, "axp-state-message", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, ["[slot=actions]"], true, never>;
1130
1216
  }
1131
1217
 
1218
+ declare class AXPStopwatchComponent implements OnDestroy {
1219
+ mode: _angular_core.InputSignal<"count-up" | "count-down">;
1220
+ timeLimit: _angular_core.InputSignal<number | undefined>;
1221
+ format: _angular_core.InputSignal<"hh:mm:ss" | "mm:ss" | "ss">;
1222
+ autoStart: _angular_core.InputSignal<boolean>;
1223
+ showControls: _angular_core.InputSignal<boolean>;
1224
+ value: _angular_core.InputSignal<number>;
1225
+ valueChange: _angular_core.OutputEmitterRef<number>;
1226
+ timeUp: _angular_core.OutputEmitterRef<void>;
1227
+ private readonly currentTime;
1228
+ protected readonly isRunning: _angular_core.WritableSignal<boolean>;
1229
+ private intervalId;
1230
+ protected readonly isTimeUp: _angular_core.Signal<boolean>;
1231
+ protected readonly displayTime: _angular_core.Signal<string>;
1232
+ constructor();
1233
+ ngOnDestroy(): void;
1234
+ start(): void;
1235
+ pause(): void;
1236
+ reset(): void;
1237
+ private stop;
1238
+ private onTimeUp;
1239
+ private formatTime;
1240
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPStopwatchComponent, never>;
1241
+ 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>;
1242
+ }
1243
+
1132
1244
  interface AXPTemplateViewerConfig {
1133
1245
  template: AXPWidgetNode | string;
1134
1246
  title?: string;
@@ -1251,6 +1363,7 @@ declare class AXPUserAvatarComponent implements OnInit, OnDestroy {
1251
1363
  avatarColor: _angular_core.Signal<string>;
1252
1364
  protected hasAvatar: _angular_core.Signal<boolean>;
1253
1365
  protected isAvatarLoaded: _angular_core.WritableSignal<boolean>;
1366
+ protected isLoading: _angular_core.Signal<boolean>;
1254
1367
  protected onImageError(event: AXHtmlEvent<ErrorEvent>): void;
1255
1368
  protected onImageLoad(event: AXHtmlEvent<Event>): void;
1256
1369
  ngOnInit(): void;
@@ -1286,6 +1399,94 @@ declare class AXPQueryViewsComponent {
1286
1399
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryViewsComponent, "axp-query-views", never, { "views": { "alias": "views"; "required": false; "isSignal": true; }; "selectedView": { "alias": "selectedView"; "required": true; "isSignal": true; }; }, { "views": "viewsChange"; "selectedView": "selectedViewChange"; }, never, never, true, never>;
1287
1400
  }
1288
1401
 
1402
+ /**
1403
+ * Compact widget field configurator component
1404
+ * Designed to be embedded in entity definition forms for configuring widget properties
1405
+ */
1406
+ declare class AXPWidgetFieldConfiguratorComponent {
1407
+ /**
1408
+ * Widget node configuration (two-way binding)
1409
+ */
1410
+ widget: _angular_core.ModelSignal<AXPWidgetNode>;
1411
+ /**
1412
+ * Label for the widget selector
1413
+ */
1414
+ label: _angular_core.InputSignal<string>;
1415
+ /**
1416
+ * Field name (technical identifier, used for form field path)
1417
+ */
1418
+ fieldName: _angular_core.InputSignal<string>;
1419
+ /**
1420
+ * Field title (display name, used in UI labels and titles)
1421
+ */
1422
+ fieldTitle: _angular_core.InputSignal<string>;
1423
+ /**
1424
+ * Readonly mode
1425
+ */
1426
+ readonly: _angular_core.InputSignal<boolean>;
1427
+ private readonly widgetRegistry;
1428
+ private readonly widgetPropertyViewerService;
1429
+ private readonly translationService;
1430
+ private readonly formBuilderService;
1431
+ /**
1432
+ * Currently selected widget type
1433
+ */
1434
+ protected selectedWidgetType: _angular_core.WritableSignal<string>;
1435
+ /**
1436
+ * Whether the component is in edit mode (showing select box)
1437
+ */
1438
+ protected isEditMode: _angular_core.WritableSignal<boolean>;
1439
+ /**
1440
+ * Available widgets filtered by FormElement group
1441
+ */
1442
+ protected availableWidgets: _angular_core.Signal<{
1443
+ value: string;
1444
+ text: string;
1445
+ icon: string | undefined;
1446
+ description: string | undefined;
1447
+ }[]>;
1448
+ /**
1449
+ * Current widget configuration details
1450
+ */
1451
+ protected currentWidgetConfig: _angular_core.Signal<{
1452
+ title: string;
1453
+ description: string | undefined;
1454
+ icon: string | undefined;
1455
+ hasProperties: boolean | undefined;
1456
+ } | null>;
1457
+ /**
1458
+ * Whether configure button should be enabled
1459
+ */
1460
+ protected canConfigure: _angular_core.Signal<boolean>;
1461
+ /**
1462
+ * Whether widget has been configured (has options)
1463
+ */
1464
+ protected isConfigured: _angular_core.Signal<boolean>;
1465
+ /**
1466
+ * Whether preview button should be enabled
1467
+ */
1468
+ protected canPreview: _angular_core.Signal<boolean>;
1469
+ /**
1470
+ * Enter edit mode (show select box)
1471
+ */
1472
+ protected enterEditMode(): void;
1473
+ constructor();
1474
+ /**
1475
+ * Handle widget type change
1476
+ */
1477
+ protected onWidgetTypeChange(event: any): Promise<void>;
1478
+ /**
1479
+ * Open widget property viewer
1480
+ */
1481
+ protected openPropertyViewer(): Promise<void>;
1482
+ /**
1483
+ * Open widget preview with actual rendered widget
1484
+ */
1485
+ protected openPreview(): Promise<void>;
1486
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetFieldConfiguratorComponent, never>;
1487
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetFieldConfiguratorComponent, "axp-widget-field-configurator", never, { "widget": { "alias": "widget"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "fieldName": { "alias": "fieldName"; "required": false; "isSignal": true; }; "fieldTitle": { "alias": "fieldTitle"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "widget": "widgetChange"; }, never, never, true, never>;
1488
+ }
1489
+
1289
1490
  /**
1290
1491
  * Generic interface for widget item data
1291
1492
  */
@@ -1346,5 +1547,123 @@ declare class AXPWidgetItemComponent {
1346
1547
  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>;
1347
1548
  }
1348
1549
 
1349
- export { AXPActivityLogComponent, AXPCategoryTreeComponent, AXPColorPalettePickerComponent, AXPColumnItemListComponent, AXPCompareViewComponent, AXPComponentSlot, AXPComponentSlotDirective, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPDataSelectorComponent, AXPDataSelectorService, AXPDragDropListComponent, AXPDynamicFormDesignerComponent, AXPExtraPropertiesComponent, AXPExtraPropertiesSchemaComponent, AXPExtraPropertiesValuesComponent, AXPImageEditorPopupComponent, AXPImageEditorService, AXPMenuBadgeHelper, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPStateMessageComponent, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_EXTRA_PROPERTY_TYPES, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER, convertDesignerFieldToFormField, convertDesignerGroupToFormGroup, convertDesignerStateToFormDefinition };
1350
- export type { AXPCategoryTreeActions, AXPCategoryTreeConfig, AXPCategoryTreeDataSource, AXPCategoryTreeEvents, AXPCategoryTreeNode, AXPColumnItemListItem, AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPComponentSlotConfig, AXPComponentSlotModuleConfigs, AXPDataSelectorColumn, AXPDataSelectorConfig, AXPDragDropListConfig, AXPDragDropListDropEvent, AXPDragDropListItem, AXPDynamicFormDesignerField, AXPDynamicFormDesignerGroup, AXPDynamicFormDesignerState, AXPExtraPropertyItem, AXPExtraPropertySchemaItem, AXPExtraPropertyType, AXPFormElementWidget, AXPImageEditorOpenOptions, AXPTemplateViewerConfig, AXPTemplateViewerResult, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPWidgetItemClickEvent, AXPWidgetItemData, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyTab, AXPWidgetPropertyViewerConfig, AXPWidgetPropertyViewerResult, StateMode };
1550
+ interface AXPWidgetPropertyTab {
1551
+ name: string;
1552
+ title: string;
1553
+ groups: {
1554
+ name: string;
1555
+ title: string;
1556
+ isCollapsed: boolean;
1557
+ props: AXPWidgetProperty[];
1558
+ }[];
1559
+ }
1560
+ interface AXPWidgetPropertiesChangedEvent {
1561
+ values: any;
1562
+ mode: 'init' | 'update';
1563
+ }
1564
+ declare class AXPWidgetPropertyViewerComponent {
1565
+ widget: _angular_core.InputSignal<AXPWidgetNode>;
1566
+ mode: _angular_core.InputSignal<"simple" | "advanced">;
1567
+ private widgetRegistryService;
1568
+ protected currentTabIndex: WritableSignal<number>;
1569
+ protected config: WritableSignal<AXPWidgetConfig<any> | null>;
1570
+ protected allPoperties: AXPWidgetProperty[];
1571
+ protected tabs: WritableSignal<AXPWidgetPropertyTab[]>;
1572
+ protected groups: _angular_core.Signal<{
1573
+ name: string;
1574
+ title: string;
1575
+ isCollapsed: boolean;
1576
+ props: AXPWidgetProperty[];
1577
+ }[]>;
1578
+ protected groupCollapsedStates: Map<string, boolean>;
1579
+ onChanged: EventEmitter<AXPWidgetPropertiesChangedEvent>;
1580
+ protected context: WritableSignal<any>;
1581
+ protected initialContext: any;
1582
+ constructor();
1583
+ update(values: any): void;
1584
+ private fillTabs;
1585
+ protected handleContextChange(e: AXPWidgetCoreContextChangeEvent): void;
1586
+ protected handleTabChange(event: AXTabStripChangedEvent): void;
1587
+ protected handleCollapsedChange(group: string, collapsed: boolean): void;
1588
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerComponent, never>;
1589
+ 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>;
1590
+ }
1591
+
1592
+ declare class AXPWidgetPropertyViewerPopupComponent extends AXBasePageComponent {
1593
+ widget: _angular_core.InputSignal<AXPWidgetNode>;
1594
+ mode: _angular_core.InputSignal<"simple" | "advanced">;
1595
+ protected currentValues: _angular_core.WritableSignal<any>;
1596
+ protected handlePropertyChanged(event: {
1597
+ values: any;
1598
+ mode: 'init' | 'update';
1599
+ }): void;
1600
+ protected handleCloseClick(): void;
1601
+ protected handleApplyClick(): void;
1602
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerPopupComponent, never>;
1603
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetPropertyViewerPopupComponent, "axp-widget-property-viewer-popup", never, { "widget": { "alias": "widget"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1604
+ }
1605
+
1606
+ interface AXPWidgetPropertyInjection {
1607
+ property: AXPWidgetProperty;
1608
+ tab?: {
1609
+ name?: string;
1610
+ title?: string;
1611
+ };
1612
+ group?: {
1613
+ name?: string;
1614
+ title?: string;
1615
+ };
1616
+ }
1617
+ interface AXPWidgetPropertyViewerConfig {
1618
+ title: string;
1619
+ widget: AXPWidgetNode;
1620
+ mode?: 'simple' | 'advanced';
1621
+ /**
1622
+ * Property names to exclude from the viewer.
1623
+ */
1624
+ exclude?: string[];
1625
+ /**
1626
+ * Custom property injection configuration.
1627
+ */
1628
+ custom?: {
1629
+ /**
1630
+ * Custom property injection entries.
1631
+ */
1632
+ properties: AXPWidgetPropertyInjection[];
1633
+ /**
1634
+ * Default tab fallback if property injection doesn't specify one.
1635
+ * When omitted, falls back to the first tab or "general".
1636
+ */
1637
+ defaultTab?: {
1638
+ name?: string;
1639
+ title?: string;
1640
+ };
1641
+ /**
1642
+ * Default group fallback when injection doesn't specify a group.
1643
+ * When omitted, falls back to the tab's first group or property defined group.
1644
+ */
1645
+ defaultGroup?: {
1646
+ name?: string;
1647
+ title?: string;
1648
+ };
1649
+ };
1650
+ }
1651
+ interface AXPWidgetPropertyViewerResult {
1652
+ values: any;
1653
+ mode: 'init' | 'update';
1654
+ }
1655
+ declare class AXPWidgetPropertyViewerService {
1656
+ private readonly widgetRegistryService;
1657
+ private readonly propertyViewerService;
1658
+ /**
1659
+ * Open widget property viewer popup
1660
+ */
1661
+ open(config: AXPWidgetPropertyViewerConfig): Promise<AXPWidgetPropertyViewerResult | null>;
1662
+ private buildTabs;
1663
+ private buildInitialContext;
1664
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerService, never>;
1665
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPWidgetPropertyViewerService>;
1666
+ }
1667
+
1668
+ 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 };
1669
+ 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, AXPWidgetPropertyTab, AXPWidgetPropertyViewerConfig, AXPWidgetPropertyViewerResult, StateMode };