@acorex-platform/framework-client 0.0.38 → 0.0.48

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 (111) hide show
  1. package/fesm2022/acorex-platform-framework-client-auth.mjs +212 -44
  2. package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-CzBr0cRi.mjs → acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs} +31 -1
  4. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-framework-client-common.mjs +1172 -193
  6. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-framework-client-core.mjs +233 -132
  8. package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +295 -59
  10. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
  11. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-Bp2cNCPO.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs} +10 -6
  12. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-framework-client-layout-components-property-viewer-inline-code-editor.component-CcpUTEVQ.mjs +66 -0
  14. package/fesm2022/acorex-platform-framework-client-layout-components-property-viewer-inline-code-editor.component-CcpUTEVQ.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-framework-client-layout-components-resource-appointment-board.component-DCkpgsFH.mjs +195 -0
  16. package/fesm2022/acorex-platform-framework-client-layout-components-resource-appointment-board.component-DCkpgsFH.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +4015 -1014
  18. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +1179 -304
  20. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
  21. package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-CvaOWbJx.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-UkQsf84C.mjs} +1701 -300
  22. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-UkQsf84C.mjs.map +1 -0
  23. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-Ds63Rt2n.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-DmmiDLZw.mjs} +2 -2
  24. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-Ds63Rt2n.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-DmmiDLZw.mjs.map} +1 -1
  25. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-C0pohwdo.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-BOFTb66c.mjs} +2 -2
  26. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-C0pohwdo.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-BOFTb66c.mjs.map} +1 -1
  27. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-o2HuZrDN.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-Bg-cMOlQ.mjs} +2 -2
  28. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-o2HuZrDN.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-Bg-cMOlQ.mjs.map} +1 -1
  29. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +2 -2
  30. package/fesm2022/acorex-platform-framework-client-layout-views.mjs +47 -8
  31. package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
  32. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +3854 -3292
  33. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
  34. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-DJNSBNVe.mjs +33319 -0
  35. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-DJNSBNVe.mjs.map +1 -0
  36. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BDOdcoyN.mjs → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BkrPu1wO.mjs} +8 -5
  37. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BkrPu1wO.mjs.map +1 -0
  38. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-value.util-Cb7R1qLO.mjs +45 -0
  39. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-value.util-Cb7R1qLO.mjs.map +1 -0
  40. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs +68 -0
  41. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs.map +1 -0
  42. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-edit.component-CVsPKhNl.mjs +88 -0
  43. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-edit.component-CVsPKhNl.mjs.map +1 -0
  44. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-view.component-BEq4O4al.mjs +71 -0
  45. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-view.component-BEq4O4al.mjs.map +1 -0
  46. package/fesm2022/acorex-platform-framework-client-layout-widgets-condition-builder-edit-popup.component-WpiEHusZ.mjs +81 -0
  47. package/fesm2022/acorex-platform-framework-client-layout-widgets-condition-builder-edit-popup.component-WpiEHusZ.mjs.map +1 -0
  48. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-Cadl6guA.mjs} +41 -23
  49. package/fesm2022/acorex-platform-framework-client-layout-widgets-page-widget-designer.component-Cadl6guA.mjs.map +1 -0
  50. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-CKtGsWPI.mjs} +3 -3
  51. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-CKtGsWPI.mjs.map} +1 -1
  52. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-column.component-Clb27Loe.mjs +71 -0
  53. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-column.component-Clb27Loe.mjs.map +1 -0
  54. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-edit.component-l7q8A-D3.mjs +111 -0
  55. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-edit.component-l7q8A-D3.mjs.map +1 -0
  56. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-view.component-Cc1AH09b.mjs +77 -0
  57. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-view.component-Cc1AH09b.mjs.map +1 -0
  58. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-TWxthl21.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-BCLxS3rS.mjs} +3 -3
  59. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-TWxthl21.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-BCLxS3rS.mjs.map} +1 -1
  60. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-DYxgwR2E.mjs} +21 -8
  61. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-DYxgwR2E.mjs.map +1 -0
  62. package/fesm2022/acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-C2PGoC7r.mjs +124 -0
  63. package/fesm2022/acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-C2PGoC7r.mjs.map +1 -0
  64. package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-DDDoPoQa.mjs +345 -0
  65. package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-DDDoPoQa.mjs.map +1 -0
  66. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -31985
  67. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
  68. package/fesm2022/acorex-platform-framework-client-realtime.mjs +2 -1
  69. package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
  70. package/fesm2022/acorex-platform-framework-client-runtime.mjs +2 -2
  71. package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
  72. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-create-view.component-CT7WWWG0.mjs → acorex-platform-framework-client-themes-default-entity-master-create-view.component-DlS4v_zb.mjs} +3 -3
  73. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-DlS4v_zb.mjs.map +1 -0
  74. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DBmdBKBL.mjs +122 -0
  75. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DBmdBKBL.mjs.map +1 -0
  76. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-DBUwSzvg.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-CkpRT1a9.mjs} +3 -3
  77. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-CkpRT1a9.mjs.map +1 -0
  78. package/fesm2022/acorex-platform-framework-client-themes-default.mjs +424 -103
  79. package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
  80. package/fesm2022/{acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs → acorex-platform-framework-client-themes-shared-settings.provider-DIkjSTU7.mjs} +102 -1
  81. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-DIkjSTU7.mjs.map +1 -0
  82. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +174 -22
  83. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
  84. package/package.json +2 -2
  85. package/realtime/README.md +1 -1
  86. package/types/acorex-platform-framework-client-auth.d.ts +18 -1
  87. package/types/acorex-platform-framework-client-common.d.ts +243 -9
  88. package/types/acorex-platform-framework-client-core.d.ts +152 -119
  89. package/types/acorex-platform-framework-client-layout-builder.d.ts +29 -0
  90. package/types/acorex-platform-framework-client-layout-components.d.ts +717 -147
  91. package/types/acorex-platform-framework-client-layout-designer.d.ts +192 -14
  92. package/types/acorex-platform-framework-client-layout-entity.d.ts +167 -92
  93. package/types/acorex-platform-framework-client-layout-views.d.ts +23 -1
  94. package/types/acorex-platform-framework-client-layout-widget-core.d.ts +148 -40
  95. package/types/acorex-platform-framework-client-layout-widgets.d.ts +261 -119
  96. package/types/acorex-platform-framework-client-realtime.d.ts +16 -3
  97. package/types/acorex-platform-framework-client-themes-default.d.ts +62 -11
  98. package/types/acorex-platform-framework-client-themes-shared.d.ts +25 -2
  99. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CzBr0cRi.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-Bp2cNCPO.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs +0 -77
  102. package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-CvaOWbJx.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BDOdcoyN.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs.map +0 -1
  106. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-create-view.component-CT7WWWG0.mjs.map +0 -1
  108. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DienTcPE.mjs +0 -122
  109. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DienTcPE.mjs.map +0 -1
  110. package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-DBUwSzvg.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Signal, InjectionToken, InputSignal, TemplateRef, ElementRef, OnDestroy, OnInit, OnChanges, EventEmitter, EnvironmentProviders, EnvironmentInjector, ApplicationRef, QueryList, Type, WritableSignal } from '@angular/core';
3
3
  import * as _acorex_platform_framework_shared_core from '@acorex-platform/framework-shared/core';
4
- import { AXPSystemActionType, AXPCategoryEntity, AXPColumnQuery, AXPWidgetNode, AXPContextData, AXPFilterClause, AXPFilterDefinition, AXPFileListItem, AXPFilterQuery, AXPContextChangeEvent, AXPMultiLanguageString, AXPActionMenuItem, AXPExecuteCommand, containsHtmlMarkup, AXPSortDefinition, AXPSortQuery, AXPMetaData, AXPViewQuery } from '@acorex-platform/framework-shared/core';
5
- import { AXPActivityLog, AXPDistributedEventListenerProvider } from '@acorex-platform/framework-client/core';
4
+ import { AXPSystemActionType, AXPCategoryEntity, AXPColumnQuery, AXPWidgetNode, AXPContextData, AXPFilterDefinition, AXPFilterClause, AXPContextChangeEvent, AXPFileListItem, AXPPlatformScope, AXPFilterQuery, AXPQueryFilterMode, AXPQueryFilterGroupLogic, AXPMultiLanguageString, AXPActionMenuItem, AXPExecuteCommand, containsHtmlMarkup, AXPSortDefinition, AXPSortQuery, AXPMetaData, AXPViewQuery } from '@acorex-platform/framework-shared/core';
5
+ import { AXPActivityLog, AXPHookProvider, AXPDeviceService } from '@acorex-platform/framework-client/core';
6
6
  export { AXPLogoComponent } from '@acorex-platform/framework-client/core';
7
7
  import { AXHtmlEvent, AXValueChangedEvent, AXClickEvent, AXDataSource, AXDataSourceFilterOption, AXDataSourceOperator, AXFilterLogic, AXComponentClosedPromise, AXEvent, AXRange } from '@acorex/cdk/common';
8
8
  import * as _ngrx_signals from '@ngrx/signals';
@@ -15,6 +15,7 @@ import { CdkDragDrop } from '@angular/cdk/drag-drop';
15
15
  import { AXDataTableColumnComponent, AXDataTableComponent, AXRowCommandItem, AXDataTableRowDbClick, AXDataTableRowClick, AXRowCommandItemClickEvent } from '@acorex/components/data-table';
16
16
  import { AXBasePageComponent } from '@acorex/components/page';
17
17
  import { AXDropListDroppedEvent } from '@acorex/cdk/drag-drop';
18
+ import { AXPEntityListUserStylingRule, AXPEntityMasterStylingLockedRule, AXPEntityListStylingTargetOption, AXPEntitySortPreset } from '@acorex-platform/framework-shared/entity';
18
19
  import { AXMultiLanguageString, AXTranslationService } from '@acorex/core/translation';
19
20
  import { AXToastService } from '@acorex/components/toast';
20
21
  import { AXMenuItem, AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent } from '@acorex/components/menu';
@@ -23,9 +24,10 @@ import { AXFileViewerGalleryConfig, AXFileViewerItem, AXFileViewerHeaderActionCl
23
24
  export { AXFileViewerGalleryConfig, AXFileViewerGalleryRef, AXFileViewerHeaderActionClickEvent, AXFileViewerItem, AXFileViewerViewPayload, provideFileViewer, resolveFileViewerFileType } from '@acorex/components/file-viewer';
24
25
  import { AXTagBoxComponent } from '@acorex/components/tag-box';
25
26
  import { AXCalendarService } from '@acorex/core/date-time';
26
- import { AXPWidgetContainerComponent, AXPWidgetRendererDirective } from '@acorex-platform/framework-client/layout/widget-core';
27
+ import * as _acorex_platform_framework_client_layout_widget_core from '@acorex-platform/framework-client/layout/widget-core';
28
+ import { AXPWidgetContainerComponent, AXPWidgetRendererDirective, AXPLocalDataSourceColumn } from '@acorex-platform/framework-client/layout/widget-core';
27
29
  import { AXFormComponent } from '@acorex/components/form';
28
- import { AXPWidgetProperty, AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';
30
+ import { AXPWidgetProperty, AXPLayoutProfileContext, AXPWidgetConfig } from '@acorex-platform/framework-shared/widget-core';
29
31
  import { AXLookupComponent } from '@acorex/components/lookup';
30
32
  import { AXTabStripChangedEvent, AXTabsComponent } from '@acorex/components/tabs';
31
33
  import { AXValidationSummary } from '@acorex/core/validation';
@@ -121,6 +123,7 @@ declare class AXPActivityLogComponent {
121
123
  * Generic avatar renderer with image and initials fallback.
122
124
  */
123
125
  declare class AXPAvatarComponent {
126
+ #private;
124
127
  /** Avatar size in pixels. */
125
128
  readonly size: _angular_core.InputSignal<number>;
126
129
  /** Optional image source for the avatar. */
@@ -133,7 +136,11 @@ declare class AXPAvatarComponent {
133
136
  readonly fallbackText: _angular_core.InputSignal<string | undefined>;
134
137
  /** Forces placeholder mode and '?' fallback. */
135
138
  readonly placeholder: _angular_core.InputSignal<boolean>;
139
+ /** External busy state (e.g. while a new avatar file id is being resolved to a display URL). */
140
+ readonly loading: _angular_core.InputSignal<boolean>;
141
+ private readonly imageLoading;
136
142
  protected readonly imageFailed: _angular_core.WritableSignal<boolean>;
143
+ protected readonly showLoadingOverlay: _angular_core.Signal<boolean>;
137
144
  protected readonly normalizedName: _angular_core.Signal<string>;
138
145
  protected readonly resolvedSrc: _angular_core.Signal<string>;
139
146
  protected readonly hasAvatar: _angular_core.Signal<boolean>;
@@ -146,7 +153,7 @@ declare class AXPAvatarComponent {
146
153
  private hashString;
147
154
  private pickColor;
148
155
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPAvatarComponent, never>;
149
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPAvatarComponent, "axp-avatar", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; "fullName": { "alias": "fullName"; "required": false; "isSignal": true; }; "showTitle": { "alias": "showTitle"; "required": false; "isSignal": true; }; "fallbackText": { "alias": "fallbackText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
156
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPAvatarComponent, "axp-avatar", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; "fullName": { "alias": "fullName"; "required": false; "isSignal": true; }; "showTitle": { "alias": "showTitle"; "required": false; "isSignal": true; }; "fallbackText": { "alias": "fallbackText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
150
157
  }
151
158
 
152
159
  declare class AXPTaskBadgeService {
@@ -192,6 +199,7 @@ declare class AXPTaskBadgeDirective {
192
199
  sideMenuWidth: _angular_core.Signal<number>;
193
200
  sideMenuCompactWidth: _angular_core.Signal<number>;
194
201
  menuVerticalMode: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode>;
202
+ menuToggleCyclesStyle: _angular_core.Signal<boolean>;
195
203
  menuOrientation: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuOrientation>;
196
204
  menuAppearance: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuAppearance>;
197
205
  headerAppearance: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPHeaderAppearance>;
@@ -205,6 +213,7 @@ declare class AXPTaskBadgeDirective {
205
213
  overlayTaskCount: _angular_core.Signal<number>;
206
214
  isNavigationLoading: _angular_core.Signal<boolean>;
207
215
  isMenuHorizontal: _angular_core.Signal<boolean>;
216
+ menuToggleCyclesStyleEnabled: _angular_core.Signal<boolean>;
208
217
  effectiveMenuVerticalMode: _angular_core.Signal<_acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode>;
209
218
  sideMenuDrawerWidth: _angular_core.Signal<number>;
210
219
  menuDarkEnabled: _angular_core.Signal<boolean>;
@@ -219,6 +228,7 @@ declare class AXPTaskBadgeDirective {
219
228
  setSideMenuWidth: (width: number) => void;
220
229
  setSideMenuCompactWidth: (width: number) => void;
221
230
  setSideMenuDrawerWidth: (width: number) => void;
231
+ setMenuVerticalMode: (mode: _acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode) => void;
222
232
  toggleSideMenu: () => void;
223
233
  setNavigationLoading: (value: boolean, delay?: number) => void;
224
234
  setOverlayLoading: (value: boolean, delay?: number) => void;
@@ -241,6 +251,7 @@ declare class AXPTaskBadgeDirective {
241
251
  sideMenuWidth: number;
242
252
  sideMenuCompactWidth: number;
243
253
  menuVerticalMode: _acorex_platform_framework_client_themes_shared.AXPMenuVerticalMode;
254
+ menuToggleCyclesStyle: boolean;
244
255
  menuOrientation: _acorex_platform_framework_client_themes_shared.AXPMenuOrientation;
245
256
  menuAppearance: _acorex_platform_framework_client_themes_shared.AXPMenuAppearance;
246
257
  headerAppearance: _acorex_platform_framework_client_themes_shared.AXPHeaderAppearance;
@@ -559,10 +570,11 @@ declare class AXPColumnItemListComponent implements OnDestroy {
559
570
 
560
571
  declare class AXPQueryColumnsComponent {
561
572
  columns: _angular_core.ModelSignal<AXPColumnQuery[]>;
573
+ constrainHeight: _angular_core.InputSignal<boolean>;
562
574
  handleVisibilityChange(e: AXValueChangedEvent<boolean>, name: string): void;
563
575
  protected drop(event: CdkDragDrop<unknown[]>): void;
564
576
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryColumnsComponent, never>;
565
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryColumnsComponent, "axp-query-columns", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; }, { "columns": "columnsChange"; }, never, never, true, never>;
577
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryColumnsComponent, "axp-query-columns", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "constrainHeight": { "alias": "constrainHeight"; "required": false; "isSignal": true; }; }, { "columns": "columnsChange"; }, never, never, true, never>;
566
578
  }
567
579
 
568
580
  interface AXPTextCommandColumnClickEvent {
@@ -888,6 +900,81 @@ declare class AXPDragDropListComponent {
888
900
  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>;
889
901
  }
890
902
 
903
+ interface AXPEntityListStylingDialogInput {
904
+ rules: readonly AXPEntityListUserStylingRule[];
905
+ lockedRules: readonly AXPEntityMasterStylingLockedRule[];
906
+ filterDefinitions: readonly AXPFilterDefinition[];
907
+ targets: readonly AXPEntityListStylingTargetOption[];
908
+ }
909
+ declare class AXPEntityListStylingDialogService {
910
+ private readonly popupService;
911
+ private readonly translationService;
912
+ open(input: AXPEntityListStylingDialogInput): Promise<AXPEntityListUserStylingRule[] | null>;
913
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListStylingDialogService, never>;
914
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPEntityListStylingDialogService>;
915
+ }
916
+
917
+ type AXPEntityListStylingRulesKind = 'row' | 'field';
918
+ interface AXPEntityListStylingRulesLayoutOptions {
919
+ kind: AXPEntityListStylingRulesKind;
920
+ targets: readonly AXPEntityListStylingTargetOption[];
921
+ filterDefinitions: readonly AXPFilterDefinition[];
922
+ showIcon?: boolean;
923
+ showClassText?: boolean;
924
+ }
925
+ declare function buildEntityListStylingRulesLayout(options: AXPEntityListStylingRulesLayoutOptions): AXPWidgetNode;
926
+
927
+ interface AXPEntityListStylingEditorRow {
928
+ id: string;
929
+ target: string;
930
+ className: string;
931
+ icon?: string;
932
+ condition: AXPFilterClause;
933
+ }
934
+ interface AXPEntityListStylingRowEditorContext {
935
+ rowRules: AXPEntityListStylingEditorRow[];
936
+ }
937
+ interface AXPEntityListStylingFieldEditorContext {
938
+ fieldRules: AXPEntityListStylingEditorRow[];
939
+ }
940
+ declare class AXPEntityListStylingPopupComponent extends AXBasePageComponent {
941
+ private readonly translation;
942
+ private readonly rowLayoutRenderer;
943
+ private readonly fieldLayoutRenderer;
944
+ protected readonly I18N: {
945
+ readonly cancel: "@general:actions.cancel.title";
946
+ readonly save: "@general:actions.save.title";
947
+ readonly builtInHint: "@general:terms.interface.styling.built-in-hint";
948
+ readonly rowRules: "@general:terms.interface.styling.row-rules";
949
+ readonly fieldRules: "@general:terms.interface.styling.field-rules";
950
+ readonly row: "@general:terms.interface.styling.row";
951
+ readonly always: "@general:terms.interface.styling.always";
952
+ };
953
+ protected readonly recordTarget = "record";
954
+ /**
955
+ * Assigned by AXPopupService from `data` (`instance[key] = value`).
956
+ * These must stay plain fields. `input()` is overwritten and then `lockedRules()` throws.
957
+ */
958
+ rules: AXPEntityListUserStylingRule[];
959
+ lockedRules: AXPEntityMasterStylingLockedRule[];
960
+ filterDefinitions: AXPFilterDefinition[];
961
+ targets: AXPEntityListStylingTargetOption[];
962
+ protected readonly rowRulesLayout: _angular_core.WritableSignal<_acorex_platform_framework_shared_core.AXPWidgetNode | null>;
963
+ protected readonly fieldRulesLayout: _angular_core.WritableSignal<_acorex_platform_framework_shared_core.AXPWidgetNode | null>;
964
+ protected readonly rowEditorContext: _angular_core.ModelSignal<AXPEntityListStylingRowEditorContext>;
965
+ protected readonly fieldEditorContext: _angular_core.ModelSignal<AXPEntityListStylingFieldEditorContext>;
966
+ protected get lockedRowRules(): AXPEntityMasterStylingLockedRule[];
967
+ protected get lockedFieldRules(): AXPEntityMasterStylingLockedRule[];
968
+ constructor();
969
+ protected targetLabel(target: string): string;
970
+ protected handleCancel(): void;
971
+ protected handleSave(): void;
972
+ private bootstrapEditor;
973
+ private readEditorRows;
974
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPEntityListStylingPopupComponent, never>;
975
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPEntityListStylingPopupComponent, "axp-entity-list-styling-popup", never, { "rowEditorContext": { "alias": "rowEditorContext"; "required": false; "isSignal": true; }; "fieldEditorContext": { "alias": "fieldEditorContext"; "required": false; "isSignal": true; }; }, { "rowEditorContext": "rowEditorContextChange"; "fieldEditorContext": "fieldEditorContextChange"; }, never, never, true, never>;
976
+ }
977
+
891
978
  /**
892
979
  * Shared types for expression builders (expression-builder, sort-builder, group-builder, etc.)
893
980
  */
@@ -996,6 +1083,8 @@ declare class AXPConditionBuilderConditionComponent implements OnInit {
996
1083
  filterDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
997
1084
  onResolveWidget: _angular_core.InputSignal<((fieldId: string) => string) | undefined>;
998
1085
  showFillByUser: _angular_core.InputSignal<boolean>;
1086
+ compact: _angular_core.InputSignal<boolean>;
1087
+ operationsLook: _angular_core.InputSignal<"select" | "menu">;
999
1088
  itemChange: _angular_core.OutputEmitterRef<ConditionBuilderSelectedField>;
1000
1089
  removeItem: _angular_core.OutputEmitterRef<string>;
1001
1090
  protected selectedField: _angular_core.WritableSignal<ConditionBuilderSelectedField | null>;
@@ -1008,25 +1097,20 @@ declare class AXPConditionBuilderConditionComponent implements OnInit {
1008
1097
  }[]>;
1009
1098
  protected readonly currentFilterDefinition: _angular_core.Signal<AXPFilterDefinition | undefined>;
1010
1099
  protected readonly selectedFieldValue: _angular_core.Signal<string>;
1100
+ protected readonly filterHostKey: _angular_core.Signal<string>;
1101
+ protected readonly filterHostKeys: _angular_core.Signal<string[]>;
1011
1102
  ngOnInit(): void;
1012
1103
  constructor();
1013
1104
  private updateFilterWidgetNode;
1014
1105
  private updateContext;
1015
- onFieldChange(event: AXValueChangedEvent): void;
1016
- onContextChange(event: {
1017
- data?: {
1018
- filter?: {
1019
- value?: unknown;
1020
- operation?: {
1021
- type?: string;
1022
- };
1023
- };
1024
- };
1106
+ onFieldChange(event: AXValueChangedEvent & {
1107
+ isUserInteraction?: boolean;
1025
1108
  }): void;
1109
+ onContextChange(event: AXPContextChangeEvent): void;
1026
1110
  onFillByUserChange(checked: boolean): void;
1027
1111
  onRemoveClick(): void;
1028
1112
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPConditionBuilderConditionComponent, never>;
1029
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPConditionBuilderConditionComponent, "axp-condition-builder-condition", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "filterDefinitions": { "alias": "filterDefinitions"; "required": false; "isSignal": true; }; "onResolveWidget": { "alias": "onResolveWidget"; "required": false; "isSignal": true; }; "showFillByUser": { "alias": "showFillByUser"; "required": false; "isSignal": true; }; }, { "itemChange": "itemChange"; "removeItem": "removeItem"; }, never, never, true, never>;
1113
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPConditionBuilderConditionComponent, "axp-condition-builder-condition", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "filterDefinitions": { "alias": "filterDefinitions"; "required": false; "isSignal": true; }; "onResolveWidget": { "alias": "onResolveWidget"; "required": false; "isSignal": true; }; "showFillByUser": { "alias": "showFillByUser"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "operationsLook": { "alias": "operationsLook"; "required": false; "isSignal": true; }; }, { "itemChange": "itemChange"; "removeItem": "removeItem"; }, never, never, true, never>;
1030
1114
  }
1031
1115
 
1032
1116
  /**
@@ -1046,6 +1130,7 @@ declare class AXPConditionBuilderComponent {
1046
1130
  filterDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
1047
1131
  /** When true, show "Fill by user" checkbox on each condition (e.g. for query parameters) */
1048
1132
  showFillByUser: _angular_core.InputSignal<boolean>;
1133
+ operationsLook: _angular_core.InputSignal<"select" | "menu">;
1049
1134
  valueChange: _angular_core.OutputEmitterRef<AXPFilterClause>;
1050
1135
  protected queryData: _angular_core.WritableSignal<AXPFilterClause>;
1051
1136
  protected readonly logicalOperatorsItems: {
@@ -1055,6 +1140,7 @@ declare class AXPConditionBuilderComponent {
1055
1140
  protected getLogicDisplayText(logic: AXFilterLogic | undefined): string;
1056
1141
  private connectorLayoutRafId;
1057
1142
  private connectorResizeObserver;
1143
+ private lastEmittedValue;
1058
1144
  private initConnectorAutoLayout;
1059
1145
  private scheduleConnectorLayoutUpdate;
1060
1146
  private updateConnectorCssVars;
@@ -1074,7 +1160,7 @@ declare class AXPConditionBuilderComponent {
1074
1160
  reorderGroupItemsEvent(groupId: string, event: AXDropListDroppedEvent): void;
1075
1161
  reorderGroupItems(groupId: string, previousIndex: number, currentIndex: number): void;
1076
1162
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPConditionBuilderComponent, never>;
1077
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPConditionBuilderComponent, "axp-condition-builder", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "filterDefinitions": { "alias": "filterDefinitions"; "required": false; "isSignal": true; }; "showFillByUser": { "alias": "showFillByUser"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
1163
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPConditionBuilderComponent, "axp-condition-builder", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "filterDefinitions": { "alias": "filterDefinitions"; "required": false; "isSignal": true; }; "showFillByUser": { "alias": "showFillByUser"; "required": false; "isSignal": true; }; "operationsLook": { "alias": "operationsLook"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
1078
1164
  }
1079
1165
 
1080
1166
  interface AXPFileChooserContext {
@@ -1124,9 +1210,9 @@ interface AXPFileChooserAfterChosenPayload {
1124
1210
  items: AXPFileListItem[];
1125
1211
  }
1126
1212
 
1127
- declare const AXPFileChooserCompressImagesHook: AXPDistributedEventListenerProvider<AXPFileChooserAfterChosenPayload, AXPFileChooserAfterChosenPayload>;
1128
- declare const AXPFileChooserZipFilesHook: AXPDistributedEventListenerProvider<AXPFileChooserAfterChosenPayload, AXPFileChooserAfterChosenPayload>;
1129
- declare const AXP_FILE_CHOOSER_HOOK_PROVIDERS: readonly [AXPDistributedEventListenerProvider<AXPFileChooserAfterChosenPayload, AXPFileChooserAfterChosenPayload>, AXPDistributedEventListenerProvider<AXPFileChooserAfterChosenPayload, AXPFileChooserAfterChosenPayload>];
1213
+ declare const AXPFileChooserCompressImagesHook: AXPHookProvider<AXPFileChooserAfterChosenPayload, AXPFileChooserAfterChosenPayload>;
1214
+ declare const AXPFileChooserZipFilesHook: AXPHookProvider<AXPFileChooserAfterChosenPayload, AXPFileChooserAfterChosenPayload>;
1215
+ declare const AXP_FILE_CHOOSER_HOOK_PROVIDERS: readonly [AXPHookProvider<AXPFileChooserAfterChosenPayload, AXPFileChooserAfterChosenPayload>, AXPHookProvider<AXPFileChooserAfterChosenPayload, AXPFileChooserAfterChosenPayload>];
1130
1216
  declare function provideFileChooserHooks(): EnvironmentProviders;
1131
1217
 
1132
1218
  /**
@@ -1151,16 +1237,68 @@ declare function compressImageFile(file: File, quality?: number, maxDimension?:
1151
1237
  */
1152
1238
  declare function createZipArchive(files: File[], archiveName?: string): Promise<File>;
1153
1239
 
1240
+ interface AXPFileProviderMenuItem {
1241
+ key: string;
1242
+ title: AXMultiLanguageString;
1243
+ icon?: string;
1244
+ disabled?: boolean;
1245
+ /** i18n key shown as a badge when {@link disabled} is true. */
1246
+ disabledBadgeKey?: string;
1247
+ }
1248
+
1249
+ interface AXPFileProviderPromptOptions {
1250
+ titleKey?: string;
1251
+ /** Additional choices (e.g. Gravatar) shown after registered providers. */
1252
+ extraItems?: AXPFileProviderMenuItem[];
1253
+ /** Open the picker even when only one registered provider exists. */
1254
+ forcePicker?: boolean;
1255
+ }
1256
+
1257
+ /** Accept string shared by profile photo and image editor pick flows. */
1258
+ declare const AXP_IMAGE_FILE_CHOOSER_ACCEPT = "image/png, image/jpeg, image/webp";
1259
+ /** Synthetic provider key for profile-photo Gravatar import (not a registered chooser provider). */
1260
+ declare const AXP_PROFILE_PHOTO_GRAVATAR_SOURCE_KEY = "profile-photo:gravatar";
1261
+ /** Converts a chooser item with a blob source into a {@link File}. */
1262
+ declare function fileListItemToImageFile(item: AXPFileListItem): File | null;
1263
+ /**
1264
+ * Prompts for a file provider (when several exist), then returns the first chosen image file.
1265
+ * Matches the file-uploader widget provider flow via {@link AXPFileChooserService.promptChoose}.
1266
+ */
1267
+ declare function pickImageFileViaFileChooser(chooserService: AXPFileChooserService): Promise<File | null>;
1268
+ interface AXPProfilePhotoImagePickOptions {
1269
+ /** When set, shows an Import from Gravatar option and resolves via {@link resolveGravatarImageFile}. */
1270
+ gravatarEmail?: string | null;
1271
+ gravatarTitleKey?: string;
1272
+ pickSourceTitleKey?: string;
1273
+ /** Drive scope for "Choose From Drive". Defaults to the user's personal drive. */
1274
+ driveScope?: AXPPlatformScope;
1275
+ }
1276
+ interface AXPProfilePhotoImagePickResult {
1277
+ file: File | null;
1278
+ gravatarNotFound?: boolean;
1279
+ /** True when the file came from Gravatar (already square — skip the image editor). */
1280
+ fromGravatar?: boolean;
1281
+ }
1282
+ /**
1283
+ * Profile photo source picker: registered providers plus optional Gravatar, then returns an image file.
1284
+ */
1285
+ declare function pickProfilePhotoImageFile(chooserService: AXPFileChooserService, options: AXPProfilePhotoImagePickOptions): Promise<AXPProfilePhotoImagePickResult>;
1286
+
1154
1287
  /**
1155
1288
  * Resolves providers and delegates file selection to them.
1156
1289
  */
1157
1290
  declare class AXPFileChooserService {
1158
- private readonly injector;
1291
+ private readonly environmentInjector;
1159
1292
  private readonly hooks;
1160
1293
  private readonly settingsService;
1161
1294
  private readonly providers;
1162
1295
  private readonly toastService;
1163
1296
  private readonly translateService;
1297
+ private readonly fileProviderPrompt;
1298
+ /**
1299
+ * Opens the file source picker popup and returns the selected provider key.
1300
+ */
1301
+ promptFileProviderKey(providers: AXPFileProviderMenuItem[], titleOrOptions?: string | AXPFileProviderPromptOptions): Promise<string | undefined>;
1164
1302
  getProviders(options?: Record<string, unknown>): AXPFileChooserProvider[];
1165
1303
  choose(providerKey: string | undefined, context: AXPFileChooserContext): Promise<AXPFileListItem[] | undefined>;
1166
1304
  /**
@@ -1171,6 +1309,10 @@ declare class AXPFileChooserService {
1171
1309
  * Prompts for a provider when multiple are registered, then runs file selection.
1172
1310
  */
1173
1311
  promptChoose(context: AXPFileChooserContext): Promise<AXPFileListItem[] | undefined>;
1312
+ /**
1313
+ * Profile photo pick flow (providers, optional Gravatar, then image file).
1314
+ */
1315
+ pickProfilePhotoImage(options?: AXPProfilePhotoImagePickOptions): Promise<AXPProfilePhotoImagePickResult>;
1174
1316
  private resolveProvider;
1175
1317
  private applyChooserValidation;
1176
1318
  private runAfterChosenHook;
@@ -1198,6 +1340,11 @@ interface FileAcceptFilterResult {
1198
1340
  }
1199
1341
  type FileUploaderEmptyStateDescriptionKey = '@general:widgets.file-uploader.empty-state.description' | '@general:widgets.file-uploader.empty-state.description-with-formats' | '@general:widgets.file-uploader.empty-state.description-with-max-size' | '@general:widgets.file-uploader.empty-state.description-with-limits';
1200
1342
  declare function isUnrestrictedFileAccept(accept: string | undefined): boolean;
1343
+ /**
1344
+ * Matches a file name (and optional MIME) against an HTML `accept` string.
1345
+ * Used when the picker only has a name (Drive) rather than a browser {@link File}.
1346
+ */
1347
+ declare function fileNameMatchesAccept(fileName: string, accept: string | undefined, mime?: string): boolean;
1201
1348
  declare function fileMatchesAccept(file: File, accept: string): boolean;
1202
1349
  declare function filterFilesByAcceptAndMaxSize(files: File[], accept: string | undefined, maxFileSize: number | undefined): FileAcceptFilterResult;
1203
1350
  declare function formatAcceptForDisplay(accept: string | undefined, maxLength?: number): string;
@@ -1218,6 +1365,12 @@ declare function validateFileChooserItems(items: AXPFileListItem[] | undefined,
1218
1365
  rejected: FileAcceptRejectedFile[];
1219
1366
  };
1220
1367
 
1368
+ /** MD5 hex digest of a string (Gravatar email hash). */
1369
+ declare function md5Hex(input: string): string;
1370
+ declare function buildGravatarAvatarUrl(email: string, size?: number): string;
1371
+ /** Fetches the Gravatar image for an email, or null when none is registered. */
1372
+ declare function fetchGravatarImageFile(email: string): Promise<File | null>;
1373
+
1221
1374
  /** Gallery open options with platform file list items or pre-built viewer items. */
1222
1375
  interface AXPFileViewerGalleryConfig extends Omit<AXFileViewerGalleryConfig, 'items'> {
1223
1376
  /** Pre-built viewer items (takes precedence over {@link files}). */
@@ -1372,9 +1525,10 @@ interface AXPFileUploaderBeforeUploadPayload {
1372
1525
  * Resolves providers and delegates file upload to them.
1373
1526
  */
1374
1527
  declare class AXPFileUploaderService {
1375
- private readonly injector;
1528
+ private readonly environmentInjector;
1376
1529
  private readonly hooks;
1377
1530
  private readonly providers;
1531
+ private readonly fileProviderPrompt;
1378
1532
  getProviders(options?: Record<string, unknown>): AXPFileUploaderProvider[];
1379
1533
  upload(providerKey: string | undefined, context: AXPFileUploaderContext): Promise<AXPFileListItem[] | undefined>;
1380
1534
  /**
@@ -1409,12 +1563,6 @@ declare function filterFileProvidersByContext<T extends {
1409
1563
  key: string;
1410
1564
  }>(providers: T[], options?: Record<string, unknown>): T[];
1411
1565
 
1412
- interface AXPFileProviderMenuItem {
1413
- key: string;
1414
- title: AXMultiLanguageString;
1415
- icon?: string;
1416
- }
1417
-
1418
1566
  interface AXPAttachedFileProviderMenu {
1419
1567
  open(target: HTMLElement, providers: AXPFileProviderMenuItem[], busy: boolean): void;
1420
1568
  close(): void;
@@ -1422,6 +1570,36 @@ interface AXPAttachedFileProviderMenu {
1422
1570
  }
1423
1571
  declare function createAttachedFileProviderMenu(envInjector: EnvironmentInjector, appRef: ApplicationRef, onSelect: (providerKey: string) => void): AXPAttachedFileProviderMenu;
1424
1572
 
1573
+ type QueryFilterGroupLogic = AXPQueryFilterGroupLogic;
1574
+ interface QueryFilterEditingCondition {
1575
+ id: string;
1576
+ field: string;
1577
+ }
1578
+ interface QueryFilterChipTag extends AXPFilterDefinition {
1579
+ id: string;
1580
+ query: string;
1581
+ chipMode: 'expanded' | 'summary' | 'search';
1582
+ mixed: boolean;
1583
+ titleLabel: string;
1584
+ logicLabel: string;
1585
+ chipConditions: Array<{
1586
+ title: string;
1587
+ operator: string;
1588
+ value: string;
1589
+ }>;
1590
+ summaryText: string;
1591
+ readOnly: boolean;
1592
+ }
1593
+ type MobileFilterChip = {
1594
+ kind: 'applied';
1595
+ id: string;
1596
+ tag: QueryFilterChipTag;
1597
+ tagIndex: number;
1598
+ } | {
1599
+ kind: 'available';
1600
+ id: string;
1601
+ definition: AXPFilterDefinition;
1602
+ };
1425
1603
  declare class AXPQueryFiltersComponent {
1426
1604
  #private;
1427
1605
  protected translate: AXTranslationService;
@@ -1433,47 +1611,90 @@ declare class AXPQueryFiltersComponent {
1433
1611
  private readonly destroyRef;
1434
1612
  private readonly elementRef;
1435
1613
  private readonly queryService;
1614
+ protected readonly deviceService: AXPDeviceService;
1436
1615
  protected readonly filterFocusShortcutKeys: string[];
1437
1616
  constructor();
1438
1617
  filtersDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
1439
1618
  initialFilters: _angular_core.InputSignal<AXPFilterQuery[]>;
1619
+ /** `normal` keeps one chip per field. `advanced` allows mixed-field groups and root AND/OR. */
1620
+ mode: _angular_core.InputSignal<AXPQueryFilterMode>;
1440
1621
  /** When true, this list supports quick search (combined with {@link AXPCommonSettings.QuickSearchEnabled}). */
1441
1622
  quickSearch: _angular_core.InputSignal<boolean>;
1623
+ /** Mobile-only: sort presets rendered as chips in the same row as advance filters. */
1624
+ sortPresets: _angular_core.InputSignal<AXPEntitySortPreset[]>;
1625
+ activeSortPresetName: _angular_core.InputSignal<string | null>;
1442
1626
  onFiltersChanged: _angular_core.OutputEmitterRef<AXPFilterQuery[]>;
1627
+ onSortPresetSelected: _angular_core.OutputEmitterRef<AXPEntitySortPreset>;
1628
+ protected isAdvanced: _angular_core.Signal<boolean>;
1629
+ protected isMixedEditingGroup: _angular_core.Signal<boolean>;
1630
+ protected advancedFieldOptions: _angular_core.Signal<AXPFilterDefinition[]>;
1443
1631
  protected quickSearchSettingEnabled: _angular_core.WritableSignal<boolean>;
1444
1632
  protected isQuickSearchMode: _angular_core.Signal<boolean>;
1445
1633
  protected dateFormat: _angular_core.WritableSignal<string>;
1446
1634
  protected tagBox: _angular_core.Signal<AXTagBoxComponent | undefined>;
1635
+ protected readonly mobileFilterTrigger: _angular_core.Signal<ElementRef<any> | undefined>;
1447
1636
  protected widgetsContainer: _angular_core.Signal<AXPWidgetContainerComponent | undefined>;
1448
- protected widgetRenderer: _angular_core.Signal<AXPWidgetRendererDirective | undefined>;
1637
+ protected widgetRenderers: _angular_core.Signal<readonly AXPWidgetRendererDirective[]>;
1449
1638
  tagBoxInput: any;
1450
1639
  listItems: QueryList<any>;
1451
1640
  protected selectedField: _angular_core.WritableSignal<string | null>;
1452
1641
  protected selectedFilters: _angular_core.WritableSignal<AXPFilterDefinition[]>;
1453
1642
  context: _angular_core.WritableSignal<any>;
1454
1643
  protected activeFilter: _angular_core.WritableSignal<AXPFilterDefinition | null>;
1455
- protected asyncTags: _angular_core.WritableSignal<any[]>;
1644
+ protected editingLogic: _angular_core.WritableSignal<AXPQueryFilterGroupLogic>;
1645
+ protected editingConditions: _angular_core.WritableSignal<QueryFilterEditingCondition[]>;
1646
+ protected rootLogic: _angular_core.WritableSignal<AXPQueryFilterGroupLogic>;
1647
+ protected activeChipId: _angular_core.Signal<string | null>;
1648
+ protected activeFilterTitle: _angular_core.WritableSignal<string>;
1649
+ protected asyncTags: _angular_core.WritableSignal<QueryFilterChipTag[]>;
1650
+ protected readonly mobileFilterChips: _angular_core.Signal<MobileFilterChip[]>;
1456
1651
  protected popover: _angular_core.Signal<AXPopoverComponent | undefined>;
1457
1652
  inputValue: _angular_core.WritableSignal<string>;
1653
+ protected readonly mobileSearchOpen: _angular_core.WritableSignal<boolean>;
1654
+ protected readonly mobileSearchText: _angular_core.WritableSignal<string>;
1655
+ protected readonly hasActiveInlineSearch: _angular_core.Signal<boolean>;
1656
+ protected readonly hasAppliedAdvanceFilter: _angular_core.Signal<boolean>;
1657
+ protected readonly isMobileFilterModeLocked: _angular_core.Signal<boolean>;
1658
+ protected readonly isMobileSearchModeLocked: _angular_core.Signal<boolean>;
1659
+ setMobileSearchOpen(isOpen: boolean): void;
1458
1660
  protected readonly disabledByField: _angular_core.WritableSignal<Record<string, boolean>>;
1661
+ protected readonly hasMultipleFilterGroups: _angular_core.Signal<boolean>;
1662
+ protected readonly isChipsPanning: _angular_core.WritableSignal<boolean>;
1663
+ protected readonly mobileModeToggleCollapsed: _angular_core.WritableSignal<boolean>;
1664
+ private lastMobileChipsScrollFromStart;
1665
+ private chipsPanSession;
1666
+ private suppressChipsClick;
1667
+ protected readonly canApplyFilter: _angular_core.Signal<boolean>;
1459
1668
  /** Emits when a filter context entry changes (aligned with `widget-renderer` `events.context`). */
1460
1669
  private readonly filterContextPath$;
1461
1670
  private filterContextPathSnapshotReady;
1462
1671
  private previousFilterContextSnapshot;
1463
- /** Committed context entry for the filter being edited; restored when popover closes without Apply. */
1672
+ /** Full context snapshot while editing; restored when popover closes without Apply. */
1464
1673
  private editingContextSnapshot;
1674
+ private skipNextPopoverRestore;
1675
+ private editingConditionsSnapshot;
1465
1676
  /** Bumped on locale change so filter chip labels re-resolve i18n keys. */
1466
1677
  private translationEpoch;
1467
1678
  inlineFilters: () => AXPFilterDefinition[];
1468
1679
  protected getDisplayValue: (filter: AXPFilterDefinition, val: any) => Promise<any>;
1469
1680
  private resolveSelectFilterDisplayText;
1470
- protected convertIfISOStringDate: (val: string) => string;
1681
+ private formatRangeDisplayValue;
1682
+ protected convertIfISOStringDate: (val: unknown) => string;
1471
1683
  convertQueriesToDefinitions(queries: AXPFilterQuery[]): AXPFilterDefinition[];
1472
1684
  convertQueriesToContext(queries: AXPFilterQuery[]): any;
1473
1685
  filterFields: () => AXPFilterDefinition[];
1474
1686
  ngOnInit(): void;
1687
+ /** Opens the field picker to start a new chip/group (toolbar click). */
1688
+ protected openNewFilterGroup(): void;
1475
1689
  /** Opens the filter popover anchored to the last tag or tag-box start. */
1476
1690
  protected openFilterPopover(): void;
1691
+ protected handleMobileSearchChanged(event: AXValueChangedEvent<string>): void;
1692
+ protected applyMobileSortPreset(preset: AXPEntitySortPreset, event: Event): void;
1693
+ protected isMobileSortPresetActive(preset: AXPEntitySortPreset): boolean;
1694
+ protected mobileSortPresetDir(preset: AXPEntitySortPreset): 'asc' | 'desc' | undefined;
1695
+ protected openMobileAvailableFilter(definition: AXPFilterDefinition, event: Event): void;
1696
+ protected mobileChipLabel(item: QueryFilterChipTag): string;
1697
+ private resolveMobilePopoverTarget;
1477
1698
  /** Click on the tag-box opens the filter menu (empty or with tags). */
1478
1699
  protected handleTagBoxClick(event: MouseEvent): void;
1479
1700
  /**
@@ -1489,8 +1710,19 @@ declare class AXPQueryFiltersComponent {
1489
1710
  handleFieldKeyDown(e: KeyboardEvent, field: AXPFilterDefinition): void;
1490
1711
  onContextChanged(e: AXPContextChangeEvent): void;
1491
1712
  handleApplyFilter(): void;
1713
+ handleMobileChipsScroll(event: Event): void;
1714
+ handleChipsWheel(event: WheelEvent): void;
1715
+ handleChipsPointerDown(event: PointerEvent): void;
1716
+ private readonly onChipsPanMove;
1717
+ private readonly onChipsPanUp;
1718
+ private endChipsPan;
1719
+ private resolveChipsScroller;
1720
+ private consumeChipsClickSuppression;
1721
+ private syncMobileModeToggleFromScroll;
1722
+ private getInlineScrollFromStart;
1492
1723
  handleButtonKeyDown(e: Event): void;
1493
1724
  handleKeyDown(e: AXHtmlEvent<KeyboardEvent>): void;
1725
+ private handleAllFilterBackspace;
1494
1726
  onEnterKeyPressed(e: Event): void;
1495
1727
  handleTagClick(item: any, event?: Event): void;
1496
1728
  handleRemoveTag(e: Event, index: number): void;
@@ -1507,7 +1739,8 @@ declare class AXPQueryFiltersComponent {
1507
1739
  }): string;
1508
1740
  handleSelectFilters(e: AXValueChangedEvent): void;
1509
1741
  handleAddAllInlineFilters(): void;
1510
- protected getActiveOperator(filter: AXPFilterDefinition | null): string | undefined;
1742
+ getInlineSearchValue(): string;
1743
+ applyInlineSearch(value: string): void;
1511
1744
  handleSelectInlineFilter(filter: AXPFilterDefinition): void;
1512
1745
  handleInlineFilterKeyDown(e: KeyboardEvent, filter: AXPFilterDefinition): void;
1513
1746
  handlePopoverClosed(e: AXEvent): void;
@@ -1536,6 +1769,27 @@ declare class AXPQueryFiltersComponent {
1536
1769
  * Returns the committed filter context entry (snapshot while editing, live context otherwise).
1537
1770
  */
1538
1771
  private getCommittedFilterEntry;
1772
+ protected getConditionOperatorKey(conditionId: string): string | undefined;
1773
+ protected getConditionDefinition(field: string | undefined): AXPFilterDefinition | undefined;
1774
+ protected getConditionWidget(condition: QueryFilterEditingCondition): AXPFilterDefinition['widget'] | undefined;
1775
+ protected setConditionField(conditionId: string, field: string): void;
1776
+ protected setRootLogic(logic: QueryFilterGroupLogic): void;
1777
+ protected setEditingLogic(logic: QueryFilterGroupLogic): void;
1778
+ protected handleCancelFilter(): void;
1779
+ protected resolveEditingConditionContextField(conditionId: string): string;
1780
+ protected handleAddCondition(): void;
1781
+ protected handleRemoveCondition(conditionId: string): void;
1782
+ private beginEditingFilter;
1783
+ private discardActiveFilter;
1784
+ private buildConditionDrafts;
1785
+ private seedConditionContext;
1786
+ private clearFilterContextKeys;
1787
+ private syncCanonicalFilterContext;
1788
+ private unwrapFilterContextEntry;
1789
+ private getCommittedFilterConditions;
1790
+ private resolveGroupContextPrefix;
1791
+ private isSameFilterGroup;
1792
+ private isEditingFilter;
1539
1793
  private createExpressionScope;
1540
1794
  private isObservableLike;
1541
1795
  private buildFilterTriggerScope;
@@ -1543,7 +1797,7 @@ declare class AXPQueryFiltersComponent {
1543
1797
  private getFilterWidgetScopeForDefinition;
1544
1798
  private removeFilterFieldByName;
1545
1799
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryFiltersComponent, never>;
1546
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryFiltersComponent, "axp-query-filters", never, { "filtersDefinitions": { "alias": "filtersDefinitions"; "required": false; "isSignal": true; }; "initialFilters": { "alias": "initialFilters"; "required": false; "isSignal": true; }; "quickSearch": { "alias": "quickSearch"; "required": false; "isSignal": true; }; }, { "onFiltersChanged": "onFiltersChanged"; }, never, never, true, never>;
1800
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryFiltersComponent, "axp-query-filters", never, { "filtersDefinitions": { "alias": "filtersDefinitions"; "required": false; "isSignal": true; }; "initialFilters": { "alias": "initialFilters"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "quickSearch": { "alias": "quickSearch"; "required": false; "isSignal": true; }; "sortPresets": { "alias": "sortPresets"; "required": false; "isSignal": true; }; "activeSortPresetName": { "alias": "activeSortPresetName"; "required": false; "isSignal": true; }; }, { "onFiltersChanged": "onFiltersChanged"; "onSortPresetSelected": "onSortPresetSelected"; }, never, never, true, never>;
1547
1801
  }
1548
1802
 
1549
1803
  interface AXPPreloadFiltersApplyEvent {
@@ -1602,20 +1856,25 @@ declare class AXPImageEditorPopupComponent extends AXBasePageComponent {
1602
1856
  showHistory: _angular_core.InputSignal<boolean>;
1603
1857
  look: _angular_core.InputSignal<"solid" | "outline" | "blank">;
1604
1858
  aspectRatio: _angular_core.InputSignal<string | undefined>;
1859
+ square: _angular_core.InputSignal<boolean>;
1605
1860
  private blobUrl;
1606
1861
  protected url: _angular_core.WritableSignal<string | null>;
1862
+ protected cropSize: _angular_core.Signal<number>;
1863
+ protected cropAspectRatioBinding: _angular_core.Signal<string[]>;
1607
1864
  protected context: _angular_core.WritableSignal<{
1608
1865
  image: Blob | null;
1609
1866
  }>;
1610
1867
  constructor();
1611
1868
  ngOnInit(): Promise<void>;
1612
- handleValueChanged(e: any): void;
1869
+ handleValueChanged(e: {
1870
+ value?: Blob[];
1871
+ }): void;
1613
1872
  handleSave(): Promise<void>;
1614
1873
  private extractEditedImage;
1615
1874
  handleCancel(): void;
1616
1875
  ngOnDestroy(): void;
1617
1876
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPImageEditorPopupComponent, never>;
1618
- 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>;
1877
+ 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; }; "square": { "alias": "square"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1619
1878
  }
1620
1879
 
1621
1880
  interface AXPImageEditorOpenOptions {
@@ -1624,6 +1883,8 @@ interface AXPImageEditorOpenOptions {
1624
1883
  showHistory?: boolean;
1625
1884
  look?: 'solid' | 'outline' | 'blank';
1626
1885
  aspectRatio?: string;
1886
+ /** Square dialog with 1:1 crop viewport (profile photo). */
1887
+ square?: boolean;
1627
1888
  }
1628
1889
  declare class AXPImageEditorService {
1629
1890
  private readonly popupService;
@@ -1682,6 +1943,8 @@ interface AXPSignatureEditorOpenOptions {
1682
1943
  disabled?: boolean;
1683
1944
  /** Footer primary action label (defaults to Apply). */
1684
1945
  submitActionKey?: string;
1946
+ /** Registered signature provider name. Forwarded to the pad so the dialog can apply a saved signature. */
1947
+ signatureProvider?: string;
1685
1948
  }
1686
1949
  interface AXPSignatureEditorResult {
1687
1950
  action: AXPSignatureEditorAction;
@@ -1701,6 +1964,20 @@ declare class AXPSignatureEditorService {
1701
1964
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPSignatureEditorService>;
1702
1965
  }
1703
1966
 
1967
+ /**
1968
+ * Supplies a saved signature the signature widget can apply.
1969
+ * Register with {@link AXP_SIGNATURE_PROVIDER}. The widget option `signatureProvider` selects one by `name`.
1970
+ */
1971
+ interface AXPSignatureProvider {
1972
+ /** Stable key referenced by the signature widget option. */
1973
+ name: string;
1974
+ /** Action label. Prefer an i18n key. */
1975
+ title: string;
1976
+ /** Current saved signature image, or null when none is stored. */
1977
+ load(): Promise<string | null>;
1978
+ }
1979
+ declare const AXP_SIGNATURE_PROVIDER: InjectionToken<AXPSignatureProvider[]>;
1980
+
1704
1981
  /**
1705
1982
  * One selectable entry for {@link AXPItemConfiguratorComponent}.
1706
1983
  * Parents map external data into this shape. {@link propertyDefinitions} drive {@link AXPPropertyViewerService} tabs.
@@ -1762,6 +2039,28 @@ declare class AXPItemConfiguratorComponent {
1762
2039
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPItemConfiguratorComponent, "axp-item-configurator", never, { "selectedItemId": { "alias": "selectedItemId"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "headerActions": { "alias": "headerActions"; "required": false; "isSignal": true; }; }, { "selectedItemId": "selectedItemIdChange"; "values": "valuesChange"; }, never, never, true, never>;
1763
2040
  }
1764
2041
 
2042
+ interface AXPLocalDataSourceEditorDialogInput {
2043
+ mode: 'create' | 'edit';
2044
+ name?: string;
2045
+ columns?: readonly AXPLocalDataSourceColumn[];
2046
+ items?: readonly unknown[];
2047
+ }
2048
+ interface AXPLocalDataSourceEditorDialogResult {
2049
+ name: string;
2050
+ columns: AXPLocalDataSourceColumn[];
2051
+ items: Record<string, unknown>[];
2052
+ }
2053
+ /**
2054
+ * Create/edit a form-local named list via {@link AXPLayoutBuilderService} dialog.
2055
+ * Items use `axp-spreadsheet` (add / remove rows and columns).
2056
+ */
2057
+ declare class AXPLocalDataSourceEditorDialogService {
2058
+ private readonly layoutBuilder;
2059
+ open(initial: AXPLocalDataSourceEditorDialogInput): Promise<AXPLocalDataSourceEditorDialogResult | null>;
2060
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPLocalDataSourceEditorDialogService, never>;
2061
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPLocalDataSourceEditorDialogService>;
2062
+ }
2063
+
1765
2064
  /**
1766
2065
  * Floating zoom controls for canvas-style views (org chart, workflow designer, etc.).
1767
2066
  * Parent container should be `position: relative` so the bar anchors to the bottom-end.
@@ -2406,6 +2705,21 @@ declare class AXPPageComponentRegistryService {
2406
2705
  */
2407
2706
  declare const AXP_PAGE_COMPONENT_PROVIDER: InjectionToken<AXPPageComponentProvider[]>;
2408
2707
 
2708
+ /**
2709
+ * Deep-merges objects but replaces arrays from later sources.
2710
+ * Lodash `merge` walks arrays by index and keeps extra destination items, so
2711
+ * repeater delete/edit (and nested filter lists) cannot persist.
2712
+ */
2713
+ declare function mergeObjectsReplacingArrays<T extends object>(...sources: Array<T | Record<string, unknown> | null | undefined>): T;
2714
+
2715
+ /**
2716
+ * How binding-expression mode is presented in the property viewer.
2717
+ * `inline` — code editor in the panel (use when there is enough width, e.g. a popup).
2718
+ * `popup` — a button that opens the code editor in a dialog (use in the designer side panel).
2719
+ */
2720
+ type AXPPropertyViewerBindingExpressionEditorMode = 'inline' | 'popup';
2721
+ /** Minimum visible lines for the binding-expression code editor (inline and dialog). */
2722
+ declare const PROPERTY_VIEWER_EXPRESSION_EDITOR_MIN_LINES = 3;
2409
2723
  interface AXPPropertyViewerGroup {
2410
2724
  name: string;
2411
2725
  title: string;
@@ -2442,12 +2756,13 @@ declare class AXPPropertyViewerComponent {
2442
2756
  /**
2443
2757
  * Determines rendering mode.
2444
2758
  */
2445
- mode: _angular_core.InputSignal<"simple" | "advanced">;
2759
+ mode: _angular_core.InputSignal<"advanced" | "simple">;
2446
2760
  /**
2447
2761
  * When a property uses binding expressions, controls how the expression is edited:
2448
- * `inline` — code editor in the panel (default); `popup` — button that opens the dialog editor.
2762
+ * `inline` — code editor in the panel (default; use in popups);
2763
+ * `popup` — button that opens the dialog editor (use in the designer side panel).
2449
2764
  */
2450
- bindingExpressionEditorMode: _angular_core.InputSignal<"inline" | "popup">;
2765
+ bindingExpressionEditorMode: _angular_core.InputSignal<AXPPropertyViewerBindingExpressionEditorMode>;
2451
2766
  /**
2452
2767
  * Emits when property context changes.
2453
2768
  */
@@ -2470,6 +2785,7 @@ declare class AXPPropertyViewerComponent {
2470
2785
  private readonly expressionEvaluator;
2471
2786
  private readonly popupService;
2472
2787
  private readonly form;
2788
+ private readonly widgetsContainer;
2473
2789
  constructor();
2474
2790
  /**
2475
2791
  * Replaces the current context with the provided value and emits an init event.
@@ -2529,6 +2845,13 @@ declare class AXPPropertyViewerComponent {
2529
2845
  * blank instead of keeping the previous literal (e.g. true/false).
2530
2846
  */
2531
2847
  protected setExpressionMode(prop: AXPWidgetProperty, useExpression: boolean): void;
2848
+ /**
2849
+ * Monaco/TypeScript editor — loaded the first time inline expression mode is shown.
2850
+ */
2851
+ protected readonly inlineCodeEditorComponent: WritableSignal<Type<unknown> | null>;
2852
+ protected inlineCodeEditor(): Type<unknown> | null;
2853
+ protected bindingExpressionChangeHandler(prop: AXPWidgetProperty): (value: string) => void;
2854
+ private ensureInlineCodeEditor;
2532
2855
  /**
2533
2856
  * Current binding expression string at the property path (for inline editor ngModel).
2534
2857
  */
@@ -2562,7 +2885,7 @@ declare class AXPPropertyViewerPopupComponent extends AXBasePageComponent {
2562
2885
  private readonly toastService;
2563
2886
  private readonly translationService;
2564
2887
  tabs: _angular_core.InputSignal<AXPPropertyViewerTab[]>;
2565
- mode: _angular_core.InputSignal<"simple" | "advanced">;
2888
+ mode: _angular_core.InputSignal<"advanced" | "simple">;
2566
2889
  context: _angular_core.InputSignal<any>;
2567
2890
  /**
2568
2891
  * Optional hook from `data.onApply`. Throw or reject to keep the popup open.
@@ -2683,7 +3006,7 @@ declare class AXPRepeaterRowsLayoutComponent {
2683
3006
  type AppointmentWithProvider = AXSchedulerAppointment & {
2684
3007
  provider?: string;
2685
3008
  };
2686
- declare class AXPResourceAppointmentComponent implements OnInit {
3009
+ declare class AXPResourceAppointmentBoardComponent implements OnInit {
2687
3010
  /** Show resource headers in the timeline views. */
2688
3011
  showResourceHeaders: _angular_core.InputSignal<boolean>;
2689
3012
  /** Show appointments that have no resourceId. */
@@ -2724,6 +3047,21 @@ declare class AXPResourceAppointmentComponent implements OnInit {
2724
3047
  }): void;
2725
3048
  protected handleContextMenuOpening(event: AXContextMenuOpeningEvent): Promise<void>;
2726
3049
  protected handleContextMenuItemClick(event: AXContextMenuItemsClickEvent): void;
3050
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPResourceAppointmentBoardComponent, never>;
3051
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPResourceAppointmentBoardComponent, "axp-resource-appointment-board", never, { "showResourceHeaders": { "alias": "showResourceHeaders"; "required": false; "isSignal": true; }; "showUnassignedAppointments": { "alias": "showUnassignedAppointments"; "required": false; "isSignal": true; }; "providerName": { "alias": "providerName"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3052
+ }
3053
+
3054
+ /**
3055
+ * Thin host for the resource-appointment board. `@acorex/components/scheduler`
3056
+ * loads when this component is instantiated, not when the layout/components
3057
+ * barrel is evaluated on dest first load.
3058
+ */
3059
+ declare class AXPResourceAppointmentComponent {
3060
+ showResourceHeaders: _angular_core.InputSignal<boolean>;
3061
+ showUnassignedAppointments: _angular_core.InputSignal<boolean>;
3062
+ providerName: _angular_core.InputSignal<string | undefined>;
3063
+ protected readonly board: _angular_core.WritableSignal<Type<AXPResourceAppointmentBoardComponent> | null>;
3064
+ constructor();
2727
3065
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPResourceAppointmentComponent, never>;
2728
3066
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPResourceAppointmentComponent, "axp-resource-appointment", never, { "showResourceHeaders": { "alias": "showResourceHeaders"; "required": false; "isSignal": true; }; "showUnassignedAppointments": { "alias": "showUnassignedAppointments"; "required": false; "isSignal": true; }; "providerName": { "alias": "providerName"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2729
3067
  }
@@ -2940,16 +3278,28 @@ declare class AXPSectionItemsBuilderComponent {
2940
3278
 
2941
3279
  declare class AXPQuerySortsComponent {
2942
3280
  sortDefinitions: _angular_core.ModelSignal<AXPSortDefinition[]>;
2943
- sortQueries: _angular_core.WritableSignal<AXPSortDefinition[]>;
3281
+ sortPresets: _angular_core.InputSignal<AXPEntitySortPreset[]>;
2944
3282
  initialSortQueries: _angular_core.InputSignal<AXPSortQuery[]>;
3283
+ defaultSortQueries: _angular_core.InputSignal<AXPSortQuery[]>;
2945
3284
  sortQueriesChange: _angular_core.OutputEmitterRef<AXPSortQuery[]>;
3285
+ sortQueries: _angular_core.WritableSignal<AXPSortDefinition[]>;
3286
+ protected hasPresets: _angular_core.Signal<boolean>;
3287
+ protected activeSortSignature: _angular_core.Signal<string>;
3288
+ protected canReset: _angular_core.Signal<boolean>;
2946
3289
  constructor();
2947
- private emitActiveSortQueries;
2948
3290
  protected drop(event: CdkDragDrop<unknown[]>): void;
2949
- getSortDirection(item: AXPSortDefinition): "asc" | "desc" | undefined;
2950
3291
  protected changeItemSort(item: AXPSortDefinition): void;
3292
+ protected applyPreset(preset: AXPEntitySortPreset): void;
3293
+ protected resetSorts(): void;
3294
+ getSortDirection(item: AXPSortDefinition): "asc" | "desc" | undefined;
3295
+ protected isPresetActive(preset: AXPEntitySortPreset): boolean;
3296
+ protected presetFirstDir(preset: AXPEntitySortPreset): 'asc' | 'desc' | undefined;
3297
+ private resolvePresetSorts;
3298
+ private applySorts;
3299
+ private emitActiveSortQueries;
3300
+ private emitSortQueries;
2951
3301
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQuerySortsComponent, never>;
2952
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQuerySortsComponent, "axp-query-sorts", never, { "sortDefinitions": { "alias": "sortDefinitions"; "required": false; "isSignal": true; }; "initialSortQueries": { "alias": "initialSortQueries"; "required": false; "isSignal": true; }; }, { "sortDefinitions": "sortDefinitionsChange"; "sortQueriesChange": "sortQueriesChange"; }, never, never, true, never>;
3302
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQuerySortsComponent, "axp-query-sorts", never, { "sortDefinitions": { "alias": "sortDefinitions"; "required": false; "isSignal": true; }; "sortPresets": { "alias": "sortPresets"; "required": false; "isSignal": true; }; "initialSortQueries": { "alias": "initialSortQueries"; "required": false; "isSignal": true; }; "defaultSortQueries": { "alias": "defaultSortQueries"; "required": false; "isSignal": true; }; }, { "sortDefinitions": "sortDefinitionsChange"; "sortQueriesChange": "sortQueriesChange"; }, never, never, true, never>;
2953
3303
  }
2954
3304
 
2955
3305
  /**
@@ -3038,6 +3388,27 @@ interface AXPSpreadsheetCellChangeEvent {
3038
3388
  */
3039
3389
  row: Record<string, any>;
3040
3390
  }
3391
+ /**
3392
+ * Event emitted when a column is added or removed (when those options are enabled)
3393
+ */
3394
+ interface AXPSpreadsheetColumnChangeEvent {
3395
+ /**
3396
+ * Type of change: 'add' or 'remove'
3397
+ */
3398
+ type: 'add' | 'remove' | 'move' | 'update';
3399
+ /**
3400
+ * Column identifier
3401
+ */
3402
+ columnName: string;
3403
+ /**
3404
+ * Full column definition (for 'add' events, and the removed column on 'remove')
3405
+ */
3406
+ column?: AXPSpreadsheetColumn;
3407
+ /**
3408
+ * All columns after the change
3409
+ */
3410
+ columns: AXPSpreadsheetColumn[];
3411
+ }
3041
3412
  /**
3042
3413
  * Event emitted when a row is added or removed (dynamic mode only)
3043
3414
  */
@@ -3045,7 +3416,7 @@ interface AXPSpreadsheetRowChangeEvent {
3045
3416
  /**
3046
3417
  * Type of change: 'add' or 'remove'
3047
3418
  */
3048
- type: 'add' | 'remove';
3419
+ type: 'add' | 'remove' | 'move';
3049
3420
  /**
3050
3421
  * Row identifier
3051
3422
  */
@@ -3082,6 +3453,10 @@ declare class AXPSpreadsheetComponent {
3082
3453
  private readonly shortcutRegistry;
3083
3454
  private readonly destroyRef;
3084
3455
  private readonly elementRef;
3456
+ private readonly injector;
3457
+ private readonly widgetRegistry;
3458
+ private readonly widgetPropertyViewer;
3459
+ private readonly chromeDropdowns;
3085
3460
  /**
3086
3461
  * Translated column titles
3087
3462
  */
@@ -3134,6 +3509,20 @@ declare class AXPSpreadsheetComponent {
3134
3509
  * Can be enabled for fixed mode if needed
3135
3510
  */
3136
3511
  allowRemoveRows: _angular_core.InputSignal<boolean>;
3512
+ /**
3513
+ * Whether to allow adding columns from the grid chrome (default: false).
3514
+ * Existing hosts keep a fixed column schema unless they opt in.
3515
+ */
3516
+ allowAddColumns: _angular_core.InputSignal<boolean>;
3517
+ /**
3518
+ * Whether to allow removing columns from the grid chrome (default: false).
3519
+ */
3520
+ allowRemoveColumns: _angular_core.InputSignal<boolean>;
3521
+ /**
3522
+ * Show apply / cancel buttons on the active cell.
3523
+ * When false, the cell commits automatically on blur.
3524
+ */
3525
+ showCellActions: _angular_core.InputSignal<boolean>;
3137
3526
  /**
3138
3527
  * Emitted when a single cell value changes
3139
3528
  */
@@ -3142,6 +3531,14 @@ declare class AXPSpreadsheetComponent {
3142
3531
  * Emitted when rows are added or removed (dynamic mode only)
3143
3532
  */
3144
3533
  rowChange: _angular_core.OutputEmitterRef<AXPSpreadsheetRowChangeEvent>;
3534
+ /**
3535
+ * Emitted when columns are added or removed (only if those options are enabled)
3536
+ */
3537
+ columnChange: _angular_core.OutputEmitterRef<AXPSpreadsheetColumnChangeEvent>;
3538
+ /**
3539
+ * Two-way companion for `[columns]` / `[(columns)]` after add/remove.
3540
+ */
3541
+ columnsChange: _angular_core.OutputEmitterRef<AXPSpreadsheetColumn[]>;
3145
3542
  /**
3146
3543
  * Emitted when the entire spreadsheet data changes
3147
3544
  */
@@ -3153,10 +3550,22 @@ declare class AXPSpreadsheetComponent {
3153
3550
  rowId: string;
3154
3551
  columnName: string;
3155
3552
  } | null>;
3553
+ /**
3554
+ * Last selected cell so focus / Esc can reopen or resume without a click.
3555
+ */
3556
+ private selectedCell;
3557
+ /**
3558
+ * After Esc, host focus must not immediately reopen the editor.
3559
+ */
3560
+ private suppressHostFocusEdit;
3156
3561
  /**
3157
3562
  * Original value when entering edit mode (for cancel functionality)
3158
3563
  */
3159
3564
  private originalCellValue;
3565
+ /**
3566
+ * Local column list after add/remove when the parent has not yet written `[columns]` back.
3567
+ */
3568
+ private columnsOverride;
3160
3569
  /**
3161
3570
  * Internal rows state (for fixed mode)
3162
3571
  */
@@ -3175,6 +3584,14 @@ declare class AXPSpreadsheetComponent {
3175
3584
  * Key: `${rowIndex}_${columnName}`, Value: any
3176
3585
  */
3177
3586
  private cellValueCache;
3587
+ /**
3588
+ * Columns after optional in-grid add/remove, else the `[columns]` input.
3589
+ */
3590
+ protected currentColumns: _angular_core.Signal<AXPSpreadsheetColumn[]>;
3591
+ /**
3592
+ * Excel-style numeric index when the host does not supply a row title column.
3593
+ */
3594
+ protected readonly useExcelRowIndex: _angular_core.Signal<boolean>;
3178
3595
  /**
3179
3596
  * Get current rows based on mode
3180
3597
  */
@@ -3206,11 +3623,21 @@ declare class AXPSpreadsheetComponent {
3206
3623
  * Check if only rows are empty (columns exist but no rows)
3207
3624
  */
3208
3625
  protected isRowsEmpty: _angular_core.Signal<boolean>;
3626
+ protected readonly supportedColumnWidgets: _angular_core.Signal<{
3627
+ type: string;
3628
+ title: string;
3629
+ icon: string;
3630
+ }[]>;
3209
3631
  constructor();
3210
3632
  /**
3211
3633
  * Get the value for a specific cell by row index
3212
3634
  */
3213
3635
  protected getCellValue(rowIndex: number, columnName: string): any;
3636
+ /**
3637
+ * Whether the cell has a value worth showing in view mode.
3638
+ * Blank strings use the placeholder so empty Excel rows stay empty.
3639
+ */
3640
+ protected hasCellDisplayValue(rowIndex: number, columnName: string): boolean;
3214
3641
  /**
3215
3642
  * Get row title from row object using rowTitlePath
3216
3643
  */
@@ -3241,6 +3668,10 @@ declare class AXPSpreadsheetComponent {
3241
3668
  * Handle cell click to start editing
3242
3669
  */
3243
3670
  protected handleCellClick(rowId: string, columnName: string, event?: MouseEvent): void;
3671
+ /**
3672
+ * Tab / click into the grid starts the selected (or first) cell.
3673
+ */
3674
+ protected handleHostFocusIn(event: FocusEvent): void;
3244
3675
  /**
3245
3676
  * Handle cell value change from widget
3246
3677
  * The widget sets the value at path like rows[index].column.path
@@ -3255,6 +3686,11 @@ declare class AXPSpreadsheetComponent {
3255
3686
  * Handle blur event to stop editing (when user clicks away from cell)
3256
3687
  */
3257
3688
  protected handleCellBlur(rowId: string, columnName: string): void;
3689
+ /**
3690
+ * Excel-style move: Tab / Shift+Tab change column, Enter / Shift+Enter change row.
3691
+ */
3692
+ protected handleCellNavigate(direction: 'next' | 'previous' | 'up' | 'down'): void;
3693
+ protected handleGridNavigate(direction: 'next' | 'previous' | 'up' | 'down'): void;
3258
3694
  /**
3259
3695
  * Commit cell edit (save changes and close editing mode)
3260
3696
  */
@@ -3267,25 +3703,182 @@ declare class AXPSpreadsheetComponent {
3267
3703
  * Handle click outside to stop editing
3268
3704
  */
3269
3705
  protected handleClickOutside(event: MouseEvent): void;
3706
+ protected showRowChromeMenu(): boolean;
3707
+ protected showColumnChromeMenu(): boolean;
3708
+ protected isFirstRow(rowId: string): boolean;
3709
+ protected isLastRow(rowId: string): boolean;
3710
+ protected isFirstColumn(columnName: string): boolean;
3711
+ protected isLastColumn(columnName: string): boolean;
3270
3712
  /**
3271
3713
  * Handle add row (dynamic mode only)
3272
3714
  */
3273
3715
  protected handleAddRow(): void;
3716
+ protected handleInsertRow(rowId: string, position: 'before' | 'after'): void;
3717
+ protected handleMoveRow(rowId: string, direction: 'up' | 'down'): void;
3274
3718
  /**
3275
3719
  * Handle remove row (works for both fixed and dynamic modes)
3276
3720
  */
3277
- protected handleRemoveRow(rowId: string, _event: AXClickEvent): void;
3721
+ protected handleRemoveRow(rowId: string, _event?: AXClickEvent): void;
3722
+ protected handleChromeDropdownClick(event: AXClickEvent): void;
3723
+ /**
3724
+ * Handle add column (opt-in via allowAddColumns)
3725
+ */
3726
+ protected handleAddColumnOfType(widgetType: string): void;
3727
+ protected handleInsertColumn(columnName: string, position: 'before' | 'after'): void;
3728
+ protected handleEditColumnProperties(columnName: string): void;
3729
+ protected handleMoveColumn(columnName: string, direction: 'previous' | 'next'): void;
3730
+ /**
3731
+ * Handle remove column (opt-in via allowRemoveColumns)
3732
+ */
3733
+ protected handleRemoveColumn(columnName: string): void;
3734
+ private isGridFocused;
3735
+ private beginEditAtSelection;
3736
+ private resolveSelectedOrFirstCell;
3737
+ private returnFocusToGrid;
3738
+ /**
3739
+ * Next editable cell in Excel order. Adds a dynamic row when moving off the bottom.
3740
+ */
3741
+ private resolveNextEditableCell;
3742
+ /**
3743
+ * Left/right stay in the text until the caret is at the edge.
3744
+ * Up/down always leave a single-line editor; textareas only at the first/last line.
3745
+ */
3746
+ private shouldNavigateWithArrow;
3747
+ private getActiveEditorControl;
3748
+ private isNodeInside;
3749
+ private isCaretAtMultilineEdge;
3750
+ private scheduleFocusEditingEditor;
3751
+ private tryFocusEditingEditor;
3752
+ private findFocusableEditor;
3753
+ private findRowIndex;
3754
+ private createEmptyRow;
3755
+ private insertRowAt;
3756
+ private insertBlankColumnAt;
3757
+ private insertColumnAt;
3758
+ private promptColumnWidgetAndInsert;
3759
+ private promptColumnWidgetAndUpdate;
3760
+ private promptColumnWidget;
3761
+ private applyRowList;
3278
3762
  /**
3279
3763
  * Generate unique row ID for dynamic mode
3280
3764
  */
3281
3765
  private generateRowId;
3766
+ private nextColumnTitle;
3767
+ private allocateColumnName;
3768
+ private renameColumnPathOnRows;
3769
+ private applyColumns;
3770
+ private stripColumnPathFromRows;
3282
3771
  /**
3283
3772
  * Update rows array (sync internal state)
3284
3773
  */
3285
3774
  private updateRows;
3286
3775
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSpreadsheetComponent, never>;
3287
- 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>;
3776
+ 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; }; "allowAddColumns": { "alias": "allowAddColumns"; "required": false; "isSignal": true; }; "allowRemoveColumns": { "alias": "allowRemoveColumns"; "required": false; "isSignal": true; }; "showCellActions": { "alias": "showCellActions"; "required": false; "isSignal": true; }; }, { "rowsModel": "rowsModelChange"; "cellChange": "cellChange"; "rowChange": "rowChange"; "columnChange": "columnChange"; "columnsChange": "columnsChange"; "spreadsheetChange": "spreadsheetChange"; }, never, never, true, never>;
3777
+ }
3778
+
3779
+ interface AXPWidgetPropertyInjection {
3780
+ property: AXPWidgetProperty;
3781
+ tab?: {
3782
+ name?: string;
3783
+ title?: string;
3784
+ };
3785
+ group?: {
3786
+ name?: string;
3787
+ title?: string;
3788
+ };
3789
+ }
3790
+ interface AXPWidgetPropertyViewerConfig {
3791
+ title: string;
3792
+ widget: AXPWidgetNode;
3793
+ mode?: 'simple' | 'advanced';
3794
+ onApply?: (result: AXPWidgetPropertyViewerResult) => void | Promise<void>;
3795
+ /**
3796
+ * Property names to exclude from the viewer.
3797
+ */
3798
+ exclude?: string[];
3799
+ /**
3800
+ * Custom property injection configuration.
3801
+ */
3802
+ custom?: {
3803
+ /**
3804
+ * Custom property injection entries.
3805
+ */
3806
+ properties: AXPWidgetPropertyInjection[];
3807
+ /**
3808
+ * Default tab fallback if property injection doesn't specify one.
3809
+ * When omitted, falls back to the first tab or "general".
3810
+ */
3811
+ defaultTab?: {
3812
+ name?: string;
3813
+ title?: string;
3814
+ };
3815
+ /**
3816
+ * Default group fallback when injection doesn't specify a group.
3817
+ * When omitted, falls back to the tab's first group or property defined group.
3818
+ */
3819
+ defaultGroup?: {
3820
+ name?: string;
3821
+ title?: string;
3822
+ };
3823
+ };
3824
+ }
3825
+ /** Emitted when the dialog applies; `values` is the updated viewer context (merge into {@link AXPWidgetNode} as needed). */
3826
+ interface AXPWidgetPropertyViewerResult {
3827
+ values: any;
3828
+ mode: 'init' | 'update';
3829
+ }
3830
+ interface IAXPWidgetPropertyViewerRoot {
3831
+ dialog(delegate: (container: IAXPWidgetPropertyViewerDialogBuilder) => void): IAXPWidgetPropertyViewerDialogBuilder;
3288
3832
  }
3833
+ interface IAXPWidgetPropertyViewerDialogBuilder {
3834
+ setTitle(title: string): IAXPWidgetPropertyViewerDialogBuilder;
3835
+ /**
3836
+ * Initial widget state shown in the viewer (type, options, name/path, …). Call before {@link show}.
3837
+ */
3838
+ setWidget(widget: AXPWidgetNode): IAXPWidgetPropertyViewerDialogBuilder;
3839
+ setMode(mode: 'simple' | 'advanced'): IAXPWidgetPropertyViewerDialogBuilder;
3840
+ setExclude(exclude: string[]): IAXPWidgetPropertyViewerDialogBuilder;
3841
+ setCustom(custom: AXPWidgetPropertyViewerConfig['custom']): IAXPWidgetPropertyViewerDialogBuilder;
3842
+ /**
3843
+ * When set to a non-empty array, builds tabs from these properties and skips registry lookup for {@link setWidget}'s type.
3844
+ * Omit or clear to resolve widget config from {@link AXPWidgetRegistryService} as usual.
3845
+ */
3846
+ setPropertyDefinitions(properties: AXPWidgetProperty[] | null): IAXPWidgetPropertyViewerDialogBuilder;
3847
+ onAction(handler: (dialogRef: AXPPropertyViewerActionRef) => void | Promise<void> | unknown | Promise<unknown>): IAXPWidgetPropertyViewerDialogBuilder;
3848
+ /**
3849
+ * Applies edits and returns updated context; merge {@link AXPWidgetPropertyViewerResult.values} into your widget node
3850
+ * (typically `options` and any top-level fields the viewer exposes).
3851
+ */
3852
+ show(): Promise<AXPWidgetPropertyViewerResult | null>;
3853
+ }
3854
+ declare class AXPWidgetPropertyViewerService {
3855
+ private readonly widgetRegistryService;
3856
+ private readonly propertyViewerService;
3857
+ /**
3858
+ * Same shape as `AXPPropertyViewerService.create()` — use `.dialog((d) => { ... }).show()`.
3859
+ */
3860
+ create(): IAXPWidgetPropertyViewerRoot;
3861
+ /**
3862
+ * One-shot open (delegates to {@link #create} `.dialog().show()`).
3863
+ */
3864
+ open(config: AXPWidgetPropertyViewerConfig): Promise<AXPWidgetPropertyViewerResult | null>;
3865
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerService, never>;
3866
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPWidgetPropertyViewerService>;
3867
+ }
3868
+
3869
+ declare const AXP_SPREADSHEET_COLUMN_WIDGET_TYPES: readonly [string, string, string, string, string, string, string];
3870
+ type AXPSpreadsheetColumnWidgetType = (typeof AXP_SPREADSHEET_COLUMN_WIDGET_TYPES)[number];
3871
+ declare function toSpreadsheetColumnWidget(type: string, values: unknown): AXPWidgetNode;
3872
+ declare function readSpreadsheetColumnWidth(widget: AXPWidgetNode): string | undefined;
3873
+ declare function asSpreadsheetColumnTitle(title: AXPMultiLanguageString | undefined, fallback?: string): string | undefined;
3874
+ declare const SPREADSHEET_COLUMN_NAME_PATH = "columnName";
3875
+ declare const SPREADSHEET_COLUMN_TITLE_PATH = "columnTitle";
3876
+ declare function spreadsheetColumnIdentityProperties(): AXPWidgetPropertyInjection[];
3877
+ declare function readSpreadsheetColumnIdentity(values: unknown): {
3878
+ name?: string;
3879
+ title?: string;
3880
+ };
3881
+ declare function normalizeSpreadsheetColumnName(raw: string | undefined): string;
3289
3882
 
3290
3883
  /**
3291
3884
  * Host configuration for {@link AXPStandardSectionItemsBuilderComponent}.
@@ -3502,6 +4095,7 @@ declare class AXPTemplateViewerComponent extends AXBasePageComponent {
3502
4095
  protected readonly document: _angular_core.WritableSignal<AXPWidgetNode>;
3503
4096
  protected readonly currentPageIndex: _angular_core.WritableSignal<number>;
3504
4097
  protected readonly _config: _angular_core.WritableSignal<AXPTemplateViewerConfig | undefined>;
4098
+ readonly sources: _angular_core.Signal<_acorex_platform_framework_client_layout_widget_core.AXPLocalDataSource[]>;
3505
4099
  protected readonly currentPage: _angular_core.Signal<AXPWidgetNode>;
3506
4100
  protected ngOnInit(): Promise<void>;
3507
4101
  private loadTemplate;
@@ -3626,7 +4220,8 @@ declare class AXPUserAvatarComponent {
3626
4220
  displayName: _angular_core.InputSignal<string | undefined>;
3627
4221
  /** Resolved avatar URL when `userId` is not a platform user row. */
3628
4222
  displayAvatar: _angular_core.InputSignal<string | undefined>;
3629
- protected readonly presenceStatus: _angular_core.WritableSignal<"online" | "offline" | "away" | "busy" | null>;
4223
+ protected readonly presenceStatus: _angular_core.WritableSignal<"offline" | "online" | "away" | "busy" | null>;
4224
+ readonly avatarLoading: _angular_core.WritableSignal<boolean>;
3630
4225
  src: _angular_core.WritableSignal<string>;
3631
4226
  readonly userName: _angular_core.Signal<string>;
3632
4227
  readonly firstName: _angular_core.Signal<string>;
@@ -3826,6 +4421,10 @@ declare class AXPVirtualKeypadComponent {
3826
4421
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPVirtualKeypadComponent, "axp-virtual-keypad", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showLetterHints": { "alias": "showLetterHints"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; }, { "digitPress": "digitPress"; "backspace": "backspace"; "keyPress": "keyPress"; }, never, never, true, never>;
3827
4422
  }
3828
4423
 
4424
+ interface AXPQueryViewContextMenuEvent {
4425
+ event: MouseEvent;
4426
+ view: AXPViewQuery;
4427
+ }
3829
4428
  declare class AXPQueryViewsComponent {
3830
4429
  #private;
3831
4430
  protected popupService: AXPopupService;
@@ -3833,12 +4432,56 @@ declare class AXPQueryViewsComponent {
3833
4432
  protected tabs: _angular_core.Signal<AXTabsComponent | undefined>;
3834
4433
  views: _angular_core.ModelSignal<AXPViewQuery[]>;
3835
4434
  selectedView: _angular_core.ModelSignal<AXPViewQuery>;
4435
+ viewContextMenu: _angular_core.OutputEmitterRef<AXPQueryViewContextMenuEvent>;
3836
4436
  protected isMounted: _angular_core.WritableSignal<boolean>;
3837
4437
  ngAfterViewInit(): void;
3838
4438
  setView(view: AXPViewQuery): void;
4439
+ protected onTabContextMenu(event: MouseEvent, view: AXPViewQuery): void;
3839
4440
  handleActiveChange(e: any): void;
3840
4441
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryViewsComponent, never>;
3841
- 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>;
4442
+ 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"; "viewContextMenu": "viewContextMenu"; }, never, never, true, never>;
4443
+ }
4444
+
4445
+ declare class AXPQueryViewTabsComponent {
4446
+ private readonly translationService;
4447
+ private readonly contextMenu;
4448
+ views: _angular_core.InputSignal<AXPViewQuery[]>;
4449
+ selectedView: _angular_core.InputSignal<AXPViewQuery>;
4450
+ selectedViewChange: _angular_core.OutputEmitterRef<AXPViewQuery>;
4451
+ edit: _angular_core.OutputEmitterRef<AXPViewQuery>;
4452
+ remove: _angular_core.OutputEmitterRef<AXPViewQuery>;
4453
+ private readonly contextView;
4454
+ protected onSelectedViewChange(view: AXPViewQuery): void;
4455
+ protected onViewContextMenu(payload: AXPQueryViewContextMenuEvent): Promise<void>;
4456
+ protected onContextMenuItemClick(event: AXContextMenuItemsClickEvent): void;
4457
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryViewTabsComponent, never>;
4458
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryViewTabsComponent, "axp-query-view-tabs", never, { "views": { "alias": "views"; "required": true; "isSignal": true; }; "selectedView": { "alias": "selectedView"; "required": true; "isSignal": true; }; }, { "selectedViewChange": "selectedViewChange"; "edit": "edit"; "remove": "remove"; }, never, never, true, never>;
4459
+ }
4460
+
4461
+ declare class AXPQueryViewSaveButtonComponent {
4462
+ visible: _angular_core.InputSignal<boolean>;
4463
+ save: _angular_core.OutputEmitterRef<void>;
4464
+ protected onSave(): void;
4465
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryViewSaveButtonComponent, never>;
4466
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryViewSaveButtonComponent, "axp-query-view-save-button", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; }, { "save": "save"; }, never, never, true, never>;
4467
+ }
4468
+
4469
+ interface AXPQueryViewSaveDialogInput {
4470
+ mode: 'create' | 'edit';
4471
+ title?: string;
4472
+ }
4473
+ interface AXPQueryViewSaveDialogResult {
4474
+ title: string;
4475
+ includeActiveView: boolean;
4476
+ }
4477
+ declare class AXPQueryViewSaveDialogService {
4478
+ private readonly layoutBuilder;
4479
+ private readonly dialogService;
4480
+ private readonly translationService;
4481
+ open(initial: AXPQueryViewSaveDialogInput): Promise<AXPQueryViewSaveDialogResult | null>;
4482
+ confirmDelete(): Promise<boolean>;
4483
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryViewSaveDialogService, never>;
4484
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPQueryViewSaveDialogService>;
3842
4485
  }
3843
4486
 
3844
4487
  /**
@@ -3936,16 +4579,25 @@ interface AXPWidgetPropertiesChangedEvent {
3936
4579
  }
3937
4580
  declare class AXPWidgetPropertyViewerComponent {
3938
4581
  widget: _angular_core.InputSignal<AXPWidgetNode>;
3939
- mode: _angular_core.InputSignal<"simple" | "advanced">;
4582
+ mode: _angular_core.InputSignal<"advanced" | "simple">;
4583
+ /** Designer toolbar size. Prefer this over DI so drawers still receive the active profile. */
4584
+ layoutProfile: _angular_core.InputSignal<AXPLayoutProfileContext | null>;
4585
+ /**
4586
+ * How binding expressions are edited. Designer side panel should use `popup`;
4587
+ * dialogs (enough width) should use `inline`.
4588
+ */
4589
+ bindingExpressionEditorMode: _angular_core.InputSignal<AXPPropertyViewerBindingExpressionEditorMode>;
3940
4590
  onChanged: EventEmitter<AXPWidgetPropertiesChangedEvent>;
3941
4591
  protected readonly propertyViewerRef: _angular_core.Signal<AXPPropertyViewerComponent | undefined>;
3942
4592
  protected readonly config: _angular_core.WritableSignal<AXPWidgetConfig<any> | null>;
3943
4593
  protected readonly tabs: _angular_core.WritableSignal<AXPPropertyViewerTab[]>;
3944
4594
  protected initialContext: Record<string, unknown>;
3945
4595
  protected groupCollapsedStates: Map<string, boolean>;
3946
- /** When true, the next onChanged from the inner viewer was caused by our update(); do not forward to avoid loop. */
4596
+ /** When true, onChanged updates from the inner viewer were caused by hydrate/push; do not forward. */
3947
4597
  private suppressNextEmit;
4598
+ private suppressTimer?;
3948
4599
  private readonly widgetRegistryService;
4600
+ private readonly injectedLayoutProfile;
3949
4601
  constructor();
3950
4602
  /**
3951
4603
  * Merges the given values into the property viewer context. Called by the designer when applying changes (e.g. undo/redo).
@@ -3954,13 +4606,21 @@ declare class AXPWidgetPropertyViewerComponent {
3954
4606
  update(values: any): void;
3955
4607
  private fillTabs;
3956
4608
  protected handlePropertyViewerChanged(ev: AXPPropertyViewerChangedEvent): void;
4609
+ protected readonly activeLayoutProfile: _angular_core.Signal<AXPLayoutProfileContext>;
4610
+ private asRecord;
4611
+ private layoutProfileProperties;
4612
+ private projectLayoutProfileValues;
4613
+ private persistLayoutProfileValues;
4614
+ /** Keep the live tree in sync even if the designer command is skipped. */
4615
+ private writeLayoutProfileToWidget;
4616
+ private holdEmitSuppression;
3957
4617
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerComponent, never>;
3958
- 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>;
4618
+ 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; }; "layoutProfile": { "alias": "layoutProfile"; "required": false; "isSignal": true; }; "bindingExpressionEditorMode": { "alias": "bindingExpressionEditorMode"; "required": false; "isSignal": true; }; }, { "onChanged": "onChanged"; }, never, never, true, never>;
3959
4619
  }
3960
4620
 
3961
4621
  declare class AXPWidgetPropertyViewerPopupComponent extends AXBasePageComponent {
3962
4622
  widget: _angular_core.InputSignal<AXPWidgetNode>;
3963
- mode: _angular_core.InputSignal<"simple" | "advanced">;
4623
+ mode: _angular_core.InputSignal<"advanced" | "simple">;
3964
4624
  protected currentValues: _angular_core.WritableSignal<any>;
3965
4625
  constructor();
3966
4626
  protected handlePropertyChanged(event: {
@@ -3973,95 +4633,5 @@ declare class AXPWidgetPropertyViewerPopupComponent extends AXBasePageComponent
3973
4633
  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>;
3974
4634
  }
3975
4635
 
3976
- interface AXPWidgetPropertyInjection {
3977
- property: AXPWidgetProperty;
3978
- tab?: {
3979
- name?: string;
3980
- title?: string;
3981
- };
3982
- group?: {
3983
- name?: string;
3984
- title?: string;
3985
- };
3986
- }
3987
- interface AXPWidgetPropertyViewerConfig {
3988
- title: string;
3989
- widget: AXPWidgetNode;
3990
- mode?: 'simple' | 'advanced';
3991
- onApply?: (result: AXPWidgetPropertyViewerResult) => void | Promise<void>;
3992
- /**
3993
- * Property names to exclude from the viewer.
3994
- */
3995
- exclude?: string[];
3996
- /**
3997
- * Custom property injection configuration.
3998
- */
3999
- custom?: {
4000
- /**
4001
- * Custom property injection entries.
4002
- */
4003
- properties: AXPWidgetPropertyInjection[];
4004
- /**
4005
- * Default tab fallback if property injection doesn't specify one.
4006
- * When omitted, falls back to the first tab or "general".
4007
- */
4008
- defaultTab?: {
4009
- name?: string;
4010
- title?: string;
4011
- };
4012
- /**
4013
- * Default group fallback when injection doesn't specify a group.
4014
- * When omitted, falls back to the tab's first group or property defined group.
4015
- */
4016
- defaultGroup?: {
4017
- name?: string;
4018
- title?: string;
4019
- };
4020
- };
4021
- }
4022
- /** Emitted when the dialog applies; `values` is the updated viewer context (merge into {@link AXPWidgetNode} as needed). */
4023
- interface AXPWidgetPropertyViewerResult {
4024
- values: any;
4025
- mode: 'init' | 'update';
4026
- }
4027
- interface IAXPWidgetPropertyViewerRoot {
4028
- dialog(delegate: (container: IAXPWidgetPropertyViewerDialogBuilder) => void): IAXPWidgetPropertyViewerDialogBuilder;
4029
- }
4030
- interface IAXPWidgetPropertyViewerDialogBuilder {
4031
- setTitle(title: string): IAXPWidgetPropertyViewerDialogBuilder;
4032
- /**
4033
- * Initial widget state shown in the viewer (type, options, name/path, …). Call before {@link show}.
4034
- */
4035
- setWidget(widget: AXPWidgetNode): IAXPWidgetPropertyViewerDialogBuilder;
4036
- setMode(mode: 'simple' | 'advanced'): IAXPWidgetPropertyViewerDialogBuilder;
4037
- setExclude(exclude: string[]): IAXPWidgetPropertyViewerDialogBuilder;
4038
- setCustom(custom: AXPWidgetPropertyViewerConfig['custom']): IAXPWidgetPropertyViewerDialogBuilder;
4039
- /**
4040
- * When set to a non-empty array, builds tabs from these properties and skips registry lookup for {@link setWidget}'s type.
4041
- * Omit or clear to resolve widget config from {@link AXPWidgetRegistryService} as usual.
4042
- */
4043
- setPropertyDefinitions(properties: AXPWidgetProperty[] | null): IAXPWidgetPropertyViewerDialogBuilder;
4044
- onAction(handler: (dialogRef: AXPPropertyViewerActionRef) => void | Promise<void> | unknown | Promise<unknown>): IAXPWidgetPropertyViewerDialogBuilder;
4045
- /**
4046
- * Applies edits and returns updated context; merge {@link AXPWidgetPropertyViewerResult.values} into your widget node
4047
- * (typically `options` and any top-level fields the viewer exposes).
4048
- */
4049
- show(): Promise<AXPWidgetPropertyViewerResult | null>;
4050
- }
4051
- declare class AXPWidgetPropertyViewerService {
4052
- private readonly widgetRegistryService;
4053
- private readonly propertyViewerService;
4054
- /**
4055
- * Same shape as `AXPPropertyViewerService.create()` — use `.dialog((d) => { ... }).show()`.
4056
- */
4057
- create(): IAXPWidgetPropertyViewerRoot;
4058
- /**
4059
- * One-shot open (delegates to {@link #create} `.dialog().show()`).
4060
- */
4061
- open(config: AXPWidgetPropertyViewerConfig): Promise<AXPWidgetPropertyViewerResult | null>;
4062
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerService, never>;
4063
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPWidgetPropertyViewerService>;
4064
- }
4065
-
4066
- export { AXPActivityLogComponent, AXPAvatarComponent, AXPCategoryTreeComponent, AXPColorChooserComponent, AXPColorPalettePickerComponent, AXPColumnItemListComponent, AXPCompareViewComponent, AXPConditionBuilderComponent, AXPConditionBuilderConditionComponent, AXPDataSelectorComponent, AXPDataSelectorService, AXPDragDropListComponent, AXPExpressionFieldDefinitions, AXPFileChooserCompressImagesHook, AXPFileChooserDirective, AXPFileChooserHookKeys, AXPFileChooserService, AXPFileChooserZipFilesHook, AXPFileUploaderDirective, AXPFileUploaderHookKeys, AXPFileUploaderService, AXPFileViewerComponent, AXPFileViewerFallbackContentComponent, AXPFileViewerService, AXPImageEditorPopupComponent, AXPImageEditorService, AXPInfiniteScrollDirective, AXPItemConfiguratorComponent, AXPLayoutFloatingZoomBarComponent, AXPLayoutSideDetailPanelComponent, AXPLayoutSideDetailPanelSectionDirective, AXPMarkdownTemplateDirective, AXPMarkdownViewerComponent, AXPMenuBadgeHelper, AXPMenuCustomizerComponent, AXPMenuCustomizerService, AXPOutcomeResultsViewerComponent, AXPPageComponentRegistryService, AXPPreloadFiltersComponent, AXPPropertyViewerComponent, AXPPropertyViewerPopupComponent, AXPPropertyViewerService, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPRepeaterRowsLayoutComponent, AXPResourceAppointmentBoardProvider, AXPResourceAppointmentComponent, AXPResourceAppointmentService, AXPSectionItemsBuilderComponent, AXPSignatureEditorService, AXPSpreadsheetComponent, AXPStandardSectionItemsBuilderComponent, AXPStopwatchComponent, AXPTableColumnsEditorComponent, AXPTableColumnsEditorPopupComponent, AXPTableColumnsEditorService, AXPTableDataEditorComponent, AXPTableDataEditorPopupComponent, AXPTableDataEditorService, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPTextCommandColumnComponent, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPUserCardComponent, AXPUserCardDirective, AXPUserCardService, AXPVirtualKeypadComponent, AXPWidgetFieldConfiguratorComponent, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_EXPRESSION_LOGIC_DEFINITIONS, AXP_EXPRESSION_OPERATION_DEFINITIONS, AXP_FILE_CHOOSER_DEFAULT_ZIP_ARCHIVE_NAME, AXP_FILE_CHOOSER_HOOK_PROVIDERS, AXP_FILE_CHOOSER_OPTION_KEYS, AXP_FILE_CHOOSER_PROVIDERS, AXP_FILE_UPLOADER_PROVIDERS, AXP_INFINITE_SCROLL_DEFAULT_ROOT_MARGIN, AXP_MENU_CUSTOMIZER_SERVICE, AXP_PAGE_COMPONENT_PROVIDER, AXP_PAGE_LAYOUT_ELEMENT_ID, AXP_RESOURCE_APPOINTMENT_PROVIDER, AXP_SYSTEM_FILE_CHOOSER_PROVIDER, AXP_SYSTEM_FILE_UPLOADER_PROVIDER, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER, STANDARD_SECTION_ITEMS_SECTION_TABS, USER_CARD_HOVER_OPEN_DELAY_MS, USER_CARD_ITEMS_HOOK, USER_CARD_ITEMS_SKELETON_DELAY_MS, buildFileChooserOptions, buildPropertyViewerInitialContextFromProperties, buildPropertyViewerTabsFromProperties, buildTableColumnsEditorLayout, compressImageFile, createAttachedFileProviderMenu, createZipArchive, fileListItemToFileViewerItem, fileMatchesAccept, filterFileProvidersByContext, filterFilesByAcceptAndMaxSize, formatAcceptForDisplay, formatMaxFileSizeForDisplay, getFieldDefinitions, getLogicDefinition, getOperationDefinition, isPropertyBindingExpressionFormValue, isUnrestrictedFileAccept, mapFileListToViewerItems, mergeInfiniteScrollPage, normalizeFileViewerBoundValue, notifyFileAcceptRejections, observeInfiniteScroll, preparePropertyForViewer, preparePropertyViewerTabs, provideFileChooserHooks, registerFieldDefinitions, resolveExcludedFileProviderKeys, resolveFileChooserAccept, resolveFileChooserExtension, resolveFileListItemUrl, resolveFileUploaderEmptyStateDescription, resolveInfiniteScrollRoot, sortUserCardActions, sortUserCardRows, validateFileChooserItems, visibleUserCardActions, withValidationsOnEditorNode };
4067
- export type { AXPActivityLogCompareRequest, AXPAttachedFileProviderMenu, AXPBuilderBadge, AXPBuilderBadgeVariant, AXPBuilderDefinition, AXPBuilderItem, AXPBuilderItemIconTone, AXPBuilderItemViewModel, AXPBuilderSection, AXPBuilderTexts, AXPBuilderValue, AXPCategoryTreeActions, AXPCategoryTreeConfig, AXPCategoryTreeDataSource, AXPCategoryTreeEvents, AXPCategoryTreeNode, AXPColorChooserGroup, AXPColorChooserLook, AXPColorChooserSwatch, AXPColumnItemListItem, AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPDataSelectorAllowCreate, AXPDataSelectorCategoryConfig, AXPDataSelectorCategoryFilterConfig, AXPDataSelectorColumn, AXPDataSelectorConfig, AXPDataSelectorCreateConfig, AXPDataSelectorFilterConfig, AXPDataSelectorFooterPrefixAction, AXPDataSelectorGridConfig, AXPDataSelectorRowActionItem, AXPDataSelectorRowActionsHandler, AXPDataSelectorSearchConfig, AXPDataSelectorSearchField, AXPDataSelectorSelectionConfig, AXPDragDropListConfig, AXPDragDropListDropEvent, AXPDragDropListItem, AXPExpressionFieldDefinition, AXPExpressionGroupNode, AXPExpressionLogicDefinition, AXPExpressionLogicType, AXPExpressionNode, AXPExpressionNodeId, AXPExpressionOperationDefinition, AXPExpressionOperationNode, AXPExpressionOperationType, AXPExpressionTree, AXPExpressionValueOperand, AXPExpressionValueSourceType, AXPFileChooserAfterChosenPayload, AXPFileChooserContext, AXPFileChooserOptionKey, AXPFileChooserProvider, AXPFileProviderDestination, AXPFileUploaderBeforeUploadPayload, AXPFileUploaderContext, AXPFileUploaderProvider, AXPFileViewerGalleryConfig, AXPFileViewerOpenFilesOptions, AXPImageEditorOpenOptions, AXPInfiniteScrollMergeResult, AXPInfiniteScrollPage, AXPInfiniteScrollRoot, AXPLayoutSideDetailPanelEmptyState, AXPLayoutSideDetailPanelHeader, AXPLayoutSideDetailPanelHeaderIcon, AXPLayoutSideDetailPanelRow, AXPLayoutSideDetailPanelRowFormat, AXPLayoutSideDetailPanelSection, AXPMenuCustomizerAction, AXPMenuCustomizerItem, AXPMenuCustomizerItemType, AXPMenuCustomizerNodeData, AXPMenuCustomizerNodeMetadata, AXPMenuCustomizerState, AXPObserveInfiniteScrollOptions, AXPOutcomeResultRow, AXPOutcomeResultSection, AXPOutcomeResultValuePresentation, AXPOutcomeResultsViewModel, AXPPageComponentDefinition, AXPPageComponentProvider, AXPPreloadFiltersApplyEvent, AXPPropertyViewerActionRef, AXPPropertyViewerChangedEvent, AXPPropertyViewerConfig, AXPPropertyViewerGroup, AXPPropertyViewerResult, AXPPropertyViewerTab, AXPResourceAppointmentActionMenuItem, AXPResourceAppointmentBoardFilter, AXPResourceAppointmentItem, AXPResourceAppointmentResource, AXPResourceAppointmentStatus, AXPSignatureEditorAction, AXPSignatureEditorOpenOptions, AXPSignatureEditorResult, AXPSpreadsheetCellChangeEvent, AXPSpreadsheetCellValue, AXPSpreadsheetColumn, AXPSpreadsheetConfig, AXPSpreadsheetData, AXPSpreadsheetItem, AXPSpreadsheetRowChangeEvent, AXPSpreadsheetRowMode, AXPStandardSectionFormContext, AXPStandardSectionItemsBuilderConfig, AXPTableColumnDefinition, AXPTableColumnsEditorOpenOptions, AXPTableDataEditorOpenOptions, AXPTemplateViewerConfig, AXPTemplateViewerResult, AXPTextCommandColumnClickEvent, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPUserCardAction, AXPUserCardItemsPayload, AXPUserCardRow, AXPUserCardShowOptions, AXPUserCardTrigger, AXPVirtualKeypadAction, AXPVirtualKeypadKey, AXPVirtualKeypadLook, AXPVirtualKeypadPressEvent, AXPWidgetItemClickEvent, AXPWidgetItemData, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyInjection, AXPWidgetPropertyViewerConfig, AXPWidgetPropertyViewerResult, ConditionBuilderSelectedField, FileAcceptFilterResult, FileAcceptRejectedFile, FileUploaderEmptyStateDescriptionKey, FileViewerUrlTracker, IAXPPropertyViewerDialogBuilder, IAXPPropertyViewerRoot, IAXPWidgetPropertyViewerDialogBuilder, IAXPWidgetPropertyViewerRoot, ItemConfiguratorListItem };
4636
+ export { AXPActivityLogComponent, AXPAvatarComponent, AXPCategoryTreeComponent, AXPColorChooserComponent, AXPColorPalettePickerComponent, AXPColumnItemListComponent, AXPCompareViewComponent, AXPConditionBuilderComponent, AXPConditionBuilderConditionComponent, AXPDataSelectorComponent, AXPDataSelectorService, AXPDragDropListComponent, AXPEntityListStylingDialogService, AXPEntityListStylingPopupComponent, AXPExpressionFieldDefinitions, AXPFileChooserCompressImagesHook, AXPFileChooserDirective, AXPFileChooserHookKeys, AXPFileChooserService, AXPFileChooserZipFilesHook, AXPFileUploaderDirective, AXPFileUploaderHookKeys, AXPFileUploaderService, AXPFileViewerComponent, AXPFileViewerFallbackContentComponent, AXPFileViewerService, AXPImageEditorPopupComponent, AXPImageEditorService, AXPInfiniteScrollDirective, AXPItemConfiguratorComponent, AXPLayoutFloatingZoomBarComponent, AXPLayoutSideDetailPanelComponent, AXPLayoutSideDetailPanelSectionDirective, AXPLocalDataSourceEditorDialogService, AXPMarkdownTemplateDirective, AXPMarkdownViewerComponent, AXPMenuBadgeHelper, AXPMenuCustomizerComponent, AXPMenuCustomizerService, AXPOutcomeResultsViewerComponent, AXPPageComponentRegistryService, AXPPreloadFiltersComponent, AXPPropertyViewerComponent, AXPPropertyViewerPopupComponent, AXPPropertyViewerService, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewSaveButtonComponent, AXPQueryViewSaveDialogService, AXPQueryViewTabsComponent, AXPQueryViewsComponent, AXPRepeaterRowsLayoutComponent, AXPResourceAppointmentBoardProvider, AXPResourceAppointmentComponent, AXPResourceAppointmentService, AXPSectionItemsBuilderComponent, AXPSignatureEditorService, AXPSpreadsheetComponent, AXPStandardSectionItemsBuilderComponent, AXPStopwatchComponent, AXPTableColumnsEditorComponent, AXPTableColumnsEditorPopupComponent, AXPTableColumnsEditorService, AXPTableDataEditorComponent, AXPTableDataEditorPopupComponent, AXPTableDataEditorService, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPTextCommandColumnComponent, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPUserCardComponent, AXPUserCardDirective, AXPUserCardService, AXPVirtualKeypadComponent, AXPWidgetFieldConfiguratorComponent, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_EXPRESSION_LOGIC_DEFINITIONS, AXP_EXPRESSION_OPERATION_DEFINITIONS, AXP_FILE_CHOOSER_DEFAULT_ZIP_ARCHIVE_NAME, AXP_FILE_CHOOSER_HOOK_PROVIDERS, AXP_FILE_CHOOSER_OPTION_KEYS, AXP_FILE_CHOOSER_PROVIDERS, AXP_FILE_UPLOADER_PROVIDERS, AXP_IMAGE_FILE_CHOOSER_ACCEPT, AXP_INFINITE_SCROLL_DEFAULT_ROOT_MARGIN, AXP_MENU_CUSTOMIZER_SERVICE, AXP_PAGE_COMPONENT_PROVIDER, AXP_PAGE_LAYOUT_ELEMENT_ID, AXP_PROFILE_PHOTO_GRAVATAR_SOURCE_KEY, AXP_RESOURCE_APPOINTMENT_PROVIDER, AXP_SIGNATURE_PROVIDER, AXP_SPREADSHEET_COLUMN_WIDGET_TYPES, AXP_SYSTEM_FILE_CHOOSER_PROVIDER, AXP_SYSTEM_FILE_UPLOADER_PROVIDER, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER, PROPERTY_VIEWER_EXPRESSION_EDITOR_MIN_LINES, SPREADSHEET_COLUMN_NAME_PATH, SPREADSHEET_COLUMN_TITLE_PATH, STANDARD_SECTION_ITEMS_SECTION_TABS, USER_CARD_HOVER_OPEN_DELAY_MS, USER_CARD_ITEMS_HOOK, USER_CARD_ITEMS_SKELETON_DELAY_MS, asSpreadsheetColumnTitle, buildEntityListStylingRulesLayout, buildFileChooserOptions, buildGravatarAvatarUrl, buildPropertyViewerInitialContextFromProperties, buildPropertyViewerTabsFromProperties, buildTableColumnsEditorLayout, compressImageFile, createAttachedFileProviderMenu, createZipArchive, fetchGravatarImageFile, fileListItemToFileViewerItem, fileListItemToImageFile, fileMatchesAccept, fileNameMatchesAccept, filterFileProvidersByContext, filterFilesByAcceptAndMaxSize, formatAcceptForDisplay, formatMaxFileSizeForDisplay, getFieldDefinitions, getLogicDefinition, getOperationDefinition, isPropertyBindingExpressionFormValue, isUnrestrictedFileAccept, mapFileListToViewerItems, md5Hex, mergeInfiniteScrollPage, mergeObjectsReplacingArrays, normalizeFileViewerBoundValue, normalizeSpreadsheetColumnName, notifyFileAcceptRejections, observeInfiniteScroll, pickImageFileViaFileChooser, pickProfilePhotoImageFile, preparePropertyForViewer, preparePropertyViewerTabs, provideFileChooserHooks, readSpreadsheetColumnIdentity, readSpreadsheetColumnWidth, registerFieldDefinitions, resolveExcludedFileProviderKeys, resolveFileChooserAccept, resolveFileChooserExtension, resolveFileListItemUrl, resolveFileUploaderEmptyStateDescription, resolveInfiniteScrollRoot, sortUserCardActions, sortUserCardRows, spreadsheetColumnIdentityProperties, toSpreadsheetColumnWidget, validateFileChooserItems, visibleUserCardActions, withValidationsOnEditorNode };
4637
+ export type { AXPActivityLogCompareRequest, AXPAttachedFileProviderMenu, AXPBuilderBadge, AXPBuilderBadgeVariant, AXPBuilderDefinition, AXPBuilderItem, AXPBuilderItemIconTone, AXPBuilderItemViewModel, AXPBuilderSection, AXPBuilderTexts, AXPBuilderValue, AXPCategoryTreeActions, AXPCategoryTreeConfig, AXPCategoryTreeDataSource, AXPCategoryTreeEvents, AXPCategoryTreeNode, AXPColorChooserGroup, AXPColorChooserLook, AXPColorChooserSwatch, AXPColumnItemListItem, AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPDataSelectorAllowCreate, AXPDataSelectorCategoryConfig, AXPDataSelectorCategoryFilterConfig, AXPDataSelectorColumn, AXPDataSelectorConfig, AXPDataSelectorCreateConfig, AXPDataSelectorFilterConfig, AXPDataSelectorFooterPrefixAction, AXPDataSelectorGridConfig, AXPDataSelectorRowActionItem, AXPDataSelectorRowActionsHandler, AXPDataSelectorSearchConfig, AXPDataSelectorSearchField, AXPDataSelectorSelectionConfig, AXPDragDropListConfig, AXPDragDropListDropEvent, AXPDragDropListItem, AXPEntityListStylingDialogInput, AXPEntityListStylingRulesKind, AXPEntityListStylingRulesLayoutOptions, AXPExpressionFieldDefinition, AXPExpressionGroupNode, AXPExpressionLogicDefinition, AXPExpressionLogicType, AXPExpressionNode, AXPExpressionNodeId, AXPExpressionOperationDefinition, AXPExpressionOperationNode, AXPExpressionOperationType, AXPExpressionTree, AXPExpressionValueOperand, AXPExpressionValueSourceType, AXPFileChooserAfterChosenPayload, AXPFileChooserContext, AXPFileChooserOptionKey, AXPFileChooserProvider, AXPFileProviderDestination, AXPFileUploaderBeforeUploadPayload, AXPFileUploaderContext, AXPFileUploaderProvider, AXPFileViewerGalleryConfig, AXPFileViewerOpenFilesOptions, AXPImageEditorOpenOptions, AXPInfiniteScrollMergeResult, AXPInfiniteScrollPage, AXPInfiniteScrollRoot, AXPLayoutSideDetailPanelEmptyState, AXPLayoutSideDetailPanelHeader, AXPLayoutSideDetailPanelHeaderIcon, AXPLayoutSideDetailPanelRow, AXPLayoutSideDetailPanelRowFormat, AXPLayoutSideDetailPanelSection, AXPLocalDataSourceEditorDialogInput, AXPLocalDataSourceEditorDialogResult, AXPMenuCustomizerAction, AXPMenuCustomizerItem, AXPMenuCustomizerItemType, AXPMenuCustomizerNodeData, AXPMenuCustomizerNodeMetadata, AXPMenuCustomizerState, AXPObserveInfiniteScrollOptions, AXPOutcomeResultRow, AXPOutcomeResultSection, AXPOutcomeResultValuePresentation, AXPOutcomeResultsViewModel, AXPPageComponentDefinition, AXPPageComponentProvider, AXPPreloadFiltersApplyEvent, AXPProfilePhotoImagePickOptions, AXPProfilePhotoImagePickResult, AXPPropertyViewerActionRef, AXPPropertyViewerBindingExpressionEditorMode, AXPPropertyViewerChangedEvent, AXPPropertyViewerConfig, AXPPropertyViewerGroup, AXPPropertyViewerResult, AXPPropertyViewerTab, AXPQueryViewContextMenuEvent, AXPQueryViewSaveDialogInput, AXPQueryViewSaveDialogResult, AXPResourceAppointmentActionMenuItem, AXPResourceAppointmentBoardFilter, AXPResourceAppointmentItem, AXPResourceAppointmentResource, AXPResourceAppointmentStatus, AXPSignatureEditorAction, AXPSignatureEditorOpenOptions, AXPSignatureEditorResult, AXPSignatureProvider, AXPSpreadsheetCellChangeEvent, AXPSpreadsheetCellValue, AXPSpreadsheetColumn, AXPSpreadsheetColumnChangeEvent, AXPSpreadsheetColumnWidgetType, AXPSpreadsheetConfig, AXPSpreadsheetData, AXPSpreadsheetItem, AXPSpreadsheetRowChangeEvent, AXPSpreadsheetRowMode, AXPStandardSectionFormContext, AXPStandardSectionItemsBuilderConfig, AXPTableColumnDefinition, AXPTableColumnsEditorOpenOptions, AXPTableDataEditorOpenOptions, AXPTemplateViewerConfig, AXPTemplateViewerResult, AXPTextCommandColumnClickEvent, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPUserCardAction, AXPUserCardItemsPayload, AXPUserCardRow, AXPUserCardShowOptions, AXPUserCardTrigger, AXPVirtualKeypadAction, AXPVirtualKeypadKey, AXPVirtualKeypadLook, AXPVirtualKeypadPressEvent, AXPWidgetItemClickEvent, AXPWidgetItemData, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyInjection, AXPWidgetPropertyViewerConfig, AXPWidgetPropertyViewerResult, ConditionBuilderSelectedField, FileAcceptFilterResult, FileAcceptRejectedFile, FileUploaderEmptyStateDescriptionKey, FileViewerUrlTracker, IAXPPropertyViewerDialogBuilder, IAXPPropertyViewerRoot, IAXPWidgetPropertyViewerDialogBuilder, IAXPWidgetPropertyViewerRoot, ItemConfiguratorListItem };